ERC-20
Overview
Max Total Supply
100,000,000,000 ElonX3
Holders
9
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
16,118,517.444756560167543672 ElonX3Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ElonX3
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-26 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /** X: https://twitter.com/BasedElonX3 Telegram: https://t.me/+vajtZ_Ky9-cyYjky Website: https://elonxxx.wtf/ **/ 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); } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(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 Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. */ 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; } } /** * @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); } } } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract ElonX3 is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public isTradeOpen = false; 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; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000000 * (10**18); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "ElonX3"; string private _symbol = "ElonX3"; uint8 private _decimals = 18; uint256 private _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 private _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 private _burnFee; uint256 private _previousBurnFee = _burnFee; address public deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 private _marketingFee; uint256 private _previousMarketingFee = _marketingFee; address payable public marketingWallet = payable(0x8c042cc2ec98b6A5Ee6099ef4e4828D408267633); uint256 public buyMarketingFee = 2; uint256 public buyLiquidityFee = 0; uint256 public sellMarketingFee = 0; uint256 public sellLiquidityFee = 5; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; uint256 public numTokensSellToAddToLiquidity = 50000000 * 10**18; uint256 public _maxTxAmount = 100000000000 * 10**18; address public node; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet router address //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // testnet router address // 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[marketingWallet] = true; _isExcludedFromFee[address(this)] = true; node = msg.sender; emit Transfer(address(0), owner(), _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) private 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) private 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) private view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) private onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) internal 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 _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 calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee==0 && _burnFee==0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousBurnFee = _burnFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _liquidityFee = 0; _marketingFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _burnFee = _previousBurnFee; _marketingFee = _previousMarketingFee; } 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(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) { require(isTradeOpen, "Trade is closed"); } if(from == uniswapV2Pair) { _marketingFee = buyMarketingFee; _liquidityFee = buyLiquidityFee; } if(to == uniswapV2Pair){ _marketingFee = sellMarketingFee; _liquidityFee = sellLiquidityFee; } // 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)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled && _marketingFee > 0 && _liquidityFee > 0 ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity and send bnb to marketing wallet swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 liquidityTokens = contractTokenBalance.mul(_liquidityFee).div(_liquidityFee.add(_marketingFee)); // split the contract balance into halves uint256 half = liquidityTokens.div(2); uint256 otherHalf = liquidityTokens.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); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); swapTokensForEth(contractTokenBalance.sub(liquidityTokens)); marketingWallet.transfer(address(this).balance); 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 node, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { removeAllFee(); } else { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } if(sender != uniswapV2Pair && recipient != uniswapV2Pair){ 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(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { restoreAllFee(); } if(sender != uniswapV2Pair && recipient != uniswapV2Pair){ restoreAllFee(); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = takeBurn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = takeMarketing(sender, tTransferAmount, rTransferAmount, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_burnFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tBurn = tAmount.div(100).mul(_burnFee); uint256 rBurn = tBurn.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rBurn); tTransferAmount = tTransferAmount.sub(tBurn); _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn); emit Transfer(sender, deadAddress, tBurn); return(tTransferAmount, rTransferAmount); } function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_marketingFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tMarketing = tAmount.div(100).mul(_marketingFee); uint256 rMarketing = tMarketing.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rMarketing); tTransferAmount = tTransferAmount.sub(tMarketing); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); emit Transfer(sender, address(this), tMarketing); return(tTransferAmount, rTransferAmount); } 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); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function setMarketingWallet(address payable newWallet) external onlyOwner() { marketingWallet = newWallet; } function setNumTokensSellToAddToLiquidity(uint256 newAmount) external onlyOwner() { numTokensSellToAddToLiquidity = newAmount; } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; require(_maxTxAmount > totalSupply().div(200), "value too low"); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function enableTrading() public onlyOwner{ isTradeOpen = true; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","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":"includeInFee","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":[],"name":"isTradeOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"node","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":[],"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600060156101000a81548160ff02191690831515021790555060008060166101000a81548160ff0219169083151502179055506c01431e0fae6d7217caa00000006007556007546000196200005c919062000894565b6000196200006b9190620008fb565b6008556040518060400160405280600681526020017f456c6f6e58330000000000000000000000000000000000000000000000000000815250600a9080519060200190620000bb929190620007ab565b506040518060400160405280600681526020017f456c6f6e58330000000000000000000000000000000000000000000000000000815250600b908051906020019062000109929190620007ab565b506012600c60006101000a81548160ff021916908360ff160217905550600d54600e55600f5460105560115460125561dead601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601454601555738c042cc2ec98b6a5ee6099ef4e4828d408267633601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002601755600060185560006019556005601a556a295be96e64066972000000601d556c01431e0fae6d7217caa0000000601e553480156200021757600080fd5b50620002386200022c620006b660201b60201c565b620006be60201b60201c565b600854600160006200024f6200078260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ed57600080fd5b505afa15801562000302573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003289190620009a0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038b57600080fd5b505afa158015620003a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c69190620009a0565b6040518363ffffffff1660e01b8152600401620003e5929190620009e3565b602060405180830381600087803b1580156200040057600080fd5b505af115801562000415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043b9190620009a0565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004d26200078260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006466200078260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620006a7919062000a21565b60405180910390a35062000aa3565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620007b99062000a6d565b90600052602060002090601f016020900481019282620007dd576000855562000829565b82601f10620007f857805160ff191683800117855562000829565b8280016001018555821562000829579182015b82811115620008285782518255916020019190600101906200080b565b5b5090506200083891906200083c565b5090565b5b80821115620008575760008160009055506001016200083d565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620008a1826200085b565b9150620008ae836200085b565b925082620008c157620008c062000865565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000908826200085b565b915062000915836200085b565b9250828210156200092b576200092a620008cc565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000968826200093b565b9050919050565b6200097a816200095b565b81146200098657600080fd5b50565b6000815190506200099a816200096f565b92915050565b600060208284031215620009b957620009b862000936565b5b6000620009c98482850162000989565b91505092915050565b620009dd816200095b565b82525050565b6000604082019050620009fa6000830185620009d2565b62000a096020830184620009d2565b9392505050565b62000a1b816200085b565b82525050565b600060208201905062000a38600083018462000a10565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a8657607f821691505b6020821081141562000a9d5762000a9c62000a3e565b5b50919050565b614d098062000ab36000396000f3fe60806040526004361061021e5760003560e01c806375f0a87411610123578063c49b9a80116100ab578063ec28438a1161006f578063ec28438a146107e8578063f0f165af14610811578063f11a24d31461083a578063f2fde38b14610865578063f63743421461088e57610225565b8063c49b9a8014610703578063d12a76881461072c578063d70754ec14610757578063dd62ed3e14610782578063ea2f0b37146107bf57610225565b80638da5cb5b116100f25780638da5cb5b14610608578063921369131461063357806395d89b411461065e578063a457c2d714610689578063a9059cbb146106c657610225565b806375f0a874146105705780637bce5a041461059b5780637d1db4a5146105c65780638a8c523c146105f157610225565b80633bd5d173116101a65780635342acb4116101755780635342acb41461048b5780635d098b38146104c857806360901444146104f157806370a082311461051c578063715018a61461055957610225565b80633bd5d173146103e3578063437823ec1461040c57806349bd5a5e146104355780634a74bb021461046057610225565b806318160ddd116101ed57806318160ddd146102e857806323b872dd1461031357806327c8f83514610350578063313ce5671461037b57806339509351146103a657610225565b806306fdde031461022a578063095ea7b31461025557806313114a9d146102925780631694505e146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108b9565b60405161024c9190613c93565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190613d4e565b61094b565b6040516102899190613da9565b60405180910390f35b34801561029e57600080fd5b506102a7610969565b6040516102b49190613dd3565b60405180910390f35b3480156102c957600080fd5b506102d2610973565b6040516102df9190613e4d565b60405180910390f35b3480156102f457600080fd5b506102fd610999565b60405161030a9190613dd3565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613e68565b6109a3565b6040516103479190613da9565b60405180910390f35b34801561035c57600080fd5b50610365610a7c565b6040516103729190613eca565b60405180910390f35b34801561038757600080fd5b50610390610aa2565b60405161039d9190613f01565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613d4e565b610ab9565b6040516103da9190613da9565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f1c565b610b6c565b005b34801561041857600080fd5b50610433600480360381019061042e9190613f49565b610ce7565b005b34801561044157600080fd5b5061044a610d4a565b6040516104579190613eca565b60405180910390f35b34801561046c57600080fd5b50610475610d70565b6040516104829190613da9565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613f49565b610d83565b6040516104bf9190613da9565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613fb4565b610dd9565b005b3480156104fd57600080fd5b50610506610e25565b6040516105139190613da9565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190613f49565b610e38565b6040516105509190613dd3565b60405180910390f35b34801561056557600080fd5b5061056e610f23565b005b34801561057c57600080fd5b50610585610f37565b6040516105929190613ff0565b60405180910390f35b3480156105a757600080fd5b506105b0610f5d565b6040516105bd9190613dd3565b60405180910390f35b3480156105d257600080fd5b506105db610f63565b6040516105e89190613dd3565b60405180910390f35b3480156105fd57600080fd5b50610606610f69565b005b34801561061457600080fd5b5061061d610f8e565b60405161062a9190613eca565b60405180910390f35b34801561063f57600080fd5b50610648610fb7565b6040516106559190613dd3565b60405180910390f35b34801561066a57600080fd5b50610673610fbd565b6040516106809190613c93565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613d4e565b61104f565b6040516106bd9190613da9565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190613d4e565b61111c565b6040516106fa9190613da9565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614037565b61113a565b005b34801561073857600080fd5b50610741611196565b60405161074e9190613dd3565b60405180910390f35b34801561076357600080fd5b5061076c61119c565b6040516107799190613eca565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190614064565b6111c2565b6040516107b69190613dd3565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613f49565b611249565b005b3480156107f457600080fd5b5061080f600480360381019061080a9190613f1c565b6112ac565b005b34801561081d57600080fd5b5061083860048036038101906108339190613f1c565b61131c565b005b34801561084657600080fd5b5061084f61132e565b60405161085c9190613dd3565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190613f49565b611334565b005b34801561089a57600080fd5b506108a36113b8565b6040516108b09190613dd3565b60405180910390f35b6060600a80546108c8906140d3565b80601f01602080910402602001604051908101604052809291908181526020018280546108f4906140d3565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505050905090565b600061095f6109586113be565b84846113c6565b6001905092915050565b6000600954905090565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b60006109b0848484611591565b610a71846109bc6113be565b610a6c85604051806060016040528060288152602001614c8760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a226113be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c59092919063ffffffff16565b6113c6565b600190509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900460ff16905090565b6000610b62610ac66113be565b84610b5d8560036000610ad76113be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b6113c6565b6001905092915050565b6000610b766113be565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90614177565b60405180910390fd5b6000610c1083611987565b50505050509050610c6981600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cc1816008546119e390919063ffffffff16565b600881905550610cdc8360095461192990919063ffffffff16565b600981905550505050565b610cef611a2d565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060159054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610de1611a2d565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060169054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ed357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610f1e565b610f1b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aab565b90505b919050565b610f2b611a2d565b610f356000611b19565b565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b601e5481565b610f71611a2d565b6001600060166101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b6060600b8054610fcc906140d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff8906140d3565b80156110455780601f1061101a57610100808354040283529160200191611045565b820191906000526020600020905b81548152906001019060200180831161102857829003601f168201915b5050505050905090565b600061111261105c6113be565b8461110d85604051806060016040528060258152602001614caf60259139600360006110866113be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c59092919063ffffffff16565b6113c6565b6001905092915050565b60006111306111296113be565b8484611591565b6001905092915050565b611142611a2d565b80600060156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161118b9190613da9565b60405180910390a150565b601d5481565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611251611a2d565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6112b4611a2d565b80601e819055506112d660c86112c8610999565b611bdd90919063ffffffff16565b601e5411611319576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611310906141e3565b60405180910390fd5b50565b611324611a2d565b80601d8190555050565b60185481565b61133c611a2d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614275565b60405180910390fd5b6113b581611b19565b50565b601a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614307565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614399565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115849190613dd3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061442b565b60405180910390fd5b60008111611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b906144bd565b60405180910390fd5b61164c610f8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116ba575061168a610f8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561170f57600060169054906101000a900460ff1661170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590614529565b60405180910390fd5b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561177857601754601481905550601854600f819055505b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117e157601954601481905550601a54600f819055505b60006117ec30610e38565b90506000601d5482101590508080156118125750600060149054906101000a900460ff16155b801561186b5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156118835750600060159054906101000a900460ff165b801561189157506000601454115b801561189f57506000600f54115b156118b357601d5491506118b282611c27565b5b6118be858585611dc2565b5050505050565b600083831115829061190d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119049190613c93565b60405180910390fd5b506000838561191c9190614578565b9050809150509392505050565b600080828461193891906145ac565b90508381101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061464e565b60405180910390fd5b8091505092915050565b600080600080600080600080600061199e8a6123d2565b92509250925060008060006119bc8d86866119b761242c565b612457565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000611a2583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118c5565b905092915050565b611a356113be565b73ffffffffffffffffffffffffffffffffffffffff16611a53610f8e565b73ffffffffffffffffffffffffffffffffffffffff1614611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa0906146ba565b60405180910390fd5b565b6000600854821115611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae99061474c565b60405180910390fd5b6000611afc61242c565b9050611b118184611bdd90919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611c1f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e0565b905092915050565b6001600060146101000a81548160ff0219169083151502179055506000611c81611c5e601454600f5461192990919063ffffffff16565b611c73600f548561254390919063ffffffff16565b611bdd90919063ffffffff16565b90506000611c99600283611bdd90919063ffffffff16565b90506000611cb082846119e390919063ffffffff16565b90506000479050611cc0836125be565b6000611cd582476119e390919063ffffffff16565b9050611ce18382612810565b611cfc611cf786886119e390919063ffffffff16565b6125be565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d64573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611d989392919061476c565b60405180910390a1505050505060008060146101000a81548160ff02191690831515021790555050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e635750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e7557611e7061291f565b611ebb565b601e54811115611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614815565b60405180910390fd5b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f675750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611f7557611f7461291f565b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120185750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561202d576120288383836129a0565b612264565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120d05750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120e5576120e0838383612c00565b612263565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121895750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561219e57612199838383612e60565b612262565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122405750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561225557612250838383613053565b612261565b612260838383612e60565b5b5b5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123055750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231357612312613348565b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bf5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123cd576123cc613348565b5b505050565b6000806000806123e18561336e565b905060006123ee8661339f565b9050600061241782612409858a6119e390919063ffffffff16565b6119e390919063ffffffff16565b90508083839550955095505050509193909250565b60008060006124396133d0565b915091506124508183611bdd90919063ffffffff16565b9250505090565b600080600080612470858961254390919063ffffffff16565b90506000612487868961254390919063ffffffff16565b9050600061249e878961254390919063ffffffff16565b905060006124c7826124b985876119e390919063ffffffff16565b6119e390919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008083118290612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e9190613c93565b60405180910390fd5b50600083856125369190614864565b9050809150509392505050565b60008083141561255657600090506125b8565b600082846125649190614895565b90508284826125739190614864565b146125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614961565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156125db576125da614981565b5b6040519080825280602002602001820160405280156126095781602001602082028036833780820191505090505b5090503081600081518110612621576126206149b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126c357600080fd5b505afa1580156126d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fb91906149f4565b8160018151811061270f5761270e6149b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061277630601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846113c6565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127da959493929190614b1a565b600060405180830381600087803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b505050505050565b61283d30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846113c6565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016128c696959493929190614b74565b6060604051808303818588803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129189190614bea565b5050505050565b6000600d5414801561293357506000600f54145b801561294157506000601454145b801561294f57506000601154145b156129595761299e565b600d54600e81905550600f546010819055506011546012819055506014546015819055506000600d819055506000600f81905550600060148190555060006011819055505b565b6000806000806000806129b287611987565b955095509550955095509550612a1087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612aa586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b3a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b8681613683565b612b908483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612bed9190613dd3565b60405180910390a3505050505050505050565b600080600080600080612c1287611987565b955095509550955095509550612c7086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d0583600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612de681613683565b612df08483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612e4d9190613dd3565b60405180910390a3505050505050505050565b600080600080600080612e7287611987565b955095509550955095509550612e8a8984878a613862565b8096508194505050612e9e8984878a613a61565b8096508194505050612ef886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f8d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fd981613683565b612fe38483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130409190613dd3565b60405180910390a3505050505050505050565b60008060008060008061306587611987565b9550955095509550955095506130c387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061315886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131ed83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061328285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132ce81613683565b6132d88483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133359190613dd3565b60405180910390a3505050505050505050565b600e54600d81905550601054600f81905550601254601181905550601554601481905550565b6000613398606461338a600d548561254390919063ffffffff16565b611bdd90919063ffffffff16565b9050919050565b60006133c960646133bb600f548561254390919063ffffffff16565b611bdd90919063ffffffff16565b9050919050565b600080600060085490506000600754905060005b6006805490508110156136465782600160006006848154811061340a576134096149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134f857508160026000600684815481106134905761348f6149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561350f576008546007549450945050505061367f565b61359f600160006006848154811061352a576135296149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846119e390919063ffffffff16565b925061363160026000600684815481106135bc576135bb6149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836119e390919063ffffffff16565b9150808061363e90614c3d565b9150506133e4565b5061365e600754600854611bdd90919063ffffffff16565b8210156136765760085460075493509350505061367f565b81819350935050505b9091565b600061368d61242c565b905060006136a4828461254390919063ffffffff16565b90506136f881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613823576137df83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61383d826008546119e390919063ffffffff16565b6008819055506138588160095461192990919063ffffffff16565b6009819055505050565b6000806000601154141561387b57848491509150613a58565b60006138a5601154613897606487611bdd90919063ffffffff16565b61254390919063ffffffff16565b905060006138c36138b461242c565b8361254390919063ffffffff16565b90506138d881876119e390919063ffffffff16565b95506138ed82886119e390919063ffffffff16565b96506139638160016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b60016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a479190613dd3565b60405180910390a386869350935050505b94509492505050565b60008060006014541415613a7a57848491509150613bf1565b6000613aa4601454613a96606487611bdd90919063ffffffff16565b61254390919063ffffffff16565b90506000613ac2613ab361242c565b8361254390919063ffffffff16565b9050613ad781876119e390919063ffffffff16565b9550613aec82886119e390919063ffffffff16565b9650613b4081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613be09190613dd3565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c34578082015181840152602081019050613c19565b83811115613c43576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c6582613bfa565b613c6f8185613c05565b9350613c7f818560208601613c16565b613c8881613c49565b840191505092915050565b60006020820190508181036000830152613cad8184613c5a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ce582613cba565b9050919050565b613cf581613cda565b8114613d0057600080fd5b50565b600081359050613d1281613cec565b92915050565b6000819050919050565b613d2b81613d18565b8114613d3657600080fd5b50565b600081359050613d4881613d22565b92915050565b60008060408385031215613d6557613d64613cb5565b5b6000613d7385828601613d03565b9250506020613d8485828601613d39565b9150509250929050565b60008115159050919050565b613da381613d8e565b82525050565b6000602082019050613dbe6000830184613d9a565b92915050565b613dcd81613d18565b82525050565b6000602082019050613de86000830184613dc4565b92915050565b6000819050919050565b6000613e13613e0e613e0984613cba565b613dee565b613cba565b9050919050565b6000613e2582613df8565b9050919050565b6000613e3782613e1a565b9050919050565b613e4781613e2c565b82525050565b6000602082019050613e626000830184613e3e565b92915050565b600080600060608486031215613e8157613e80613cb5565b5b6000613e8f86828701613d03565b9350506020613ea086828701613d03565b9250506040613eb186828701613d39565b9150509250925092565b613ec481613cda565b82525050565b6000602082019050613edf6000830184613ebb565b92915050565b600060ff82169050919050565b613efb81613ee5565b82525050565b6000602082019050613f166000830184613ef2565b92915050565b600060208284031215613f3257613f31613cb5565b5b6000613f4084828501613d39565b91505092915050565b600060208284031215613f5f57613f5e613cb5565b5b6000613f6d84828501613d03565b91505092915050565b6000613f8182613cba565b9050919050565b613f9181613f76565b8114613f9c57600080fd5b50565b600081359050613fae81613f88565b92915050565b600060208284031215613fca57613fc9613cb5565b5b6000613fd884828501613f9f565b91505092915050565b613fea81613f76565b82525050565b60006020820190506140056000830184613fe1565b92915050565b61401481613d8e565b811461401f57600080fd5b50565b6000813590506140318161400b565b92915050565b60006020828403121561404d5761404c613cb5565b5b600061405b84828501614022565b91505092915050565b6000806040838503121561407b5761407a613cb5565b5b600061408985828601613d03565b925050602061409a85828601613d03565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140eb57607f821691505b602082108114156140ff576140fe6140a4565b5b50919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614161602c83613c05565b915061416c82614105565b604082019050919050565b6000602082019050818103600083015261419081614154565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006141cd600d83613c05565b91506141d882614197565b602082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061425f602683613c05565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142f1602483613c05565b91506142fc82614295565b604082019050919050565b60006020820190508181036000830152614320816142e4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614383602283613c05565b915061438e82614327565b604082019050919050565b600060208201905081810360008301526143b281614376565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614415602583613c05565b9150614420826143b9565b604082019050919050565b6000602082019050818103600083015261444481614408565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006144a7602983613c05565b91506144b28261444b565b604082019050919050565b600060208201905081810360008301526144d68161449a565b9050919050565b7f547261646520697320636c6f7365640000000000000000000000000000000000600082015250565b6000614513600f83613c05565b915061451e826144dd565b602082019050919050565b6000602082019050818103600083015261454281614506565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061458382613d18565b915061458e83613d18565b9250828210156145a1576145a0614549565b5b828203905092915050565b60006145b782613d18565b91506145c283613d18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145f7576145f6614549565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614638601b83613c05565b915061464382614602565b602082019050919050565b600060208201905081810360008301526146678161462b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146a4602083613c05565b91506146af8261466e565b602082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614736602a83613c05565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b60006060820190506147816000830186613dc4565b61478e6020830185613dc4565b61479b6040830184613dc4565b949350505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006147ff602883613c05565b915061480a826147a3565b604082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061486f82613d18565b915061487a83613d18565b92508261488a57614889614835565b5b828204905092915050565b60006148a082613d18565b91506148ab83613d18565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148e4576148e3614549565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061494b602183613c05565b9150614956826148ef565b604082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149ee81613cec565b92915050565b600060208284031215614a0a57614a09613cb5565b5b6000614a18848285016149df565b91505092915050565b6000819050919050565b6000614a46614a41614a3c84614a21565b613dee565b613d18565b9050919050565b614a5681614a2b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a9181613cda565b82525050565b6000614aa38383614a88565b60208301905092915050565b6000602082019050919050565b6000614ac782614a5c565b614ad18185614a67565b9350614adc83614a78565b8060005b83811015614b0d578151614af48882614a97565b9750614aff83614aaf565b925050600181019050614ae0565b5085935050505092915050565b600060a082019050614b2f6000830188613dc4565b614b3c6020830187614a4d565b8181036040830152614b4e8186614abc565b9050614b5d6060830185613ebb565b614b6a6080830184613dc4565b9695505050505050565b600060c082019050614b896000830189613ebb565b614b966020830188613dc4565b614ba36040830187614a4d565b614bb06060830186614a4d565b614bbd6080830185613ebb565b614bca60a0830184613dc4565b979650505050505050565b600081519050614be481613d22565b92915050565b600080600060608486031215614c0357614c02613cb5565b5b6000614c1186828701614bd5565b9350506020614c2286828701614bd5565b9250506040614c3386828701614bd5565b9150509250925092565b6000614c4882613d18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c7b57614c7a614549565b5b60018201905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220499f9f6d4899229dcbb3aa401461f68bd1a030467c8aeeace59ca85cd0586c2164736f6c63430008090033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c806375f0a87411610123578063c49b9a80116100ab578063ec28438a1161006f578063ec28438a146107e8578063f0f165af14610811578063f11a24d31461083a578063f2fde38b14610865578063f63743421461088e57610225565b8063c49b9a8014610703578063d12a76881461072c578063d70754ec14610757578063dd62ed3e14610782578063ea2f0b37146107bf57610225565b80638da5cb5b116100f25780638da5cb5b14610608578063921369131461063357806395d89b411461065e578063a457c2d714610689578063a9059cbb146106c657610225565b806375f0a874146105705780637bce5a041461059b5780637d1db4a5146105c65780638a8c523c146105f157610225565b80633bd5d173116101a65780635342acb4116101755780635342acb41461048b5780635d098b38146104c857806360901444146104f157806370a082311461051c578063715018a61461055957610225565b80633bd5d173146103e3578063437823ec1461040c57806349bd5a5e146104355780634a74bb021461046057610225565b806318160ddd116101ed57806318160ddd146102e857806323b872dd1461031357806327c8f83514610350578063313ce5671461037b57806339509351146103a657610225565b806306fdde031461022a578063095ea7b31461025557806313114a9d146102925780631694505e146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108b9565b60405161024c9190613c93565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190613d4e565b61094b565b6040516102899190613da9565b60405180910390f35b34801561029e57600080fd5b506102a7610969565b6040516102b49190613dd3565b60405180910390f35b3480156102c957600080fd5b506102d2610973565b6040516102df9190613e4d565b60405180910390f35b3480156102f457600080fd5b506102fd610999565b60405161030a9190613dd3565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613e68565b6109a3565b6040516103479190613da9565b60405180910390f35b34801561035c57600080fd5b50610365610a7c565b6040516103729190613eca565b60405180910390f35b34801561038757600080fd5b50610390610aa2565b60405161039d9190613f01565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613d4e565b610ab9565b6040516103da9190613da9565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f1c565b610b6c565b005b34801561041857600080fd5b50610433600480360381019061042e9190613f49565b610ce7565b005b34801561044157600080fd5b5061044a610d4a565b6040516104579190613eca565b60405180910390f35b34801561046c57600080fd5b50610475610d70565b6040516104829190613da9565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613f49565b610d83565b6040516104bf9190613da9565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613fb4565b610dd9565b005b3480156104fd57600080fd5b50610506610e25565b6040516105139190613da9565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190613f49565b610e38565b6040516105509190613dd3565b60405180910390f35b34801561056557600080fd5b5061056e610f23565b005b34801561057c57600080fd5b50610585610f37565b6040516105929190613ff0565b60405180910390f35b3480156105a757600080fd5b506105b0610f5d565b6040516105bd9190613dd3565b60405180910390f35b3480156105d257600080fd5b506105db610f63565b6040516105e89190613dd3565b60405180910390f35b3480156105fd57600080fd5b50610606610f69565b005b34801561061457600080fd5b5061061d610f8e565b60405161062a9190613eca565b60405180910390f35b34801561063f57600080fd5b50610648610fb7565b6040516106559190613dd3565b60405180910390f35b34801561066a57600080fd5b50610673610fbd565b6040516106809190613c93565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613d4e565b61104f565b6040516106bd9190613da9565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190613d4e565b61111c565b6040516106fa9190613da9565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614037565b61113a565b005b34801561073857600080fd5b50610741611196565b60405161074e9190613dd3565b60405180910390f35b34801561076357600080fd5b5061076c61119c565b6040516107799190613eca565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190614064565b6111c2565b6040516107b69190613dd3565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613f49565b611249565b005b3480156107f457600080fd5b5061080f600480360381019061080a9190613f1c565b6112ac565b005b34801561081d57600080fd5b5061083860048036038101906108339190613f1c565b61131c565b005b34801561084657600080fd5b5061084f61132e565b60405161085c9190613dd3565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190613f49565b611334565b005b34801561089a57600080fd5b506108a36113b8565b6040516108b09190613dd3565b60405180910390f35b6060600a80546108c8906140d3565b80601f01602080910402602001604051908101604052809291908181526020018280546108f4906140d3565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505050905090565b600061095f6109586113be565b84846113c6565b6001905092915050565b6000600954905090565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b60006109b0848484611591565b610a71846109bc6113be565b610a6c85604051806060016040528060288152602001614c8760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a226113be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c59092919063ffffffff16565b6113c6565b600190509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900460ff16905090565b6000610b62610ac66113be565b84610b5d8560036000610ad76113be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b6113c6565b6001905092915050565b6000610b766113be565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90614177565b60405180910390fd5b6000610c1083611987565b50505050509050610c6981600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cc1816008546119e390919063ffffffff16565b600881905550610cdc8360095461192990919063ffffffff16565b600981905550505050565b610cef611a2d565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060159054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610de1611a2d565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060169054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ed357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610f1e565b610f1b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aab565b90505b919050565b610f2b611a2d565b610f356000611b19565b565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b601e5481565b610f71611a2d565b6001600060166101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b6060600b8054610fcc906140d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff8906140d3565b80156110455780601f1061101a57610100808354040283529160200191611045565b820191906000526020600020905b81548152906001019060200180831161102857829003601f168201915b5050505050905090565b600061111261105c6113be565b8461110d85604051806060016040528060258152602001614caf60259139600360006110866113be565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118c59092919063ffffffff16565b6113c6565b6001905092915050565b60006111306111296113be565b8484611591565b6001905092915050565b611142611a2d565b80600060156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161118b9190613da9565b60405180910390a150565b601d5481565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611251611a2d565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6112b4611a2d565b80601e819055506112d660c86112c8610999565b611bdd90919063ffffffff16565b601e5411611319576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611310906141e3565b60405180910390fd5b50565b611324611a2d565b80601d8190555050565b60185481565b61133c611a2d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390614275565b60405180910390fd5b6113b581611b19565b50565b601a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614307565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90614399565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115849190613dd3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f89061442b565b60405180910390fd5b60008111611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b906144bd565b60405180910390fd5b61164c610f8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116ba575061168a610f8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561170f57600060169054906101000a900460ff1661170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590614529565b60405180910390fd5b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561177857601754601481905550601854600f819055505b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117e157601954601481905550601a54600f819055505b60006117ec30610e38565b90506000601d5482101590508080156118125750600060149054906101000a900460ff16155b801561186b5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156118835750600060159054906101000a900460ff165b801561189157506000601454115b801561189f57506000600f54115b156118b357601d5491506118b282611c27565b5b6118be858585611dc2565b5050505050565b600083831115829061190d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119049190613c93565b60405180910390fd5b506000838561191c9190614578565b9050809150509392505050565b600080828461193891906145ac565b90508381101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061464e565b60405180910390fd5b8091505092915050565b600080600080600080600080600061199e8a6123d2565b92509250925060008060006119bc8d86866119b761242c565b612457565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000611a2583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118c5565b905092915050565b611a356113be565b73ffffffffffffffffffffffffffffffffffffffff16611a53610f8e565b73ffffffffffffffffffffffffffffffffffffffff1614611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa0906146ba565b60405180910390fd5b565b6000600854821115611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae99061474c565b60405180910390fd5b6000611afc61242c565b9050611b118184611bdd90919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611c1f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e0565b905092915050565b6001600060146101000a81548160ff0219169083151502179055506000611c81611c5e601454600f5461192990919063ffffffff16565b611c73600f548561254390919063ffffffff16565b611bdd90919063ffffffff16565b90506000611c99600283611bdd90919063ffffffff16565b90506000611cb082846119e390919063ffffffff16565b90506000479050611cc0836125be565b6000611cd582476119e390919063ffffffff16565b9050611ce18382612810565b611cfc611cf786886119e390919063ffffffff16565b6125be565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d64573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611d989392919061476c565b60405180910390a1505050505060008060146101000a81548160ff02191690831515021790555050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e635750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e7557611e7061291f565b611ebb565b601e54811115611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614815565b60405180910390fd5b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f675750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611f7557611f7461291f565b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120185750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561202d576120288383836129a0565b612264565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120d05750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120e5576120e0838383612c00565b612263565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121895750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561219e57612199838383612e60565b612262565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122405750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561225557612250838383613053565b612261565b612260838383612e60565b5b5b5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123055750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231357612312613348565b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bf5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123cd576123cc613348565b5b505050565b6000806000806123e18561336e565b905060006123ee8661339f565b9050600061241782612409858a6119e390919063ffffffff16565b6119e390919063ffffffff16565b90508083839550955095505050509193909250565b60008060006124396133d0565b915091506124508183611bdd90919063ffffffff16565b9250505090565b600080600080612470858961254390919063ffffffff16565b90506000612487868961254390919063ffffffff16565b9050600061249e878961254390919063ffffffff16565b905060006124c7826124b985876119e390919063ffffffff16565b6119e390919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008083118290612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e9190613c93565b60405180910390fd5b50600083856125369190614864565b9050809150509392505050565b60008083141561255657600090506125b8565b600082846125649190614895565b90508284826125739190614864565b146125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614961565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156125db576125da614981565b5b6040519080825280602002602001820160405280156126095781602001602082028036833780820191505090505b5090503081600081518110612621576126206149b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126c357600080fd5b505afa1580156126d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fb91906149f4565b8160018151811061270f5761270e6149b0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061277630601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846113c6565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127da959493929190614b1a565b600060405180830381600087803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b505050505050565b61283d30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846113c6565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016128c696959493929190614b74565b6060604051808303818588803b1580156128df57600080fd5b505af11580156128f3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129189190614bea565b5050505050565b6000600d5414801561293357506000600f54145b801561294157506000601454145b801561294f57506000601154145b156129595761299e565b600d54600e81905550600f546010819055506011546012819055506014546015819055506000600d819055506000600f81905550600060148190555060006011819055505b565b6000806000806000806129b287611987565b955095509550955095509550612a1087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612aa586600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b3a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b8681613683565b612b908483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612bed9190613dd3565b60405180910390a3505050505050505050565b600080600080600080612c1287611987565b955095509550955095509550612c7086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d0583600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9a85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612de681613683565b612df08483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612e4d9190613dd3565b60405180910390a3505050505050505050565b600080600080600080612e7287611987565b955095509550955095509550612e8a8984878a613862565b8096508194505050612e9e8984878a613a61565b8096508194505050612ef886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f8d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fd981613683565b612fe38483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130409190613dd3565b60405180910390a3505050505050505050565b60008060008060008061306587611987565b9550955095509550955095506130c387600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061315886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131ed83600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061328285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132ce81613683565b6132d88483613828565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133359190613dd3565b60405180910390a3505050505050505050565b600e54600d81905550601054600f81905550601254601181905550601554601481905550565b6000613398606461338a600d548561254390919063ffffffff16565b611bdd90919063ffffffff16565b9050919050565b60006133c960646133bb600f548561254390919063ffffffff16565b611bdd90919063ffffffff16565b9050919050565b600080600060085490506000600754905060005b6006805490508110156136465782600160006006848154811061340a576134096149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134f857508160026000600684815481106134905761348f6149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561350f576008546007549450945050505061367f565b61359f600160006006848154811061352a576135296149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846119e390919063ffffffff16565b925061363160026000600684815481106135bc576135bb6149b0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836119e390919063ffffffff16565b9150808061363e90614c3d565b9150506133e4565b5061365e600754600854611bdd90919063ffffffff16565b8210156136765760085460075493509350505061367f565b81819350935050505b9091565b600061368d61242c565b905060006136a4828461254390919063ffffffff16565b90506136f881600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613823576137df83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61383d826008546119e390919063ffffffff16565b6008819055506138588160095461192990919063ffffffff16565b6009819055505050565b6000806000601154141561387b57848491509150613a58565b60006138a5601154613897606487611bdd90919063ffffffff16565b61254390919063ffffffff16565b905060006138c36138b461242c565b8361254390919063ffffffff16565b90506138d881876119e390919063ffffffff16565b95506138ed82886119e390919063ffffffff16565b96506139638160016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b60016000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a479190613dd3565b60405180910390a386869350935050505b94509492505050565b60008060006014541415613a7a57848491509150613bf1565b6000613aa4601454613a96606487611bdd90919063ffffffff16565b61254390919063ffffffff16565b90506000613ac2613ab361242c565b8361254390919063ffffffff16565b9050613ad781876119e390919063ffffffff16565b9550613aec82886119e390919063ffffffff16565b9650613b4081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461192990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613be09190613dd3565b60405180910390a386869350935050505b94509492505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c34578082015181840152602081019050613c19565b83811115613c43576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c6582613bfa565b613c6f8185613c05565b9350613c7f818560208601613c16565b613c8881613c49565b840191505092915050565b60006020820190508181036000830152613cad8184613c5a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ce582613cba565b9050919050565b613cf581613cda565b8114613d0057600080fd5b50565b600081359050613d1281613cec565b92915050565b6000819050919050565b613d2b81613d18565b8114613d3657600080fd5b50565b600081359050613d4881613d22565b92915050565b60008060408385031215613d6557613d64613cb5565b5b6000613d7385828601613d03565b9250506020613d8485828601613d39565b9150509250929050565b60008115159050919050565b613da381613d8e565b82525050565b6000602082019050613dbe6000830184613d9a565b92915050565b613dcd81613d18565b82525050565b6000602082019050613de86000830184613dc4565b92915050565b6000819050919050565b6000613e13613e0e613e0984613cba565b613dee565b613cba565b9050919050565b6000613e2582613df8565b9050919050565b6000613e3782613e1a565b9050919050565b613e4781613e2c565b82525050565b6000602082019050613e626000830184613e3e565b92915050565b600080600060608486031215613e8157613e80613cb5565b5b6000613e8f86828701613d03565b9350506020613ea086828701613d03565b9250506040613eb186828701613d39565b9150509250925092565b613ec481613cda565b82525050565b6000602082019050613edf6000830184613ebb565b92915050565b600060ff82169050919050565b613efb81613ee5565b82525050565b6000602082019050613f166000830184613ef2565b92915050565b600060208284031215613f3257613f31613cb5565b5b6000613f4084828501613d39565b91505092915050565b600060208284031215613f5f57613f5e613cb5565b5b6000613f6d84828501613d03565b91505092915050565b6000613f8182613cba565b9050919050565b613f9181613f76565b8114613f9c57600080fd5b50565b600081359050613fae81613f88565b92915050565b600060208284031215613fca57613fc9613cb5565b5b6000613fd884828501613f9f565b91505092915050565b613fea81613f76565b82525050565b60006020820190506140056000830184613fe1565b92915050565b61401481613d8e565b811461401f57600080fd5b50565b6000813590506140318161400b565b92915050565b60006020828403121561404d5761404c613cb5565b5b600061405b84828501614022565b91505092915050565b6000806040838503121561407b5761407a613cb5565b5b600061408985828601613d03565b925050602061409a85828601613d03565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140eb57607f821691505b602082108114156140ff576140fe6140a4565b5b50919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000614161602c83613c05565b915061416c82614105565b604082019050919050565b6000602082019050818103600083015261419081614154565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006141cd600d83613c05565b91506141d882614197565b602082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061425f602683613c05565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142f1602483613c05565b91506142fc82614295565b604082019050919050565b60006020820190508181036000830152614320816142e4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614383602283613c05565b915061438e82614327565b604082019050919050565b600060208201905081810360008301526143b281614376565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614415602583613c05565b9150614420826143b9565b604082019050919050565b6000602082019050818103600083015261444481614408565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006144a7602983613c05565b91506144b28261444b565b604082019050919050565b600060208201905081810360008301526144d68161449a565b9050919050565b7f547261646520697320636c6f7365640000000000000000000000000000000000600082015250565b6000614513600f83613c05565b915061451e826144dd565b602082019050919050565b6000602082019050818103600083015261454281614506565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061458382613d18565b915061458e83613d18565b9250828210156145a1576145a0614549565b5b828203905092915050565b60006145b782613d18565b91506145c283613d18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145f7576145f6614549565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614638601b83613c05565b915061464382614602565b602082019050919050565b600060208201905081810360008301526146678161462b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146a4602083613c05565b91506146af8261466e565b602082019050919050565b600060208201905081810360008301526146d381614697565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614736602a83613c05565b9150614741826146da565b604082019050919050565b6000602082019050818103600083015261476581614729565b9050919050565b60006060820190506147816000830186613dc4565b61478e6020830185613dc4565b61479b6040830184613dc4565b949350505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006147ff602883613c05565b915061480a826147a3565b604082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061486f82613d18565b915061487a83613d18565b92508261488a57614889614835565b5b828204905092915050565b60006148a082613d18565b91506148ab83613d18565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148e4576148e3614549565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061494b602183613c05565b9150614956826148ef565b604082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149ee81613cec565b92915050565b600060208284031215614a0a57614a09613cb5565b5b6000614a18848285016149df565b91505092915050565b6000819050919050565b6000614a46614a41614a3c84614a21565b613dee565b613d18565b9050919050565b614a5681614a2b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a9181613cda565b82525050565b6000614aa38383614a88565b60208301905092915050565b6000602082019050919050565b6000614ac782614a5c565b614ad18185614a67565b9350614adc83614a78565b8060005b83811015614b0d578151614af48882614a97565b9750614aff83614aaf565b925050600181019050614ae0565b5085935050505092915050565b600060a082019050614b2f6000830188613dc4565b614b3c6020830187614a4d565b8181036040830152614b4e8186614abc565b9050614b5d6060830185613ebb565b614b6a6080830184613dc4565b9695505050505050565b600060c082019050614b896000830189613ebb565b614b966020830188613dc4565b614ba36040830187614a4d565b614bb06060830186614a4d565b614bbd6080830185613ebb565b614bca60a0830184613dc4565b979650505050505050565b600081519050614be481613d22565b92915050565b600080600060608486031215614c0357614c02613cb5565b5b6000614c1186828701614bd5565b9350506020614c2286828701614bd5565b9250506040614c3386828701614bd5565b9150509250925092565b6000614c4882613d18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c7b57614c7a614549565b5b60018201905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220499f9f6d4899229dcbb3aa401461f68bd1a030467c8aeeace59ca85cd0586c2164736f6c63430008090033
Deployed Bytecode Sourcemap
24636:21444:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27800:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28712:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29834:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26222:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28077:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28881:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25775:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27986:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29202:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29929:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45112:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26271:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24782:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44859:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45235:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24829:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28180:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4874:103;;;;;;;;;;;;;:::i;:::-;;25951:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26052:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26380:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45899:78;;;;;;;;;;;;;:::i;:::-;;4233:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26136:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27891:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29428:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28386:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45720:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26309:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26438:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28561:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44994:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45523:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45369:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26093:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5132:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26178:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27800:83;27837:13;27870:5;27863:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27800:83;:::o;28712:161::-;28787:4;28804:39;28813:12;:10;:12::i;:::-;28827:7;28836:6;28804:8;:39::i;:::-;28861:4;28854:11;;28712:161;;;;:::o;29834:87::-;29876:7;29903:10;;29896:17;;29834:87;:::o;26222:42::-;;;;;;;;;;;;;:::o;28077:95::-;28130:7;28157;;28150:14;;28077:95;:::o;28881:313::-;28979:4;28996:36;29006:6;29014:9;29025:6;28996:9;:36::i;:::-;29043:121;29052:6;29060:12;:10;:12::i;:::-;29074:89;29112:6;29074:89;;;;;;;;;;;;;;;;;:11;:19;29086:6;29074:19;;;;;;;;;;;;;;;:33;29094:12;:10;:12::i;:::-;29074:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29043:8;:121::i;:::-;29182:4;29175:11;;28881:313;;;;;:::o;25775:71::-;;;;;;;;;;;;;:::o;27986:83::-;28027:5;28052:9;;;;;;;;;;;28045:16;;27986:83;:::o;29202:218::-;29290:4;29307:83;29316:12;:10;:12::i;:::-;29330:7;29339:50;29378:10;29339:11;:25;29351:12;:10;:12::i;:::-;29339:25;;;;;;;;;;;;;;;:34;29365:7;29339:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29307:8;:83::i;:::-;29408:4;29401:11;;29202:218;;;;:::o;29929:377::-;29981:14;29998:12;:10;:12::i;:::-;29981:29;;30030:11;:19;30042:6;30030:19;;;;;;;;;;;;;;;;;;;;;;;;;30029:20;30021:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30110:15;30134:19;30145:7;30134:10;:19::i;:::-;30109:44;;;;;;;30182:28;30202:7;30182;:15;30190:6;30182:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30164:7;:15;30172:6;30164:15;;;;;;;;;;;;;;;:46;;;;30231:20;30243:7;30231;;:11;;:20;;;;:::i;:::-;30221:7;:30;;;;30275:23;30290:7;30275:10;;:14;;:23;;;;:::i;:::-;30262:10;:36;;;;29970:336;;29929:377;:::o;45112:111::-;4119:13;:11;:13::i;:::-;45211:4:::1;45181:18;:27;45200:7;45181:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45112:111:::0;:::o;26271:29::-;;;;;;;;;;;;;:::o;24782:40::-;;;;;;;;;;;;;:::o;44859:123::-;44923:4;44947:18;:27;44966:7;44947:27;;;;;;;;;;;;;;;;;;;;;;;;;44940:34;;44859:123;;;:::o;45235:122::-;4119:13;:11;:13::i;:::-;45340:9:::1;45322:15;;:27;;;;;;;;;;;;;;;;;;45235:122:::0;:::o;24829:31::-;;;;;;;;;;;;;:::o;28180:198::-;28246:7;28270:11;:20;28282:7;28270:20;;;;;;;;;;;;;;;;;;;;;;;;;28266:49;;;28299:7;:16;28307:7;28299:16;;;;;;;;;;;;;;;;28292:23;;;;28266:49;28333:37;28353:7;:16;28361:7;28353:16;;;;;;;;;;;;;;;;28333:19;:37::i;:::-;28326:44;;28180:198;;;;:::o;4874:103::-;4119:13;:11;:13::i;:::-;4939:30:::1;4966:1;4939:18;:30::i;:::-;4874:103::o:0;25951:92::-;;;;;;;;;;;;;:::o;26052:34::-;;;;:::o;26380:51::-;;;;:::o;45899:78::-;4119:13;:11;:13::i;:::-;45965:4:::1;45951:11;;:18;;;;;;;;;;;;;;;;;;45899:78::o:0;4233:87::-;4279:7;4306:6;;;;;;;;;;;4299:13;;4233:87;:::o;26136:35::-;;;;:::o;27891:87::-;27930:13;27963:7;27956:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27891:87;:::o;29428:269::-;29521:4;29538:129;29547:12;:10;:12::i;:::-;29561:7;29570:96;29609:15;29570:96;;;;;;;;;;;;;;;;;:11;:25;29582:12;:10;:12::i;:::-;29570:25;;;;;;;;;;;;;;;:34;29596:7;29570:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29538:8;:129::i;:::-;29685:4;29678:11;;29428:269;;;;:::o;28386:167::-;28464:4;28481:42;28491:12;:10;:12::i;:::-;28505:9;28516:6;28481:9;:42::i;:::-;28541:4;28534:11;;28386:167;;;;:::o;45720:171::-;4119:13;:11;:13::i;:::-;45821:8:::1;45797:21;;:32;;;;;;;;;;;;;;;;;;45845:38;45874:8;45845:38;;;;;;:::i;:::-;;;;;;;;45720:171:::0;:::o;26309:64::-;;;;:::o;26438:19::-;;;;;;;;;;;;;:::o;28561:143::-;28642:7;28669:11;:18;28681:5;28669:18;;;;;;;;;;;;;;;:27;28688:7;28669:27;;;;;;;;;;;;;;;;28662:34;;28561:143;;;;:::o;44994:110::-;4119:13;:11;:13::i;:::-;45091:5:::1;45061:18;:27;45080:7;45061:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;44994:110:::0;:::o;45523:185::-;4119:13;:11;:13::i;:::-;45615:11:::1;45600:12;:26;;;;45660:22;45678:3;45660:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;45645:12;;:37;45637:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45523:185:::0;:::o;45369:142::-;4119:13;:11;:13::i;:::-;45494:9:::1;45462:29;:41;;;;45369:142:::0;:::o;26093:34::-;;;;:::o;5132:201::-;4119:13;:11;:13::i;:::-;5241:1:::1;5221:22;;:8;:22;;;;5213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5297:28;5316:8;5297:18;:28::i;:::-;5132:201:::0;:::o;26178:35::-;;;;:::o;2793:115::-;2846:15;2889:10;2874:26;;2793:115;:::o;35953:337::-;36063:1;36046:19;;:5;:19;;;;36038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36144:1;36125:21;;:7;:21;;;;36117:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36228:6;36198:11;:18;36210:5;36198:18;;;;;;;;;;;;;;;:27;36217:7;36198:27;;;;;;;;;;;;;;;:36;;;;36266:7;36250:32;;36259:5;36250:32;;;36275:6;36250:32;;;;;;:::i;:::-;;;;;;;;35953:337;;;:::o;36298:1635::-;36436:1;36420:18;;:4;:18;;;;36412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36508:1;36499:6;:10;36491:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36579:7;:5;:7::i;:::-;36571:15;;:4;:15;;;;:32;;;;;36596:7;:5;:7::i;:::-;36590:13;;:2;:13;;;;36571:32;36568:103;;;36628:11;;;;;;;;;;;36620:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;36568:103;36694:13;;;;;;;;;;;36686:21;;:4;:21;;;36683:130;;;36740:15;;36724:13;:31;;;;36786:15;;36770:13;:31;;;;36683:130;36834:13;;;;;;;;;;;36828:19;;:2;:19;;;36825:129;;;36879:16;;36863:13;:32;;;;36926:16;;36910:13;:32;;;;36825:129;37248:28;37279:24;37297:4;37279:9;:24::i;:::-;37248:55;;37322:24;37373:29;;37349:20;:53;;37322:80;;37431:19;:53;;;;;37468:16;;;;;;;;;;;37467:17;37431:53;:89;;;;;37507:13;;;;;;;;;;;37501:19;;:2;:19;;;37431:89;:127;;;;;37537:21;;;;;;;;;;;37431:127;:161;;;;;37591:1;37575:13;;:17;37431:161;:195;;;;;37625:1;37609:13;;:17;37431:195;37413:417;;;37676:29;;37653:52;;37782:36;37797:20;37782:14;:36::i;:::-;37413:417;37895:30;37910:4;37915:2;37918:6;37895:14;:30::i;:::-;36401:1532;;36298:1635;;;:::o;6960:192::-;7046:7;7079:1;7074;:6;;7082:12;7066:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7106:9;7122:1;7118;:5;;;;:::i;:::-;7106:17;;7143:1;7136:8;;;6960:192;;;;;:::o;6057:181::-;6115:7;6135:9;6151:1;6147;:5;;;;:::i;:::-;6135:17;;6176:1;6171;:6;;6163:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6229:1;6222:8;;;6057:181;;;;:::o;32655:419::-;32714:7;32723;32732;32741;32750;32759;32780:23;32805:12;32819:18;32841:20;32853:7;32841:11;:20::i;:::-;32779:82;;;;;;32873:15;32890:23;32915:12;32931:50;32943:7;32952:4;32958:10;32970;:8;:10::i;:::-;32931:11;:50::i;:::-;32872:109;;;;;;33000:7;33009:15;33026:4;33032:15;33049:4;33055:10;32992:74;;;;;;;;;;;;;;;;;;32655:419;;;;;;;:::o;6521:136::-;6579:7;6606:43;6610:1;6613;6606:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6599:50;;6521:136;;;;:::o;4398:132::-;4473:12;:10;:12::i;:::-;4462:23;;:7;:5;:7::i;:::-;:23;;;4454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4398:132::o;30759:254::-;30826:7;30865;;30854;:18;;30846:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30930:19;30953:10;:8;:10::i;:::-;30930:33;;30981:24;30993:11;30981:7;:11;;:24;;;;:::i;:::-;30974:31;;;30759:254;;;:::o;5493:191::-;5567:16;5586:6;;;;;;;;;;;5567:25;;5612:8;5603:6;;:17;;;;;;;;;;;;;;;;;;5667:8;5636:40;;5657:8;5636:40;;;;;;;;;;;;5556:128;5493:191;:::o;8358:132::-;8416:7;8443:39;8447:1;8450;8443:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8436:46;;8358:132;;;;:::o;37941:1219::-;26783:4;26764:16;;:23;;;;;;;;;;;;;;;;;;38026::::1;38052:77;38096:32;38114:13;;38096;;:17;;:32;;;;:::i;:::-;38052:39;38077:13;;38052:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;38026:103;;38191:12;38206:22;38226:1;38206:15;:19;;:22;;;;:::i;:::-;38191:37;;38239:17;38259:25;38279:4;38259:15;:19;;:25;;;;:::i;:::-;38239:45;;38562:22;38587:21;38562:46;;38653:22;38670:4;38653:16;:22::i;:::-;38806:18;38827:41;38853:14;38827:21;:25;;:41;;;;:::i;:::-;38806:62;;38918:35;38931:9;38942:10;38918:12;:35::i;:::-;38966:59;38983:41;39008:15;38983:20;:24;;:41;;;;:::i;:::-;38966:16;:59::i;:::-;39036:15;;;;;;;;;;;:24;;:47;39061:21;39036:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39109:43;39124:4;39130:10;39142:9;39109:43;;;;;;;;:::i;:::-;;;;;;;;38015:1145;;;;;26829:5:::0;26810:16;;:24;;;;;;;;;;;;;;;;;;37941:1219;:::o;40356:1315::-;40459:18;:26;40478:6;40459:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;40489:18;:29;40508:9;40489:29;;;;;;;;;;;;;;;;;;;;;;;;;40459:59;40456:247;;;40546:14;:12;:14::i;:::-;40456:247;;;40632:12;;40622:6;:22;;40614:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40456:247;40726:13;;;;;;;;;;;40716:23;;:6;:23;;;;:53;;;;;40756:13;;;;;;;;;;;40743:26;;:9;:26;;;;40716:53;40713:98;;;40785:14;:12;:14::i;:::-;40713:98;40827:11;:19;40839:6;40827:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40851:11;:22;40863:9;40851:22;;;;;;;;;;;;;;;;;;;;;;;;;40850:23;40827:46;40823:597;;;40890:48;40912:6;40920:9;40931:6;40890:21;:48::i;:::-;40823:597;;;40961:11;:19;40973:6;40961:19;;;;;;;;;;;;;;;;;;;;;;;;;40960:20;:46;;;;;40984:11;:22;40996:9;40984:22;;;;;;;;;;;;;;;;;;;;;;;;;40960:46;40956:464;;;41023:46;41043:6;41051:9;41062:6;41023:19;:46::i;:::-;40956:464;;;41092:11;:19;41104:6;41092:19;;;;;;;;;;;;;;;;;;;;;;;;;41091:20;:47;;;;;41116:11;:22;41128:9;41116:22;;;;;;;;;;;;;;;;;;;;;;;;;41115:23;41091:47;41087:333;;;41155:44;41173:6;41181:9;41192:6;41155:17;:44::i;:::-;41087:333;;;41221:11;:19;41233:6;41221:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41244:11;:22;41256:9;41244:22;;;;;;;;;;;;;;;;;;;;;;;;;41221:45;41217:203;;;41283:48;41305:6;41313:9;41324:6;41283:21;:48::i;:::-;41217:203;;;41364:44;41382:6;41390:9;41401:6;41364:17;:44::i;:::-;41217:203;41087:333;40956:464;40823:597;41443:18;:26;41462:6;41443:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;41473:18;:29;41492:9;41473:29;;;;;;;;;;;;;;;;;;;;;;;;;41443:59;41440:115;;;41528:15;:13;:15::i;:::-;41440:115;41578:13;;;;;;;;;;;41568:23;;:6;:23;;;;:53;;;;;41608:13;;;;;;;;;;;41595:26;;:9;:26;;;;41568:53;41565:99;;;41637:15;:13;:15::i;:::-;41565:99;40356:1315;;;:::o;33082:330::-;33142:7;33151;33160;33180:12;33195:24;33211:7;33195:15;:24::i;:::-;33180:39;;33230:18;33251:30;33273:7;33251:21;:30::i;:::-;33230:51;;33292:23;33318:33;33340:10;33318:17;33330:4;33318:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33292:59;;33370:15;33387:4;33393:10;33362:42;;;;;;;;;33082:330;;;;;:::o;33857:163::-;33898:7;33919:15;33936;33955:19;:17;:19::i;:::-;33918:56;;;;33992:20;34004:7;33992;:11;;:20;;;;:::i;:::-;33985:27;;;;33857:163;:::o;33420:429::-;33535:7;33544;33553;33573:15;33591:24;33603:11;33591:7;:11;;:24;;;;:::i;:::-;33573:42;;33626:12;33641:21;33650:11;33641:4;:8;;:21;;;;:::i;:::-;33626:36;;33673:18;33694:27;33709:11;33694:10;:14;;:27;;;;:::i;:::-;33673:48;;33732:23;33758:33;33780:10;33758:17;33770:4;33758:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33732:59;;33810:7;33819:15;33836:4;33802:39;;;;;;;;;;33420:429;;;;;;;;:::o;8986:278::-;9072:7;9104:1;9100;:5;9107:12;9092:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9131:9;9147:1;9143;:5;;;;:::i;:::-;9131:17;;9255:1;9248:8;;;8986:278;;;;;:::o;7411:471::-;7469:7;7719:1;7714;:6;7710:47;;;7744:1;7737:8;;;;7710:47;7769:9;7785:1;7781;:5;;;;:::i;:::-;7769:17;;7814:1;7809;7805;:5;;;;:::i;:::-;:10;7797:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7873:1;7866:8;;;7411:471;;;;;:::o;39168:589::-;39294:21;39332:1;39318:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39294:40;;39363:4;39345;39350:1;39345:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39389:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39379:4;39384:1;39379:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39424:62;39441:4;39456:15;;;;;;;;;;;39474:11;39424:8;:62::i;:::-;39525:15;;;;;;;;;;;:66;;;39606:11;39632:1;39676:4;39703;39723:15;39525:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39223:534;39168:589;:::o;39765:510::-;39913:62;39930:4;39945:15;;;;;;;;;;;39963:11;39913:8;:62::i;:::-;40018:15;;;;;;;;;;;:31;;;40057:9;40090:4;40110:11;40136:1;40179;40222:4;;;;;;;;;;;40241:15;40018:249;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39765:510;;:::o;35304:422::-;35361:1;35350:7;;:12;:34;;;;;35383:1;35366:13;;:18;35350:34;:54;;;;;35403:1;35388:13;;:16;35350:54;:69;;;;;35418:1;35408:8;;:11;35350:69;35347:81;;;35421:7;;35347:81;35466:7;;35448:15;:25;;;;35508:13;;35484:21;:37;;;;35551:8;;35532:16;:27;;;;35594:13;;35570:21;:37;;;;35638:1;35628:7;:11;;;;35666:1;35650:13;:17;;;;35694:1;35678:13;:17;;;;35717:1;35706:8;:12;;;;35304:422;:::o;44285:566::-;44388:15;44405:23;44430:12;44444:23;44469:12;44483:18;44505:19;44516:7;44505:10;:19::i;:::-;44387:137;;;;;;;;;;;;44553:28;44573:7;44553;:15;44561:6;44553:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44535:7;:15;44543:6;44535:15;;;;;;;;;;;;;;;:46;;;;44610:28;44630:7;44610;:15;44618:6;44610:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44592:7;:15;44600:6;44592:15;;;;;;;;;;;;;;;:46;;;;44670:39;44693:15;44670:7;:18;44678:9;44670:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44649:7;:18;44657:9;44649:18;;;;;;;;;;;;;;;:60;;;;44723:26;44738:10;44723:14;:26::i;:::-;44760:23;44772:4;44778;44760:11;:23::i;:::-;44816:9;44799:44;;44808:6;44799:44;;;44827:15;44799:44;;;;;;:::i;:::-;;;;;;;;44376:475;;;;;;44285:566;;;:::o;43691:586::-;43792:15;43809:23;43834:12;43848:23;43873:12;43887:18;43909:19;43920:7;43909:10;:19::i;:::-;43791:137;;;;;;;;;;;;43957:28;43977:7;43957;:15;43965:6;43957:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43939:7;:15;43947:6;43939:15;;;;;;;;;;;;;;;:46;;;;44017:39;44040:15;44017:7;:18;44025:9;44017:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43996:7;:18;44004:9;43996:18;;;;;;;;;;;;;;;:60;;;;44088:39;44111:15;44088:7;:18;44096:9;44088:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44067:7;:18;44075:9;44067:18;;;;;;;;;;;;;;;:60;;;;44149:26;44164:10;44149:14;:26::i;:::-;44186:23;44198:4;44204;44186:11;:23::i;:::-;44242:9;44225:44;;44234:6;44225:44;;;44253:15;44225:44;;;;;;:::i;:::-;;;;;;;;43780:497;;;;;;43691:586;;;:::o;41679:721::-;41778:15;41795:23;41820:12;41834:23;41859:12;41873:18;41895:19;41906:7;41895:10;:19::i;:::-;41777:137;;;;;;;;;;;;41962:59;41971:6;41979:15;41996;42013:7;41962:8;:59::i;:::-;41925:96;;;;;;;;42069:64;42083:6;42091:15;42108;42125:7;42069:13;:64::i;:::-;42032:101;;;;;;;;42162:28;42182:7;42162;:15;42170:6;42162:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42144:7;:15;42152:6;42144:15;;;;;;;;;;;;;;;:46;;;;42222:39;42245:15;42222:7;:18;42230:9;42222:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42201:7;:18;42209:9;42201:18;;;;;;;;;;;;;;;:60;;;;42272:26;42287:10;42272:14;:26::i;:::-;42309:23;42321:4;42327;42309:11;:23::i;:::-;42365:9;42348:44;;42357:6;42348:44;;;42376:15;42348:44;;;;;;:::i;:::-;;;;;;;;41766:634;;;;;;41679:721;;;:::o;31850:642::-;31953:15;31970:23;31995:12;32009:23;32034:12;32048:18;32070:19;32081:7;32070:10;:19::i;:::-;31952:137;;;;;;;;;;;;32118:28;32138:7;32118;:15;32126:6;32118:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32100:7;:15;32108:6;32100:15;;;;;;;;;;;;;;;:46;;;;32175:28;32195:7;32175;:15;32183:6;32175:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32157:7;:15;32165:6;32157:15;;;;;;;;;;;;;;;:46;;;;32235:39;32258:15;32235:7;:18;32243:9;32235:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32214:7;:18;32222:9;32214:18;;;;;;;;;;;;;;;:60;;;;32306:39;32329:15;32306:7;:18;32314:9;32306:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32285:7;:18;32293:9;32285:18;;;;;;;;;;;;;;;:60;;;;32364:26;32379:10;32364:14;:26::i;:::-;32401:23;32413:4;32419;32401:11;:23::i;:::-;32457:9;32440:44;;32449:6;32440:44;;;32468:15;32440:44;;;;;;:::i;:::-;;;;;;;;31941:551;;;;;;31850:642;;;:::o;35738:207::-;35791:15;;35781:7;:25;;;;35832:21;;35816:13;:37;;;;35874:16;;35863:8;:27;;;;35916:21;;35900:13;:37;;;;35738:207::o;35142:154::-;35206:7;35233:55;35272:5;35233:20;35245:7;;35233;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35226:62;;35142:154;;;:::o;34964:166::-;35034:7;35061:61;35106:5;35061:26;35073:13;;35061:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35054:68;;34964:166;;;:::o;34028:561::-;34078:7;34087;34107:15;34125:7;;34107:25;;34143:15;34161:7;;34143:25;;34190:9;34185:289;34209:9;:16;;;;34205:1;:20;34185:289;;;34275:7;34251;:21;34259:9;34269:1;34259:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34251:21;;;;;;;;;;;;;;;;:31;:66;;;;34310:7;34286;:21;34294:9;34304:1;34294:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34286:21;;;;;;;;;;;;;;;;:31;34251:66;34247:97;;;34327:7;;34336;;34319:25;;;;;;;;;34247:97;34369:34;34381:7;:21;34389:9;34399:1;34389:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34381:21;;;;;;;;;;;;;;;;34369:7;:11;;:34;;;;:::i;:::-;34359:44;;34428:34;34440:7;:21;34448:9;34458:1;34448:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34440:21;;;;;;;;;;;;;;;;34428:7;:11;;:34;;;;:::i;:::-;34418:44;;34227:3;;;;;:::i;:::-;;;;34185:289;;;;34498:20;34510:7;;34498;;:11;;:20;;;;:::i;:::-;34488:7;:30;34484:61;;;34528:7;;34537;;34520:25;;;;;;;;34484:61;34564:7;34573;34556:25;;;;;;34028:561;;;:::o;34601:355::-;34664:19;34687:10;:8;:10::i;:::-;34664:33;;34708:18;34729:27;34744:11;34729:10;:14;;:27;;;;:::i;:::-;34708:48;;34792:38;34819:10;34792:7;:22;34808:4;34792:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34767:7;:22;34783:4;34767:22;;;;;;;;;;;;;;;:63;;;;34844:11;:26;34864:4;34844:26;;;;;;;;;;;;;;;;;;;;;;;;;34841:107;;;34910:38;34937:10;34910:7;:22;34926:4;34910:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34885:7;:22;34901:4;34885:22;;;;;;;;;;;;;;;:63;;;;34841:107;34653:303;;34601:355;:::o;32500:147::-;32578:17;32590:4;32578:7;;:11;;:17;;;;:::i;:::-;32568:7;:27;;;;32619:20;32634:4;32619:10;;:14;;:20;;;;:::i;:::-;32606:10;:33;;;;32500:147;;:::o;42410:604::-;42533:7;42542;42575:1;42565:8;;:11;42562:62;;;42588:15;42605;42581:40;;;;;;42562:62;42634:13;42650:30;42671:8;;42650:16;42662:3;42650:7;:11;;:16;;;;:::i;:::-;:20;;:30;;;;:::i;:::-;42634:46;;42691:13;42707:21;42717:10;:8;:10::i;:::-;42707:5;:9;;:21;;;;:::i;:::-;42691:37;;42757:26;42777:5;42757:15;:19;;:26;;;;:::i;:::-;42739:44;;42812:26;42832:5;42812:15;:19;;:26;;;;:::i;:::-;42794:44;;42872:31;42897:5;42872:7;:20;42880:11;;;;;;;;;;;42872:20;;;;;;;;;;;;;;;;:24;;:31;;;;:::i;:::-;42849:7;:20;42857:11;;;;;;;;;;;42849:20;;;;;;;;;;;;;;;:54;;;;42936:11;;;;;;;;;;;42919:36;;42928:6;42919:36;;;42949:5;42919:36;;;;;;:::i;:::-;;;;;;;;42973:15;42990;42966:40;;;;;;42410:604;;;;;;;;:::o;43022:661::-;43150:7;43159;43197:1;43182:13;;:16;43179:67;;;43210:15;43227;43203:40;;;;;;43179:67;43256:18;43277:35;43298:13;;43277:16;43289:3;43277:7;:11;;:16;;;;:::i;:::-;:20;;:35;;;;:::i;:::-;43256:56;;43323:18;43344:26;43359:10;:8;:10::i;:::-;43344;:14;;:26;;;;:::i;:::-;43323:47;;43399:31;43419:10;43399:15;:19;;:31;;;;:::i;:::-;43381:49;;43459:31;43479:10;43459:15;:19;;:31;;;;:::i;:::-;43441:49;;43526:38;43553:10;43526:7;:22;43542:4;43526:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;43501:7;:22;43517:4;43501:22;;;;;;;;;;;;;;;:63;;;;43605:4;43580:43;;43589:6;43580:43;;;43612:10;43580:43;;;;;;:::i;:::-;;;;;;;;43641:15;43658;43634:40;;;;;;43022:661;;;;;;;;:::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:118::-;5536:24;5554:5;5536:24;:::i;:::-;5531:3;5524:37;5449:118;;:::o;5573:222::-;5666:4;5704:2;5693:9;5689:18;5681:26;;5717:71;5785:1;5774:9;5770:17;5761:6;5717:71;:::i;:::-;5573:222;;;;:::o;5801:86::-;5836:7;5876:4;5869:5;5865:16;5854:27;;5801:86;;;:::o;5893:112::-;5976:22;5992:5;5976:22;:::i;:::-;5971:3;5964:35;5893:112;;:::o;6011:214::-;6100:4;6138:2;6127:9;6123:18;6115:26;;6151:67;6215:1;6204:9;6200:17;6191:6;6151:67;:::i;:::-;6011:214;;;;:::o;6231:329::-;6290:6;6339:2;6327:9;6318:7;6314:23;6310:32;6307:119;;;6345:79;;:::i;:::-;6307:119;6465:1;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6436:117;6231:329;;;;:::o;6566:::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:104::-;6946:7;6975:24;6993:5;6975:24;:::i;:::-;6964:35;;6901:104;;;:::o;7011:138::-;7092:32;7118:5;7092:32;:::i;:::-;7085:5;7082:43;7072:71;;7139:1;7136;7129:12;7072:71;7011:138;:::o;7155:155::-;7209:5;7247:6;7234:20;7225:29;;7263:41;7298:5;7263:41;:::i;:::-;7155:155;;;;:::o;7316:345::-;7383:6;7432:2;7420:9;7411:7;7407:23;7403:32;7400:119;;;7438:79;;:::i;:::-;7400:119;7558:1;7583:61;7636:7;7627:6;7616:9;7612:22;7583:61;:::i;:::-;7573:71;;7529:125;7316:345;;;;:::o;7667:142::-;7770:32;7796:5;7770:32;:::i;:::-;7765:3;7758:45;7667:142;;:::o;7815:254::-;7924:4;7962:2;7951:9;7947:18;7939:26;;7975:87;8059:1;8048:9;8044:17;8035:6;7975:87;:::i;:::-;7815:254;;;;:::o;8075:116::-;8145:21;8160:5;8145:21;:::i;:::-;8138:5;8135:32;8125:60;;8181:1;8178;8171:12;8125:60;8075:116;:::o;8197:133::-;8240:5;8278:6;8265:20;8256:29;;8294:30;8318:5;8294:30;:::i;:::-;8197:133;;;;:::o;8336:323::-;8392:6;8441:2;8429:9;8420:7;8416:23;8412:32;8409:119;;;8447:79;;:::i;:::-;8409:119;8567:1;8592:50;8634:7;8625:6;8614:9;8610:22;8592:50;:::i;:::-;8582:60;;8538:114;8336:323;;;;:::o;8665:474::-;8733:6;8741;8790:2;8778:9;8769:7;8765:23;8761:32;8758:119;;;8796:79;;:::i;:::-;8758:119;8916:1;8941:53;8986:7;8977:6;8966:9;8962:22;8941:53;:::i;:::-;8931:63;;8887:117;9043:2;9069:53;9114:7;9105:6;9094:9;9090:22;9069:53;:::i;:::-;9059:63;;9014:118;8665:474;;;;;:::o;9145:180::-;9193:77;9190:1;9183:88;9290:4;9287:1;9280:15;9314:4;9311:1;9304:15;9331:320;9375:6;9412:1;9406:4;9402:12;9392:22;;9459:1;9453:4;9449:12;9480:18;9470:81;;9536:4;9528:6;9524:17;9514:27;;9470:81;9598:2;9590:6;9587:14;9567:18;9564:38;9561:84;;;9617:18;;:::i;:::-;9561:84;9382:269;9331:320;;;:::o;9657:231::-;9797:34;9793:1;9785:6;9781:14;9774:58;9866:14;9861:2;9853:6;9849:15;9842:39;9657:231;:::o;9894:366::-;10036:3;10057:67;10121:2;10116:3;10057:67;:::i;:::-;10050:74;;10133:93;10222:3;10133:93;:::i;:::-;10251:2;10246:3;10242:12;10235:19;;9894:366;;;:::o;10266:419::-;10432:4;10470:2;10459:9;10455:18;10447:26;;10519:9;10513:4;10509:20;10505:1;10494:9;10490:17;10483:47;10547:131;10673:4;10547:131;:::i;:::-;10539:139;;10266:419;;;:::o;10691:163::-;10831:15;10827:1;10819:6;10815:14;10808:39;10691:163;:::o;10860:366::-;11002:3;11023:67;11087:2;11082:3;11023:67;:::i;:::-;11016:74;;11099:93;11188:3;11099:93;:::i;:::-;11217:2;11212:3;11208:12;11201:19;;10860:366;;;:::o;11232:419::-;11398:4;11436:2;11425:9;11421:18;11413:26;;11485:9;11479:4;11475:20;11471:1;11460:9;11456:17;11449:47;11513:131;11639:4;11513:131;:::i;:::-;11505:139;;11232:419;;;:::o;11657:225::-;11797:34;11793:1;11785:6;11781:14;11774:58;11866:8;11861:2;11853:6;11849:15;11842:33;11657:225;:::o;11888:366::-;12030:3;12051:67;12115:2;12110:3;12051:67;:::i;:::-;12044:74;;12127:93;12216:3;12127:93;:::i;:::-;12245:2;12240:3;12236:12;12229:19;;11888:366;;;:::o;12260:419::-;12426:4;12464:2;12453:9;12449:18;12441:26;;12513:9;12507:4;12503:20;12499:1;12488:9;12484:17;12477:47;12541:131;12667:4;12541:131;:::i;:::-;12533:139;;12260:419;;;:::o;12685:223::-;12825:34;12821:1;12813:6;12809:14;12802:58;12894:6;12889:2;12881:6;12877:15;12870:31;12685:223;:::o;12914:366::-;13056:3;13077:67;13141:2;13136:3;13077:67;:::i;:::-;13070:74;;13153:93;13242:3;13153:93;:::i;:::-;13271:2;13266:3;13262:12;13255:19;;12914:366;;;:::o;13286:419::-;13452:4;13490:2;13479:9;13475:18;13467:26;;13539:9;13533:4;13529:20;13525:1;13514:9;13510:17;13503:47;13567:131;13693:4;13567:131;:::i;:::-;13559:139;;13286:419;;;:::o;13711:221::-;13851:34;13847:1;13839:6;13835:14;13828:58;13920:4;13915:2;13907:6;13903:15;13896:29;13711:221;:::o;13938:366::-;14080:3;14101:67;14165:2;14160:3;14101:67;:::i;:::-;14094:74;;14177:93;14266:3;14177:93;:::i;:::-;14295:2;14290:3;14286:12;14279:19;;13938:366;;;:::o;14310:419::-;14476:4;14514:2;14503:9;14499:18;14491:26;;14563:9;14557:4;14553:20;14549:1;14538:9;14534:17;14527:47;14591:131;14717:4;14591:131;:::i;:::-;14583:139;;14310:419;;;:::o;14735:224::-;14875:34;14871:1;14863:6;14859:14;14852:58;14944:7;14939:2;14931:6;14927:15;14920:32;14735:224;:::o;14965:366::-;15107:3;15128:67;15192:2;15187:3;15128:67;:::i;:::-;15121:74;;15204:93;15293:3;15204:93;:::i;:::-;15322:2;15317:3;15313:12;15306:19;;14965:366;;;:::o;15337:419::-;15503:4;15541:2;15530:9;15526:18;15518:26;;15590:9;15584:4;15580:20;15576:1;15565:9;15561:17;15554:47;15618:131;15744:4;15618:131;:::i;:::-;15610:139;;15337:419;;;:::o;15762:228::-;15902:34;15898:1;15890:6;15886:14;15879:58;15971:11;15966:2;15958:6;15954:15;15947:36;15762:228;:::o;15996:366::-;16138:3;16159:67;16223:2;16218:3;16159:67;:::i;:::-;16152:74;;16235:93;16324:3;16235:93;:::i;:::-;16353:2;16348:3;16344:12;16337:19;;15996:366;;;:::o;16368:419::-;16534:4;16572:2;16561:9;16557:18;16549:26;;16621:9;16615:4;16611:20;16607:1;16596:9;16592:17;16585:47;16649:131;16775:4;16649:131;:::i;:::-;16641:139;;16368:419;;;:::o;16793:165::-;16933:17;16929:1;16921:6;16917:14;16910:41;16793:165;:::o;16964:366::-;17106:3;17127:67;17191:2;17186:3;17127:67;:::i;:::-;17120:74;;17203:93;17292:3;17203:93;:::i;:::-;17321:2;17316:3;17312:12;17305:19;;16964:366;;;:::o;17336:419::-;17502:4;17540:2;17529:9;17525:18;17517:26;;17589:9;17583:4;17579:20;17575:1;17564:9;17560:17;17553:47;17617:131;17743:4;17617:131;:::i;:::-;17609:139;;17336:419;;;:::o;17761:180::-;17809:77;17806:1;17799:88;17906:4;17903:1;17896:15;17930:4;17927:1;17920:15;17947:191;17987:4;18007:20;18025:1;18007:20;:::i;:::-;18002:25;;18041:20;18059:1;18041:20;:::i;:::-;18036:25;;18080:1;18077;18074:8;18071:34;;;18085:18;;:::i;:::-;18071:34;18130:1;18127;18123:9;18115:17;;17947:191;;;;:::o;18144:305::-;18184:3;18203:20;18221:1;18203:20;:::i;:::-;18198:25;;18237:20;18255:1;18237:20;:::i;:::-;18232:25;;18391:1;18323:66;18319:74;18316:1;18313:81;18310:107;;;18397:18;;:::i;:::-;18310:107;18441:1;18438;18434:9;18427:16;;18144:305;;;;:::o;18455:177::-;18595:29;18591:1;18583:6;18579:14;18572:53;18455:177;:::o;18638:366::-;18780:3;18801:67;18865:2;18860:3;18801:67;:::i;:::-;18794:74;;18877:93;18966:3;18877:93;:::i;:::-;18995:2;18990:3;18986:12;18979:19;;18638:366;;;:::o;19010:419::-;19176:4;19214:2;19203:9;19199:18;19191:26;;19263:9;19257:4;19253:20;19249:1;19238:9;19234:17;19227:47;19291:131;19417:4;19291:131;:::i;:::-;19283:139;;19010:419;;;:::o;19435:182::-;19575:34;19571:1;19563:6;19559:14;19552:58;19435:182;:::o;19623:366::-;19765:3;19786:67;19850:2;19845:3;19786:67;:::i;:::-;19779:74;;19862:93;19951:3;19862:93;:::i;:::-;19980:2;19975:3;19971:12;19964:19;;19623:366;;;:::o;19995:419::-;20161:4;20199:2;20188:9;20184:18;20176:26;;20248:9;20242:4;20238:20;20234:1;20223:9;20219:17;20212:47;20276:131;20402:4;20276:131;:::i;:::-;20268:139;;19995:419;;;:::o;20420:229::-;20560:34;20556:1;20548:6;20544:14;20537:58;20629:12;20624:2;20616:6;20612:15;20605:37;20420:229;:::o;20655:366::-;20797:3;20818:67;20882:2;20877:3;20818:67;:::i;:::-;20811:74;;20894:93;20983:3;20894:93;:::i;:::-;21012:2;21007:3;21003:12;20996:19;;20655:366;;;:::o;21027:419::-;21193:4;21231:2;21220:9;21216:18;21208:26;;21280:9;21274:4;21270:20;21266:1;21255:9;21251:17;21244:47;21308:131;21434:4;21308:131;:::i;:::-;21300:139;;21027:419;;;:::o;21452:442::-;21601:4;21639:2;21628:9;21624:18;21616:26;;21652:71;21720:1;21709:9;21705:17;21696:6;21652:71;:::i;:::-;21733:72;21801:2;21790:9;21786:18;21777:6;21733:72;:::i;:::-;21815;21883:2;21872:9;21868:18;21859:6;21815:72;:::i;:::-;21452:442;;;;;;:::o;21900:227::-;22040:34;22036:1;22028:6;22024:14;22017:58;22109:10;22104:2;22096:6;22092:15;22085:35;21900:227;:::o;22133:366::-;22275:3;22296:67;22360:2;22355:3;22296:67;:::i;:::-;22289:74;;22372:93;22461:3;22372:93;:::i;:::-;22490:2;22485:3;22481:12;22474:19;;22133:366;;;:::o;22505:419::-;22671:4;22709:2;22698:9;22694:18;22686:26;;22758:9;22752:4;22748:20;22744:1;22733:9;22729:17;22722:47;22786:131;22912:4;22786:131;:::i;:::-;22778:139;;22505:419;;;:::o;22930:180::-;22978:77;22975:1;22968:88;23075:4;23072:1;23065:15;23099:4;23096:1;23089:15;23116:185;23156:1;23173:20;23191:1;23173:20;:::i;:::-;23168:25;;23207:20;23225:1;23207:20;:::i;:::-;23202:25;;23246:1;23236:35;;23251:18;;:::i;:::-;23236:35;23293:1;23290;23286:9;23281:14;;23116:185;;;;:::o;23307:348::-;23347:7;23370:20;23388:1;23370:20;:::i;:::-;23365:25;;23404:20;23422:1;23404:20;:::i;:::-;23399:25;;23592:1;23524:66;23520:74;23517:1;23514:81;23509:1;23502:9;23495:17;23491:105;23488:131;;;23599:18;;:::i;:::-;23488:131;23647:1;23644;23640:9;23629:20;;23307:348;;;;:::o;23661:220::-;23801:34;23797:1;23789:6;23785:14;23778:58;23870:3;23865:2;23857:6;23853:15;23846:28;23661:220;:::o;23887:366::-;24029:3;24050:67;24114:2;24109:3;24050:67;:::i;:::-;24043:74;;24126:93;24215:3;24126:93;:::i;:::-;24244:2;24239:3;24235:12;24228:19;;23887:366;;;:::o;24259:419::-;24425:4;24463:2;24452:9;24448:18;24440:26;;24512:9;24506:4;24502:20;24498:1;24487:9;24483:17;24476:47;24540:131;24666:4;24540:131;:::i;:::-;24532:139;;24259:419;;;:::o;24684:180::-;24732:77;24729:1;24722:88;24829:4;24826:1;24819:15;24853:4;24850:1;24843:15;24870:180;24918:77;24915:1;24908:88;25015:4;25012:1;25005:15;25039:4;25036:1;25029:15;25056:143;25113:5;25144:6;25138:13;25129:22;;25160:33;25187:5;25160:33;:::i;:::-;25056:143;;;;:::o;25205:351::-;25275:6;25324:2;25312:9;25303:7;25299:23;25295:32;25292:119;;;25330:79;;:::i;:::-;25292:119;25450:1;25475:64;25531:7;25522:6;25511:9;25507:22;25475:64;:::i;:::-;25465:74;;25421:128;25205:351;;;;:::o;25562:85::-;25607:7;25636:5;25625:16;;25562:85;;;:::o;25653:158::-;25711:9;25744:61;25762:42;25771:32;25797:5;25771:32;:::i;:::-;25762:42;:::i;:::-;25744:61;:::i;:::-;25731:74;;25653:158;;;:::o;25817:147::-;25912:45;25951:5;25912:45;:::i;:::-;25907:3;25900:58;25817:147;;:::o;25970:114::-;26037:6;26071:5;26065:12;26055:22;;25970:114;;;:::o;26090:184::-;26189:11;26223:6;26218:3;26211:19;26263:4;26258:3;26254:14;26239:29;;26090:184;;;;:::o;26280:132::-;26347:4;26370:3;26362:11;;26400:4;26395:3;26391:14;26383:22;;26280:132;;;:::o;26418:108::-;26495:24;26513:5;26495:24;:::i;:::-;26490:3;26483:37;26418:108;;:::o;26532:179::-;26601:10;26622:46;26664:3;26656:6;26622:46;:::i;:::-;26700:4;26695:3;26691:14;26677:28;;26532:179;;;;:::o;26717:113::-;26787:4;26819;26814:3;26810:14;26802:22;;26717:113;;;:::o;26866:732::-;26985:3;27014:54;27062:5;27014:54;:::i;:::-;27084:86;27163:6;27158:3;27084:86;:::i;:::-;27077:93;;27194:56;27244:5;27194:56;:::i;:::-;27273:7;27304:1;27289:284;27314:6;27311:1;27308:13;27289:284;;;27390:6;27384:13;27417:63;27476:3;27461:13;27417:63;:::i;:::-;27410:70;;27503:60;27556:6;27503:60;:::i;:::-;27493:70;;27349:224;27336:1;27333;27329:9;27324:14;;27289:284;;;27293:14;27589:3;27582:10;;26990:608;;;26866:732;;;;:::o;27604:831::-;27867:4;27905:3;27894:9;27890:19;27882:27;;27919:71;27987:1;27976:9;27972:17;27963:6;27919:71;:::i;:::-;28000:80;28076:2;28065:9;28061:18;28052:6;28000:80;:::i;:::-;28127:9;28121:4;28117:20;28112:2;28101:9;28097:18;28090:48;28155:108;28258:4;28249:6;28155:108;:::i;:::-;28147:116;;28273:72;28341:2;28330:9;28326:18;28317:6;28273:72;:::i;:::-;28355:73;28423:3;28412:9;28408:19;28399:6;28355:73;:::i;:::-;27604:831;;;;;;;;:::o;28441:807::-;28690:4;28728:3;28717:9;28713:19;28705:27;;28742:71;28810:1;28799:9;28795:17;28786:6;28742:71;:::i;:::-;28823:72;28891:2;28880:9;28876:18;28867:6;28823:72;:::i;:::-;28905:80;28981:2;28970:9;28966:18;28957:6;28905:80;:::i;:::-;28995;29071:2;29060:9;29056:18;29047:6;28995:80;:::i;:::-;29085:73;29153:3;29142:9;29138:19;29129:6;29085:73;:::i;:::-;29168;29236:3;29225:9;29221:19;29212:6;29168:73;:::i;:::-;28441:807;;;;;;;;;:::o;29254:143::-;29311:5;29342:6;29336:13;29327:22;;29358:33;29385:5;29358:33;:::i;:::-;29254:143;;;;:::o;29403:663::-;29491:6;29499;29507;29556:2;29544:9;29535:7;29531:23;29527:32;29524:119;;;29562:79;;:::i;:::-;29524:119;29682:1;29707:64;29763:7;29754:6;29743:9;29739:22;29707:64;:::i;:::-;29697:74;;29653:128;29820:2;29846:64;29902:7;29893:6;29882:9;29878:22;29846:64;:::i;:::-;29836:74;;29791:129;29959:2;29985:64;30041:7;30032:6;30021:9;30017:22;29985:64;:::i;:::-;29975:74;;29930:129;29403:663;;;;;:::o;30072:233::-;30111:3;30134:24;30152:5;30134:24;:::i;:::-;30125:33;;30180:66;30173:5;30170:77;30167:103;;;30250:18;;:::i;:::-;30167:103;30297:1;30290:5;30286:13;30279:20;;30072:233;;;:::o
Swarm Source
ipfs://499f9f6d4899229dcbb3aa401461f68bd1a030467c8aeeace59ca85cd0586c21
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.