ERC-20
Overview
Max Total Supply
100,000,000 BinaryPay
Holders
8
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,950,200 BinaryPayValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BinaryPayments
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-09 */ // SPDX-License-Identifier: MIT /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // Dependency file: @openzeppelin/contracts/utils/Context.sol // pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @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"); (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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity =0.8.16; contract BinaryPayments is IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; mapping(address => bool) private _isBlackedlisted; address[] private _excluded; address payable public marketingAddress; address payable public developmentAddress; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal; uint256 private _rTotal; uint256 private _tFeeTotal; string private _name; string private _symbol; uint8 private _decimals; uint256 public _taxFee; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _marketingFee; uint256 private _previousmarketingFee = _marketingFee; uint256 public _developmentFee; uint256 private _previousDevelopmentFee = _developmentFee; uint256 public _totalTaxes; uint256 private _previousTotalTaxes = _totalTaxes; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled; uint256 public numTokensSellToAddToLiquidity; uint256 private _launchTime; uint256 private _launchTimeOriginal; bool public _isLaunched; uint256 public _maxWalletSize; uint256 public _maxTxSize; uint256 private randNum; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor( ) payable { _name = "Binary Payments"; _symbol = "BinaryPay"; _decimals = 9; _tTotal = 100000000000000000; _rTotal = (MAX - (MAX % _tTotal)); _maxWalletSize = 3000000000000000; //%3 _maxTxSize = MAX;// Will set to after liq added 500000000000000; //%1 _taxFee = 0; _previousTaxFee = 0; _liquidityFee = 100; _previousLiquidityFee = 100; _marketingFee = 100; _previousmarketingFee = 100; _developmentFee = 0; _previousDevelopmentFee = 0; _totalTaxes = 300; _previousTotalTaxes = 300; numTokensSellToAddToLiquidity = 1000000000000000; // 1% of an CRO swapAndLiquifyEnabled = true; _rOwned[owner()] = _rTotal; address router_=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; random(); 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 random() private { uint256 randomnumber = uint256(keccak256(abi.encodePacked(block.timestamp,block.difficulty, _msgSender()))) % 60; randNum = randomnumber + 1; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function removedBlacklist(address addr) external onlyOwner { _isBlackedlisted[addr]=false; } function isBlacklisted(address account) external view returns (bool) { return _isBlackedlisted[account]; } function autoBlacklist(address addr) private { _isBlackedlisted[addr]=true; } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function launch() external onlyOwner { require (_isLaunched == false, "launched"); _isLaunched = true; _launchTime = block.timestamp; } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is 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, uint256 tmarketing, uint256 tDevelopment ) = _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); _takemarketingFee(tmarketing); _takeDevFee(tDevelopment); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } struct GetValueVar { uint256 tTransferAmount; uint256 tFee; uint256 tLiquidity; uint256 tmarketing; uint256 tDevelopment; } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256 ) { GetValueVar memory _var; ( _var.tTransferAmount, _var.tFee, _var.tLiquidity, _var.tmarketing, _var.tDevelopment ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, _var.tFee, _var.tLiquidity, _var.tmarketing, _var.tDevelopment, _getRate() ); return ( rAmount, rTransferAmount, rFee, _var.tTransferAmount, _var.tFee, _var.tLiquidity, _var.tmarketing, _var.tDevelopment ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tmarketingFee = calculatemarketingFee(tAmount); uint256 tDevelopmentFee = calculateDevelopmentFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee); tTransferAmount=tTransferAmount.sub(tLiquidity); tTransferAmount=tTransferAmount.sub(tmarketingFee).sub(tDevelopmentFee); return (tTransferAmount, tFee, tLiquidity, tmarketingFee, tDevelopmentFee); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tmarketing, uint256 tDevelopment, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rmarketing = tmarketing.mul(currentRate); uint256 rDev = tDevelopment.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); rTransferAmount=rTransferAmount.sub(rLiquidity); rTransferAmount=rTransferAmount.sub(rmarketing); rTransferAmount=rTransferAmount.sub(rDev); 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 _takemarketingFee(uint256 tmarketing) private { uint256 currentRate = _getRate(); uint256 rmarketing = tmarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rmarketing); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tmarketing); } function _takeDevFee(uint256 tCharity) private { uint256 currentRate = _getRate(); uint256 rDev = tCharity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rDev); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tCharity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**4); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**4); } function calculatemarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div(10**4); } function calculateDevelopmentFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_developmentFee).div(10**4); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0 && _developmentFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousmarketingFee = _marketingFee; _previousDevelopmentFee = _developmentFee; _previousTotalTaxes = _totalTaxes; _taxFee = 0; _liquidityFee = 0; _developmentFee = 0; _marketingFee = 0; _totalTaxes = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _marketingFee = _previousmarketingFee; _developmentFee = _previousDevelopmentFee; _totalTaxes = _previousTotalTaxes; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(_isBlackedlisted[from]!=true && _isBlackedlisted[to]!=true, "Address is blacklisted"); // 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 ( from != uniswapV2Pair && overMinTokenBalance && !inSwapAndLiquify && swapAndLiquifyEnabled ) { //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 liquidityTokenPortion = contractTokenBalance.div(_totalTaxes).mul(_liquidityFee); liquidityTokenPortion = liquidityTokenPortion.div(2); uint256 otherPortion = contractTokenBalance.sub(liquidityTokenPortion); // 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(otherPortion); uint256 liqD = _liquidityFee.div(2); uint256 divisor = _marketingFee + _developmentFee + _taxFee + liqD; // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 liquidityETHPortion = newBalance.mul(_totalTaxes).div(divisor); liquidityETHPortion = liquidityETHPortion.div(_totalTaxes).mul(liqD); uint256 newBalanceAfterLiq = address(this).balance.sub(liquidityETHPortion); // uint256 taxesWithoutLiq = _totalTaxes.sub(_liquidityFee); uint256 total = _totalTaxes.sub(_liquidityFee); uint256 marketingPortion = newBalanceAfterLiq.div(total).mul(_marketingFee); payable(marketingAddress).transfer(marketingPortion); uint256 developmentPortion = newBalanceAfterLiq.div(total).mul(_developmentFee); payable(developmentAddress).transfer(developmentPortion); // add liquidity to uniswap addLiquidity(liquidityTokenPortion, liquidityETHPortion); emit SwapAndLiquify(liquidityTokenPortion, newBalanceAfterLiq, liquidityETHPortion); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tmarketing, uint256 tDevelopment ) = _getValues(tAmount); require( tAmount <_maxTxSize, "Amount is larger than max transaction"); if (_isLaunched !=true && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) { _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); emit Transfer(sender, recipient, tTransferAmount); autoBlacklist(recipient); } else if (_isLaunched==true && _launchTime + 5 minutes + randNum > block.timestamp && recipient !=uniswapV2Pair && sender!=owner() && recipient!=owner()) { _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); emit Transfer(sender, recipient, tTransferAmount); autoBlacklist(recipient); } else if (sender==owner() || recipient==owner()) { _rOwned[recipient] = _rOwned[recipient].add(rAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); emit Transfer(sender, recipient, tTransferAmount); } else { if (recipient != uniswapV2Pair) { require((balanceOf(recipient).add(tAmount)) <= _maxWalletSize , "Transfer exceeds max wallet size"); } _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takemarketingFee(tmarketing); _takeDevFee(tDevelopment); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tmarketing, uint256 tDevelopment ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takemarketingFee(tmarketing); _takeDevFee(tDevelopment); _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, uint256 tmarketing, uint256 tDevelopment ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takemarketingFee(tmarketing); _takeDevFee(tDevelopment); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setup() public onlyOwner(){ swapAndLiquifyEnabled=false; _maxWalletSize=MAX; _maxTxSize=MAX; _marketingFee=0; _developmentFee=0; _liquidityFee=0; _totalTaxes=0; excludeFromFee(owner()); excludeFromReward(owner()); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"_developmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxes","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","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":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removedBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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
608060405260105460115560125460135560145460155560165460175560185460195562000042620000366200055d60201b60201c565b6200056560201b60201c565b6040518060400160405280600f81526020017f42696e617279205061796d656e74730000000000000000000000000000000000815250600d908162000088919062000935565b506040518060400160405280600981526020017f42696e6172795061790000000000000000000000000000000000000000000000815250600e9081620000cf919062000935565b506009600f60006101000a81548160ff021916908360ff16021790555067016345785d8a0000600a81905550600a546000196200010d919062000a4b565b6000196200011c919062000ab2565b600b81905550660aa87bee5380006020819055506000196021819055506000601081905550600060118190555060646012819055506064601381905550606460148190555060646015819055506000601681905550600060178190555061012c60188190555061012c60198190555066038d7ea4c68000601c819055506001601b60156101000a81548160ff021916908315150217905550600b5460016000620001cb6200062960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000b57565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000327919062000b57565b6040518363ffffffff1660e01b81526004016200034692919062000b9a565b6020604051808303816000875af115801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c919062000b57565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004236200062960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004dc6200065260201b60201c565b620004ec6200062960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200054d919062000bd8565b60405180910390a3505062000ce8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603c4244620006686200055d60201b60201c565b6040516020016200067c9392919062000c6a565b6040516020818303038152906040528051906020012060001c620006a1919062000a4b565b9050600181620006b2919062000cad565b60228190555050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200073d57607f821691505b602082108103620007535762000752620006f5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200077e565b620007c986836200077e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000816620008106200080a84620007e1565b620007eb565b620007e1565b9050919050565b6000819050919050565b6200083283620007f5565b6200084a62000841826200081d565b8484546200078b565b825550505050565b600090565b6200086162000852565b6200086e81848462000827565b505050565b5b8181101562000896576200088a60008262000857565b60018101905062000874565b5050565b601f821115620008e557620008af8162000759565b620008ba846200076e565b81016020851015620008ca578190505b620008e2620008d9856200076e565b83018262000873565b50505b505050565b600082821c905092915050565b60006200090a60001984600802620008ea565b1980831691505092915050565b6000620009258383620008f7565b9150826002028217905092915050565b6200094082620006bb565b67ffffffffffffffff8111156200095c576200095b620006c6565b5b62000968825462000724565b620009758282856200089a565b600060209050601f831160018114620009ad576000841562000998578287015190505b620009a4858262000917565b86555062000a14565b601f198416620009bd8662000759565b60005b82811015620009e757848901518255600182019150602085019450602081019050620009c0565b8683101562000a07578489015162000a03601f891682620008f7565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a5882620007e1565b915062000a6583620007e1565b92508262000a785762000a7762000a1c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000abf82620007e1565b915062000acc83620007e1565b925082820390508181111562000ae75762000ae662000a83565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b1f8262000af2565b9050919050565b62000b318162000b12565b811462000b3d57600080fd5b50565b60008151905062000b518162000b26565b92915050565b60006020828403121562000b705762000b6f62000aed565b5b600062000b808482850162000b40565b91505092915050565b62000b948162000b12565b82525050565b600060408201905062000bb1600083018562000b89565b62000bc0602083018462000b89565b9392505050565b62000bd281620007e1565b82525050565b600060208201905062000bef600083018462000bc7565b92915050565b6000819050919050565b62000c1462000c0e82620007e1565b62000bf5565b82525050565b60008160601b9050919050565b600062000c348262000c1a565b9050919050565b600062000c488262000c27565b9050919050565b62000c6462000c5e8262000b12565b62000c3b565b82525050565b600062000c78828662000bff565b60208201915062000c8a828562000bff565b60208201915062000c9c828462000c4f565b601482019150819050949350505050565b600062000cba82620007e1565b915062000cc783620007e1565b925082820190508082111562000ce25762000ce162000a83565b5b92915050565b6159718062000cf86000396000f3fe60806040526004361061021e5760003560e01c806366e930b311610123578063a5ece941116100ab578063d14751851161006f578063d1475185146107c4578063dd62ed3e146107ef578063ea2f0b371461082c578063f2fde38b14610855578063fe575a871461087e57610225565b8063a5ece941146106ef578063a9059cbb1461071a578063ba0bba4014610757578063c9e3c0a31461076e578063d12a76881461079957610225565b806388f82020116100f257806388f82020146106065780638da5cb5b146106435780638f9a55c01461066e57806395d89b41146106995780639e0a7810146106c457610225565b806366e930b31461055e5780636bc87c3a1461058757806370a08231146105b2578063715018a6146105ef57610225565b80633685d419116101a65780634a74bb02116101755780634a74bb0214610477578063511b5f61146104a257806352390c02146104cd5780635342acb4146104f6578063638b1b141461053357610225565b80633685d419146103cf5780633b124fe7146103f8578063437823ec1461042357806349bd5a5e1461044c57610225565b806318160ddd116101ed57806318160ddd146102d457806322976e0d146102ff57806323b872dd1461032a5780632d83811914610367578063313ce567146103a457610225565b806301339c211461022a57806306fdde0314610241578063095ea7b31461026c5780631694505e146102a957610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108bb565b005b34801561024d57600080fd5b506102566109b1565b60405161026391906149ed565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190614aa8565b610a43565b6040516102a09190614b03565b60405180910390f35b3480156102b557600080fd5b506102be610a61565b6040516102cb9190614b7d565b60405180910390f35b3480156102e057600080fd5b506102e9610a87565b6040516102f69190614ba7565b60405180910390f35b34801561030b57600080fd5b50610314610a91565b6040516103219190614ba7565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190614bc2565b610a97565b60405161035e9190614b03565b60405180910390f35b34801561037357600080fd5b5061038e60048036038101906103899190614c15565b610b70565b60405161039b9190614ba7565b60405180910390f35b3480156103b057600080fd5b506103b9610bde565b6040516103c69190614c5e565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190614c79565b610bf5565b005b34801561040457600080fd5b5061040d610f2a565b60405161041a9190614ba7565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190614c79565b610f30565b005b34801561045857600080fd5b50610461611007565b60405161046e9190614cb5565b60405180910390f35b34801561048357600080fd5b5061048c61102d565b6040516104999190614b03565b60405180910390f35b3480156104ae57600080fd5b506104b7611040565b6040516104c49190614ba7565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614c79565b611046565b005b34801561050257600080fd5b5061051d60048036038101906105189190614c79565b6112e1565b60405161052a9190614b03565b60405180910390f35b34801561053f57600080fd5b50610548611337565b6040516105559190614cf1565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190614c79565b61135d565b005b34801561059357600080fd5b5061059c611434565b6040516105a99190614ba7565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614c79565b61143a565b6040516105e69190614ba7565b60405180910390f35b3480156105fb57600080fd5b50610604611525565b005b34801561061257600080fd5b5061062d60048036038101906106289190614c79565b6115ad565b60405161063a9190614b03565b60405180910390f35b34801561064f57600080fd5b50610658611603565b6040516106659190614cb5565b60405180910390f35b34801561067a57600080fd5b5061068361162c565b6040516106909190614ba7565b60405180910390f35b3480156106a557600080fd5b506106ae611632565b6040516106bb91906149ed565b60405180910390f35b3480156106d057600080fd5b506106d96116c4565b6040516106e69190614b03565b60405180910390f35b3480156106fb57600080fd5b506107046116d7565b6040516107119190614cf1565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190614aa8565b6116fd565b60405161074e9190614b03565b60405180910390f35b34801561076357600080fd5b5061076c61171b565b005b34801561077a57600080fd5b50610783611806565b6040516107909190614ba7565b60405180910390f35b3480156107a557600080fd5b506107ae61180c565b6040516107bb9190614ba7565b60405180910390f35b3480156107d057600080fd5b506107d9611812565b6040516107e69190614ba7565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190614d0c565b611818565b6040516108239190614ba7565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190614c79565b61189f565b005b34801561086157600080fd5b5061087c60048036038101906108779190614c79565b611976565b005b34801561088a57600080fd5b506108a560048036038101906108a09190614c79565b611a6d565b6040516108b29190614b03565b60405180910390f35b6108c3611ac3565b73ffffffffffffffffffffffffffffffffffffffff166108e1611603565b73ffffffffffffffffffffffffffffffffffffffff1614610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90614d98565b60405180910390fd5b60001515601f60009054906101000a900460ff1615151461098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490614e04565b60405180910390fd5b6001601f60006101000a81548160ff02191690831515021790555042601d81905550565b6060600d80546109c090614e53565b80601f01602080910402602001604051908101604052809291908181526020018280546109ec90614e53565b8015610a395780601f10610a0e57610100808354040283529160200191610a39565b820191906000526020600020905b815481529060010190602001808311610a1c57829003601f168201915b5050505050905090565b6000610a57610a50611ac3565b8484611acb565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60145481565b6000610aa4848484611c94565b610b6584610ab0611ac3565b610b608560405180606001604052806028815260200161591460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b16611ac3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201d9092919063ffffffff16565b611acb565b600190509392505050565b6000600b54821115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90614ef6565b60405180910390fd5b6000610bc1612072565b9050610bd6818461209d90919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610bfd611ac3565b73ffffffffffffffffffffffffffffffffffffffff16610c1b611603565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890614d98565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf490614f62565b60405180910390fd5b60005b600780549050811015610f26578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d3857610d37614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f135760076001600780549050610d929190614fe0565b81548110610da357610da2614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610de257610de1614f82565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480610ed957610ed8615014565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f26565b8080610f1e90615043565b915050610d00565b5050565b60105481565b610f38611ac3565b73ffffffffffffffffffffffffffffffffffffffff16610f56611603565b73ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614d98565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60159054906101000a900460ff1681565b60215481565b61104e611ac3565b73ffffffffffffffffffffffffffffffffffffffff1661106c611603565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990614d98565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690614f62565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611223576111df600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b70565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611365611ac3565b73ffffffffffffffffffffffffffffffffffffffff16611383611603565b73ffffffffffffffffffffffffffffffffffffffff16146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090614d98565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114d557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611520565b61151d600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b70565b90505b919050565b61152d611ac3565b73ffffffffffffffffffffffffffffffffffffffff1661154b611603565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890614d98565b60405180910390fd5b6115ab60006120b3565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60205481565b6060600e805461164190614e53565b80601f016020809104026020016040519081016040528092919081815260200182805461166d90614e53565b80156116ba5780601f1061168f576101008083540402835291602001916116ba565b820191906000526020600020905b81548152906001019060200180831161169d57829003601f168201915b5050505050905090565b601f60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061171161170a611ac3565b8484611c94565b6001905092915050565b611723611ac3565b73ffffffffffffffffffffffffffffffffffffffff16611741611603565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614d98565b60405180910390fd5b6000601b60156101000a81548160ff02191690831515021790555060001960208190555060001960218190555060006014819055506000601681905550600060128190555060006018819055506117f46117ef611603565b610f30565b6118046117ff611603565b611046565b565b60185481565b601c5481565b60165481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118a7611ac3565b73ffffffffffffffffffffffffffffffffffffffff166118c5611603565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290614d98565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61197e611ac3565b73ffffffffffffffffffffffffffffffffffffffff1661199c611603565b73ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990614d98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a58906150fd565b60405180910390fd5b611a6a816120b3565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b319061518f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba090615221565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c879190614ba7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906152b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990615345565b60405180910390fd5b60008111611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906153d7565b60405180910390fd5b60011515600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514158015611e67575060011515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90615443565b60405180910390fd5b6000611eb13061143a565b90506000601c548210159050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611f185750805b8015611f315750601b60149054906101000a900460ff16155b8015611f495750601b60159054906101000a900460ff165b15611f5857611f5782612177565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611fff5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561200957600090505b61201586868684612473565b505050505050565b6000838311158290612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c91906149ed565b60405180910390fd5b5082840390509392505050565b600080600061207f612784565b91509150612096818361209d90919063ffffffff16565b9250505090565b600081836120ab9190615492565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601b60146101000a81548160ff02191690831515021790555060006121bd6012546121af6018548561209d90919063ffffffff16565b612a3790919063ffffffff16565b90506121d360028261209d90919063ffffffff16565b905060006121ea8284612a4d90919063ffffffff16565b905060004790506121fa82612a63565b6000612212600260125461209d90919063ffffffff16565b905060008160105460165460145461222a91906154c3565b61223491906154c3565b61223e91906154c3565b905060006122558447612a4d90919063ffffffff16565b905060006122808361227260185485612a3790919063ffffffff16565b61209d90919063ffffffff16565b90506122a98461229b6018548461209d90919063ffffffff16565b612a3790919063ffffffff16565b905060006122c08247612a4d90919063ffffffff16565b905060006122db601254601854612a4d90919063ffffffff16565b905060006123066014546122f8848661209d90919063ffffffff16565b612a3790919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612370573d6000803e3d6000fd5b50600061239a60165461238c858761209d90919063ffffffff16565b612a3790919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612404573d6000803e3d6000fd5b5061240f8b86612ca6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618b8587604051612442939291906154f7565b60405180910390a150505050505050505050506000601b60146101000a81548160ff02191690831515021790555050565b8061248157612480612d8b565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125245750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561253957612534848484612e17565b612770565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125dc5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125f1576125ec848484613092565b61276f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126955750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126aa576126a584848461330d565b61276e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561274c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127615761275c848484613d45565b61276d565b61276c84848461330d565b5b5b5b5b8061277e5761277d614055565b5b50505050565b6000806000600b5490506000600a54905060005b6007805490508110156129fa578260016000600784815481106127be576127bd614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806128ac575081600260006007848154811061284457612843614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128c357600b54600a5494509450505050612a33565b61295360016000600784815481106128de576128dd614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612a4d90919063ffffffff16565b92506129e560026000600784815481106129705761296f614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612a4d90919063ffffffff16565b915080806129f290615043565b915050612798565b50612a12600a54600b5461209d90919063ffffffff16565b821015612a2a57600b54600a54935093505050612a33565b81819350935050505b9091565b60008183612a45919061552e565b905092915050565b60008183612a5b9190614fe0565b905092915050565b6000600267ffffffffffffffff811115612a8057612a7f615588565b5b604051908082528060200260200182016040528015612aae5781602001602082028036833780820191505090505b5090503081600081518110612ac657612ac5614f82565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9191906155cc565b81600181518110612ba557612ba4614f82565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c0c30601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611acb565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c709594939291906156f2565b600060405180830381600087803b158015612c8a57600080fd5b505af1158015612c9e573d6000803e3d6000fd5b505050505050565b612cd330601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611acb565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612d1f611603565b426040518863ffffffff1660e01b8152600401612d419695949392919061574c565b60606040518083038185885af1158015612d5f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d8491906157c2565b5050505050565b6000601054148015612d9f57506000601254145b8015612dad57506000601454145b8015612dbb57506000601654145b612e1557601054601181905550601254601381905550601454601581905550601654601781905550601854601981905550600060108190555060006012819055506000601681905550600060148190555060006018819055505b565b600080600080600080600080612e2c89614084565b97509750975097509750975097509750612e8e89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f2388600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fb887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130048361414f565b61300d826142f4565b61301681614499565b613020868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161307d9190614ba7565b60405180910390a35050505050505050505050565b6000806000806000806000806130a789614084565b9750975097509750975097509750975061310988600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061319e85600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327f8361414f565b613288826142f4565b61329181614499565b61329b868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516132f89190614ba7565b60405180910390a35050505050505050505050565b60008060008060008060008061332289614084565b975097509750975097509750975097506021548910613376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336d90615887565b60405180910390fd5b60011515601f60009054906101000a900460ff161515141580156133e85750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b801561342757506133f7611603565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614155b80156134665750613436611603565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b15613608576134bd88600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516135f29190614ba7565b60405180910390a36136038a614678565b613d38565b60011515601f60009054906101000a900460ff16151514801561364657504260225461012c601d5461363a91906154c3565b61364491906154c3565b115b80156136a05750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b80156136df57506136af611603565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614155b801561371e57506136ee611603565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b156138c05761377588600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516138aa9190614ba7565b60405180910390a36138bb8a614678565b613d37565b6138c8611603565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614806139335750613904611603565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16145b15613acc5761398a88600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a1f88600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613abf9190614ba7565b60405180910390a3613d36565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613b8157602054613b3f8a613b318d61143a565b61413990919063ffffffff16565b1115613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906158f3565b60405180910390fd5b5b613bd388600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb48361414f565b613cbd826142f4565b613cc681614499565b613cd0868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613d2d9190614ba7565b60405180910390a35b5b5b5050505050505050505050565b600080600080600080600080613d5a89614084565b97509750975097509750975097509750613dbc89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5188600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee685600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7b87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fc78361414f565b613fd0826142f4565b613fd981614499565b613fe3868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516140409190614ba7565b60405180910390a35050505050505050505050565b601154601081905550601354601281905550601554601481905550601754601681905550601954601881905550565b60008060008060008060008061409861492e565b6140a18a6146d3565b85600001866020018760400188606001896080018581525085815250858152508581525085815250505050505060008060006140f88d85602001518660400151876060015188608001516140f3612072565b61477e565b92509250925082828286600001518760200151886040015189606001518a608001519b509b509b509b509b509b509b509b5050505050919395975091939597565b6000818361414791906154c3565b905092915050565b6000614159612072565b905060006141708284612a3790919063ffffffff16565b90506141c481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142ef576142ab83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006142fe612072565b905060006143158284612a3790919063ffffffff16565b905061436981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144945761445083600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006144a3612072565b905060006144ba8284612a3790919063ffffffff16565b905061450e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600b54612a4d90919063ffffffff16565b600b8190555061466e81600c5461413990919063ffffffff16565b600c819055505050565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806000806000806146e587614866565b905060006146f288614898565b905060006146ff896148ca565b9050600061470c8a6148fc565b90506000614723858c612a4d90919063ffffffff16565b90506147388482612a4d90919063ffffffff16565b905061475f826147518584612a4d90919063ffffffff16565b612a4d90919063ffffffff16565b9050808585858599509950995099509950505050505091939590929450565b600080600080614797858b612a3790919063ffffffff16565b905060006147ae868b612a3790919063ffffffff16565b905060006147c5878b612a3790919063ffffffff16565b905060006147dc888b612a3790919063ffffffff16565b905060006147f3898b612a3790919063ffffffff16565b9050600061480a8587612a4d90919063ffffffff16565b905061481f8482612a4d90919063ffffffff16565b90506148348382612a4d90919063ffffffff16565b90506148498282612a4d90919063ffffffff16565b905085818698509850985050505050505096509650969350505050565b600061489161271061488360105485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b60006148c36127106148b560125485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b60006148f56127106148e760145485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b600061492761271061491960165485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499757808201518184015260208101905061497c565b60008484015250505050565b6000601f19601f8301169050919050565b60006149bf8261495d565b6149c98185614968565b93506149d9818560208601614979565b6149e2816149a3565b840191505092915050565b60006020820190508181036000830152614a0781846149b4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a3f82614a14565b9050919050565b614a4f81614a34565b8114614a5a57600080fd5b50565b600081359050614a6c81614a46565b92915050565b6000819050919050565b614a8581614a72565b8114614a9057600080fd5b50565b600081359050614aa281614a7c565b92915050565b60008060408385031215614abf57614abe614a0f565b5b6000614acd85828601614a5d565b9250506020614ade85828601614a93565b9150509250929050565b60008115159050919050565b614afd81614ae8565b82525050565b6000602082019050614b186000830184614af4565b92915050565b6000819050919050565b6000614b43614b3e614b3984614a14565b614b1e565b614a14565b9050919050565b6000614b5582614b28565b9050919050565b6000614b6782614b4a565b9050919050565b614b7781614b5c565b82525050565b6000602082019050614b926000830184614b6e565b92915050565b614ba181614a72565b82525050565b6000602082019050614bbc6000830184614b98565b92915050565b600080600060608486031215614bdb57614bda614a0f565b5b6000614be986828701614a5d565b9350506020614bfa86828701614a5d565b9250506040614c0b86828701614a93565b9150509250925092565b600060208284031215614c2b57614c2a614a0f565b5b6000614c3984828501614a93565b91505092915050565b600060ff82169050919050565b614c5881614c42565b82525050565b6000602082019050614c736000830184614c4f565b92915050565b600060208284031215614c8f57614c8e614a0f565b5b6000614c9d84828501614a5d565b91505092915050565b614caf81614a34565b82525050565b6000602082019050614cca6000830184614ca6565b92915050565b6000614cdb82614a14565b9050919050565b614ceb81614cd0565b82525050565b6000602082019050614d066000830184614ce2565b92915050565b60008060408385031215614d2357614d22614a0f565b5b6000614d3185828601614a5d565b9250506020614d4285828601614a5d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d82602083614968565b9150614d8d82614d4c565b602082019050919050565b60006020820190508181036000830152614db181614d75565b9050919050565b7f6c61756e63686564000000000000000000000000000000000000000000000000600082015250565b6000614dee600883614968565b9150614df982614db8565b602082019050919050565b60006020820190508181036000830152614e1d81614de1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e6b57607f821691505b602082108103614e7e57614e7d614e24565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ee0602a83614968565b9150614eeb82614e84565b604082019050919050565b60006020820190508181036000830152614f0f81614ed3565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614f4c601b83614968565b9150614f5782614f16565b602082019050919050565b60006020820190508181036000830152614f7b81614f3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614feb82614a72565b9150614ff683614a72565b925082820390508181111561500e5761500d614fb1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061504e82614a72565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150805761507f614fb1565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150e7602683614968565b91506150f28261508b565b604082019050919050565b60006020820190508181036000830152615116816150da565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615179602483614968565b91506151848261511d565b604082019050919050565b600060208201905081810360008301526151a88161516c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061520b602283614968565b9150615216826151af565b604082019050919050565b6000602082019050818103600083015261523a816151fe565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061529d602583614968565b91506152a882615241565b604082019050919050565b600060208201905081810360008301526152cc81615290565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061532f602383614968565b915061533a826152d3565b604082019050919050565b6000602082019050818103600083015261535e81615322565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006153c1602983614968565b91506153cc82615365565b604082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b600061542d601683614968565b9150615438826153f7565b602082019050919050565b6000602082019050818103600083015261545c81615420565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061549d82614a72565b91506154a883614a72565b9250826154b8576154b7615463565b5b828204905092915050565b60006154ce82614a72565b91506154d983614a72565b92508282019050808211156154f1576154f0614fb1565b5b92915050565b600060608201905061550c6000830186614b98565b6155196020830185614b98565b6155266040830184614b98565b949350505050565b600061553982614a72565b915061554483614a72565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561557d5761557c614fb1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506155c681614a46565b92915050565b6000602082840312156155e2576155e1614a0f565b5b60006155f0848285016155b7565b91505092915050565b6000819050919050565b600061561e615619615614846155f9565b614b1e565b614a72565b9050919050565b61562e81615603565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566981614a34565b82525050565b600061567b8383615660565b60208301905092915050565b6000602082019050919050565b600061569f82615634565b6156a9818561563f565b93506156b483615650565b8060005b838110156156e55781516156cc888261566f565b97506156d783615687565b9250506001810190506156b8565b5085935050505092915050565b600060a0820190506157076000830188614b98565b6157146020830187615625565b81810360408301526157268186615694565b90506157356060830185614ca6565b6157426080830184614b98565b9695505050505050565b600060c0820190506157616000830189614ca6565b61576e6020830188614b98565b61577b6040830187615625565b6157886060830186615625565b6157956080830185614ca6565b6157a260a0830184614b98565b979650505050505050565b6000815190506157bc81614a7c565b92915050565b6000806000606084860312156157db576157da614a0f565b5b60006157e9868287016157ad565b93505060206157fa868287016157ad565b925050604061580b868287016157ad565b9150509250925092565b7f416d6f756e74206973206c6172676572207468616e206d6178207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000615871602583614968565b915061587c82615815565b604082019050919050565b600060208201905081810360008301526158a081615864565b9050919050565b7f5472616e736665722065786365656473206d61782077616c6c65742073697a65600082015250565b60006158dd602083614968565b91506158e8826158a7565b602082019050919050565b6000602082019050818103600083015261590c816158d0565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e9524f8842afb02c7618d60a72b4fc6f611a8807cd7389dcc95bbdcb7795daa464736f6c63430008100033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c806366e930b311610123578063a5ece941116100ab578063d14751851161006f578063d1475185146107c4578063dd62ed3e146107ef578063ea2f0b371461082c578063f2fde38b14610855578063fe575a871461087e57610225565b8063a5ece941146106ef578063a9059cbb1461071a578063ba0bba4014610757578063c9e3c0a31461076e578063d12a76881461079957610225565b806388f82020116100f257806388f82020146106065780638da5cb5b146106435780638f9a55c01461066e57806395d89b41146106995780639e0a7810146106c457610225565b806366e930b31461055e5780636bc87c3a1461058757806370a08231146105b2578063715018a6146105ef57610225565b80633685d419116101a65780634a74bb02116101755780634a74bb0214610477578063511b5f61146104a257806352390c02146104cd5780635342acb4146104f6578063638b1b141461053357610225565b80633685d419146103cf5780633b124fe7146103f8578063437823ec1461042357806349bd5a5e1461044c57610225565b806318160ddd116101ed57806318160ddd146102d457806322976e0d146102ff57806323b872dd1461032a5780632d83811914610367578063313ce567146103a457610225565b806301339c211461022a57806306fdde0314610241578063095ea7b31461026c5780631694505e146102a957610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108bb565b005b34801561024d57600080fd5b506102566109b1565b60405161026391906149ed565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190614aa8565b610a43565b6040516102a09190614b03565b60405180910390f35b3480156102b557600080fd5b506102be610a61565b6040516102cb9190614b7d565b60405180910390f35b3480156102e057600080fd5b506102e9610a87565b6040516102f69190614ba7565b60405180910390f35b34801561030b57600080fd5b50610314610a91565b6040516103219190614ba7565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190614bc2565b610a97565b60405161035e9190614b03565b60405180910390f35b34801561037357600080fd5b5061038e60048036038101906103899190614c15565b610b70565b60405161039b9190614ba7565b60405180910390f35b3480156103b057600080fd5b506103b9610bde565b6040516103c69190614c5e565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190614c79565b610bf5565b005b34801561040457600080fd5b5061040d610f2a565b60405161041a9190614ba7565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190614c79565b610f30565b005b34801561045857600080fd5b50610461611007565b60405161046e9190614cb5565b60405180910390f35b34801561048357600080fd5b5061048c61102d565b6040516104999190614b03565b60405180910390f35b3480156104ae57600080fd5b506104b7611040565b6040516104c49190614ba7565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614c79565b611046565b005b34801561050257600080fd5b5061051d60048036038101906105189190614c79565b6112e1565b60405161052a9190614b03565b60405180910390f35b34801561053f57600080fd5b50610548611337565b6040516105559190614cf1565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190614c79565b61135d565b005b34801561059357600080fd5b5061059c611434565b6040516105a99190614ba7565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190614c79565b61143a565b6040516105e69190614ba7565b60405180910390f35b3480156105fb57600080fd5b50610604611525565b005b34801561061257600080fd5b5061062d60048036038101906106289190614c79565b6115ad565b60405161063a9190614b03565b60405180910390f35b34801561064f57600080fd5b50610658611603565b6040516106659190614cb5565b60405180910390f35b34801561067a57600080fd5b5061068361162c565b6040516106909190614ba7565b60405180910390f35b3480156106a557600080fd5b506106ae611632565b6040516106bb91906149ed565b60405180910390f35b3480156106d057600080fd5b506106d96116c4565b6040516106e69190614b03565b60405180910390f35b3480156106fb57600080fd5b506107046116d7565b6040516107119190614cf1565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190614aa8565b6116fd565b60405161074e9190614b03565b60405180910390f35b34801561076357600080fd5b5061076c61171b565b005b34801561077a57600080fd5b50610783611806565b6040516107909190614ba7565b60405180910390f35b3480156107a557600080fd5b506107ae61180c565b6040516107bb9190614ba7565b60405180910390f35b3480156107d057600080fd5b506107d9611812565b6040516107e69190614ba7565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190614d0c565b611818565b6040516108239190614ba7565b60405180910390f35b34801561083857600080fd5b50610853600480360381019061084e9190614c79565b61189f565b005b34801561086157600080fd5b5061087c60048036038101906108779190614c79565b611976565b005b34801561088a57600080fd5b506108a560048036038101906108a09190614c79565b611a6d565b6040516108b29190614b03565b60405180910390f35b6108c3611ac3565b73ffffffffffffffffffffffffffffffffffffffff166108e1611603565b73ffffffffffffffffffffffffffffffffffffffff1614610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90614d98565b60405180910390fd5b60001515601f60009054906101000a900460ff1615151461098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490614e04565b60405180910390fd5b6001601f60006101000a81548160ff02191690831515021790555042601d81905550565b6060600d80546109c090614e53565b80601f01602080910402602001604051908101604052809291908181526020018280546109ec90614e53565b8015610a395780601f10610a0e57610100808354040283529160200191610a39565b820191906000526020600020905b815481529060010190602001808311610a1c57829003601f168201915b5050505050905090565b6000610a57610a50611ac3565b8484611acb565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60145481565b6000610aa4848484611c94565b610b6584610ab0611ac3565b610b608560405180606001604052806028815260200161591460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b16611ac3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461201d9092919063ffffffff16565b611acb565b600190509392505050565b6000600b54821115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90614ef6565b60405180910390fd5b6000610bc1612072565b9050610bd6818461209d90919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610bfd611ac3565b73ffffffffffffffffffffffffffffffffffffffff16610c1b611603565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890614d98565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf490614f62565b60405180910390fd5b60005b600780549050811015610f26578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d3857610d37614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f135760076001600780549050610d929190614fe0565b81548110610da357610da2614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610de257610de1614f82565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480610ed957610ed8615014565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f26565b8080610f1e90615043565b915050610d00565b5050565b60105481565b610f38611ac3565b73ffffffffffffffffffffffffffffffffffffffff16610f56611603565b73ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614d98565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60159054906101000a900460ff1681565b60215481565b61104e611ac3565b73ffffffffffffffffffffffffffffffffffffffff1661106c611603565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990614d98565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690614f62565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611223576111df600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b70565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611365611ac3565b73ffffffffffffffffffffffffffffffffffffffff16611383611603565b73ffffffffffffffffffffffffffffffffffffffff16146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090614d98565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114d557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611520565b61151d600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b70565b90505b919050565b61152d611ac3565b73ffffffffffffffffffffffffffffffffffffffff1661154b611603565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890614d98565b60405180910390fd5b6115ab60006120b3565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60205481565b6060600e805461164190614e53565b80601f016020809104026020016040519081016040528092919081815260200182805461166d90614e53565b80156116ba5780601f1061168f576101008083540402835291602001916116ba565b820191906000526020600020905b81548152906001019060200180831161169d57829003601f168201915b5050505050905090565b601f60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061171161170a611ac3565b8484611c94565b6001905092915050565b611723611ac3565b73ffffffffffffffffffffffffffffffffffffffff16611741611603565b73ffffffffffffffffffffffffffffffffffffffff1614611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e90614d98565b60405180910390fd5b6000601b60156101000a81548160ff02191690831515021790555060001960208190555060001960218190555060006014819055506000601681905550600060128190555060006018819055506117f46117ef611603565b610f30565b6118046117ff611603565b611046565b565b60185481565b601c5481565b60165481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118a7611ac3565b73ffffffffffffffffffffffffffffffffffffffff166118c5611603565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290614d98565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61197e611ac3565b73ffffffffffffffffffffffffffffffffffffffff1661199c611603565b73ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990614d98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a58906150fd565b60405180910390fd5b611a6a816120b3565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b319061518f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba090615221565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c879190614ba7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906152b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990615345565b60405180910390fd5b60008111611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906153d7565b60405180910390fd5b60011515600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514158015611e67575060011515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90615443565b60405180910390fd5b6000611eb13061143a565b90506000601c548210159050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611f185750805b8015611f315750601b60149054906101000a900460ff16155b8015611f495750601b60159054906101000a900460ff165b15611f5857611f5782612177565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611fff5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561200957600090505b61201586868684612473565b505050505050565b6000838311158290612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c91906149ed565b60405180910390fd5b5082840390509392505050565b600080600061207f612784565b91509150612096818361209d90919063ffffffff16565b9250505090565b600081836120ab9190615492565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601b60146101000a81548160ff02191690831515021790555060006121bd6012546121af6018548561209d90919063ffffffff16565b612a3790919063ffffffff16565b90506121d360028261209d90919063ffffffff16565b905060006121ea8284612a4d90919063ffffffff16565b905060004790506121fa82612a63565b6000612212600260125461209d90919063ffffffff16565b905060008160105460165460145461222a91906154c3565b61223491906154c3565b61223e91906154c3565b905060006122558447612a4d90919063ffffffff16565b905060006122808361227260185485612a3790919063ffffffff16565b61209d90919063ffffffff16565b90506122a98461229b6018548461209d90919063ffffffff16565b612a3790919063ffffffff16565b905060006122c08247612a4d90919063ffffffff16565b905060006122db601254601854612a4d90919063ffffffff16565b905060006123066014546122f8848661209d90919063ffffffff16565b612a3790919063ffffffff16565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612370573d6000803e3d6000fd5b50600061239a60165461238c858761209d90919063ffffffff16565b612a3790919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612404573d6000803e3d6000fd5b5061240f8b86612ca6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618b8587604051612442939291906154f7565b60405180910390a150505050505050505050506000601b60146101000a81548160ff02191690831515021790555050565b8061248157612480612d8b565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125245750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561253957612534848484612e17565b612770565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125dc5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125f1576125ec848484613092565b61276f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126955750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126aa576126a584848461330d565b61276e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561274c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127615761275c848484613d45565b61276d565b61276c84848461330d565b5b5b5b5b8061277e5761277d614055565b5b50505050565b6000806000600b5490506000600a54905060005b6007805490508110156129fa578260016000600784815481106127be576127bd614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806128ac575081600260006007848154811061284457612843614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156128c357600b54600a5494509450505050612a33565b61295360016000600784815481106128de576128dd614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612a4d90919063ffffffff16565b92506129e560026000600784815481106129705761296f614f82565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612a4d90919063ffffffff16565b915080806129f290615043565b915050612798565b50612a12600a54600b5461209d90919063ffffffff16565b821015612a2a57600b54600a54935093505050612a33565b81819350935050505b9091565b60008183612a45919061552e565b905092915050565b60008183612a5b9190614fe0565b905092915050565b6000600267ffffffffffffffff811115612a8057612a7f615588565b5b604051908082528060200260200182016040528015612aae5781602001602082028036833780820191505090505b5090503081600081518110612ac657612ac5614f82565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9191906155cc565b81600181518110612ba557612ba4614f82565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c0c30601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611acb565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c709594939291906156f2565b600060405180830381600087803b158015612c8a57600080fd5b505af1158015612c9e573d6000803e3d6000fd5b505050505050565b612cd330601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611acb565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612d1f611603565b426040518863ffffffff1660e01b8152600401612d419695949392919061574c565b60606040518083038185885af1158015612d5f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d8491906157c2565b5050505050565b6000601054148015612d9f57506000601254145b8015612dad57506000601454145b8015612dbb57506000601654145b612e1557601054601181905550601254601381905550601454601581905550601654601781905550601854601981905550600060108190555060006012819055506000601681905550600060148190555060006018819055505b565b600080600080600080600080612e2c89614084565b97509750975097509750975097509750612e8e89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f2388600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fb887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130048361414f565b61300d826142f4565b61301681614499565b613020868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161307d9190614ba7565b60405180910390a35050505050505050505050565b6000806000806000806000806130a789614084565b9750975097509750975097509750975061310988600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061319e85600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327f8361414f565b613288826142f4565b61329181614499565b61329b868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516132f89190614ba7565b60405180910390a35050505050505050505050565b60008060008060008060008061332289614084565b975097509750975097509750975097506021548910613376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336d90615887565b60405180910390fd5b60011515601f60009054906101000a900460ff161515141580156133e85750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b801561342757506133f7611603565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614155b80156134665750613436611603565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b15613608576134bd88600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061355287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516135f29190614ba7565b60405180910390a36136038a614678565b613d38565b60011515601f60009054906101000a900460ff16151514801561364657504260225461012c601d5461363a91906154c3565b61364491906154c3565b115b80156136a05750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b80156136df57506136af611603565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614155b801561371e57506136ee611603565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614155b156138c05761377588600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061380a87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516138aa9190614ba7565b60405180910390a36138bb8a614678565b613d37565b6138c8611603565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614806139335750613904611603565b73ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16145b15613acc5761398a88600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a1f88600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613abf9190614ba7565b60405180910390a3613d36565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614613b8157602054613b3f8a613b318d61143a565b61413990919063ffffffff16565b1115613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906158f3565b60405180910390fd5b5b613bd388600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6887600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb48361414f565b613cbd826142f4565b613cc681614499565b613cd0868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613d2d9190614ba7565b60405180910390a35b5b5b5050505050505050505050565b600080600080600080600080613d5a89614084565b97509750975097509750975097509750613dbc89600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5188600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a4d90919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee685600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7b87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fc78361414f565b613fd0826142f4565b613fd981614499565b613fe3868561463e565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516140409190614ba7565b60405180910390a35050505050505050505050565b601154601081905550601354601281905550601554601481905550601754601681905550601954601881905550565b60008060008060008060008061409861492e565b6140a18a6146d3565b85600001866020018760400188606001896080018581525085815250858152508581525085815250505050505060008060006140f88d85602001518660400151876060015188608001516140f3612072565b61477e565b92509250925082828286600001518760200151886040015189606001518a608001519b509b509b509b509b509b509b509b5050505050919395975091939597565b6000818361414791906154c3565b905092915050565b6000614159612072565b905060006141708284612a3790919063ffffffff16565b90506141c481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142ef576142ab83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006142fe612072565b905060006143158284612a3790919063ffffffff16565b905061436981600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144945761445083600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006144a3612072565b905060006144ba8284612a3790919063ffffffff16565b905061450e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461413990919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600b54612a4d90919063ffffffff16565b600b8190555061466e81600c5461413990919063ffffffff16565b600c819055505050565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000806000806000806146e587614866565b905060006146f288614898565b905060006146ff896148ca565b9050600061470c8a6148fc565b90506000614723858c612a4d90919063ffffffff16565b90506147388482612a4d90919063ffffffff16565b905061475f826147518584612a4d90919063ffffffff16565b612a4d90919063ffffffff16565b9050808585858599509950995099509950505050505091939590929450565b600080600080614797858b612a3790919063ffffffff16565b905060006147ae868b612a3790919063ffffffff16565b905060006147c5878b612a3790919063ffffffff16565b905060006147dc888b612a3790919063ffffffff16565b905060006147f3898b612a3790919063ffffffff16565b9050600061480a8587612a4d90919063ffffffff16565b905061481f8482612a4d90919063ffffffff16565b90506148348382612a4d90919063ffffffff16565b90506148498282612a4d90919063ffffffff16565b905085818698509850985050505050505096509650969350505050565b600061489161271061488360105485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b60006148c36127106148b560125485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b60006148f56127106148e760145485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b600061492761271061491960165485612a3790919063ffffffff16565b61209d90919063ffffffff16565b9050919050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499757808201518184015260208101905061497c565b60008484015250505050565b6000601f19601f8301169050919050565b60006149bf8261495d565b6149c98185614968565b93506149d9818560208601614979565b6149e2816149a3565b840191505092915050565b60006020820190508181036000830152614a0781846149b4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a3f82614a14565b9050919050565b614a4f81614a34565b8114614a5a57600080fd5b50565b600081359050614a6c81614a46565b92915050565b6000819050919050565b614a8581614a72565b8114614a9057600080fd5b50565b600081359050614aa281614a7c565b92915050565b60008060408385031215614abf57614abe614a0f565b5b6000614acd85828601614a5d565b9250506020614ade85828601614a93565b9150509250929050565b60008115159050919050565b614afd81614ae8565b82525050565b6000602082019050614b186000830184614af4565b92915050565b6000819050919050565b6000614b43614b3e614b3984614a14565b614b1e565b614a14565b9050919050565b6000614b5582614b28565b9050919050565b6000614b6782614b4a565b9050919050565b614b7781614b5c565b82525050565b6000602082019050614b926000830184614b6e565b92915050565b614ba181614a72565b82525050565b6000602082019050614bbc6000830184614b98565b92915050565b600080600060608486031215614bdb57614bda614a0f565b5b6000614be986828701614a5d565b9350506020614bfa86828701614a5d565b9250506040614c0b86828701614a93565b9150509250925092565b600060208284031215614c2b57614c2a614a0f565b5b6000614c3984828501614a93565b91505092915050565b600060ff82169050919050565b614c5881614c42565b82525050565b6000602082019050614c736000830184614c4f565b92915050565b600060208284031215614c8f57614c8e614a0f565b5b6000614c9d84828501614a5d565b91505092915050565b614caf81614a34565b82525050565b6000602082019050614cca6000830184614ca6565b92915050565b6000614cdb82614a14565b9050919050565b614ceb81614cd0565b82525050565b6000602082019050614d066000830184614ce2565b92915050565b60008060408385031215614d2357614d22614a0f565b5b6000614d3185828601614a5d565b9250506020614d4285828601614a5d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d82602083614968565b9150614d8d82614d4c565b602082019050919050565b60006020820190508181036000830152614db181614d75565b9050919050565b7f6c61756e63686564000000000000000000000000000000000000000000000000600082015250565b6000614dee600883614968565b9150614df982614db8565b602082019050919050565b60006020820190508181036000830152614e1d81614de1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e6b57607f821691505b602082108103614e7e57614e7d614e24565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ee0602a83614968565b9150614eeb82614e84565b604082019050919050565b60006020820190508181036000830152614f0f81614ed3565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614f4c601b83614968565b9150614f5782614f16565b602082019050919050565b60006020820190508181036000830152614f7b81614f3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614feb82614a72565b9150614ff683614a72565b925082820390508181111561500e5761500d614fb1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061504e82614a72565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150805761507f614fb1565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150e7602683614968565b91506150f28261508b565b604082019050919050565b60006020820190508181036000830152615116816150da565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615179602483614968565b91506151848261511d565b604082019050919050565b600060208201905081810360008301526151a88161516c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061520b602283614968565b9150615216826151af565b604082019050919050565b6000602082019050818103600083015261523a816151fe565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061529d602583614968565b91506152a882615241565b604082019050919050565b600060208201905081810360008301526152cc81615290565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061532f602383614968565b915061533a826152d3565b604082019050919050565b6000602082019050818103600083015261535e81615322565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006153c1602983614968565b91506153cc82615365565b604082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b600061542d601683614968565b9150615438826153f7565b602082019050919050565b6000602082019050818103600083015261545c81615420565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061549d82614a72565b91506154a883614a72565b9250826154b8576154b7615463565b5b828204905092915050565b60006154ce82614a72565b91506154d983614a72565b92508282019050808211156154f1576154f0614fb1565b5b92915050565b600060608201905061550c6000830186614b98565b6155196020830185614b98565b6155266040830184614b98565b949350505050565b600061553982614a72565b915061554483614a72565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561557d5761557c614fb1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506155c681614a46565b92915050565b6000602082840312156155e2576155e1614a0f565b5b60006155f0848285016155b7565b91505092915050565b6000819050919050565b600061561e615619615614846155f9565b614b1e565b614a72565b9050919050565b61562e81615603565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566981614a34565b82525050565b600061567b8383615660565b60208301905092915050565b6000602082019050919050565b600061569f82615634565b6156a9818561563f565b93506156b483615650565b8060005b838110156156e55781516156cc888261566f565b97506156d783615687565b9250506001810190506156b8565b5085935050505092915050565b600060a0820190506157076000830188614b98565b6157146020830187615625565b81810360408301526157268186615694565b90506157356060830185614ca6565b6157426080830184614b98565b9695505050505050565b600060c0820190506157616000830189614ca6565b61576e6020830188614b98565b61577b6040830187615625565b6157886060830186615625565b6157956080830185614ca6565b6157a260a0830184614b98565b979650505050505050565b6000815190506157bc81614a7c565b92915050565b6000806000606084860312156157db576157da614a0f565b5b60006157e9868287016157ad565b93505060206157fa868287016157ad565b925050604061580b868287016157ad565b9150509250925092565b7f416d6f756e74206973206c6172676572207468616e206d6178207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000615871602583614968565b915061587c82615815565b604082019050919050565b600060208201905081810360008301526158a081615864565b9050919050565b7f5472616e736665722065786365656473206d61782077616c6c65742073697a65600082015250565b60006158dd602083614968565b91506158e8826158a7565b602082019050919050565b6000602082019050818103600083015261590c816158d0565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220e9524f8842afb02c7618d60a72b4fc6f611a8807cd7389dcc95bbdcb7795daa464736f6c63430008100033
Deployed Bytecode Sourcemap
27148:25285:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33468:167;;;;;;;;;;;;;:::i;:::-;;30786:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31771:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28439:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31063:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28148:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31972:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33133:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30972:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33985:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27972:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35379:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28487:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28552:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28793:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33645:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42089:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27692:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32789:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28051:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31166:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5192:94;;;;;;;;;;;;;:::i;:::-;;32661:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4541:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28757:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30877:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28725:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27646:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31372:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52120:310;;;;;;;;;;;;;:::i;:::-;;28348:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28594:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28245:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31579:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35498:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5441:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32903:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33468:167;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33540:5:::1;33525:20;;:11;;;;;;;;;;;:20;;;33516:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;33583:4;33569:11;;:18;;;;;;;;;;;;;;;;;;33612:15;33598:11;:29;;;;33468:167::o:0;30786:83::-;30823:13;30856:5;30849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30786:83;:::o;31771:193::-;31873:4;31895:39;31904:12;:10;:12::i;:::-;31918:7;31927:6;31895:8;:39::i;:::-;31952:4;31945:11;;31771:193;;;;:::o;28439:41::-;;;;;;;;;;;;;:::o;31063:95::-;31116:7;31143;;31136:14;;31063:95;:::o;28148:28::-;;;;:::o;31972:446::-;32104:4;32121:36;32131:6;32139:9;32150:6;32121:9;:36::i;:::-;32168:220;32191:6;32212:12;:10;:12::i;:::-;32239:138;32295:6;32239:138;;;;;;;;;;;;;;;;;:11;:19;32251:6;32239:19;;;;;;;;;;;;;;;:33;32259:12;:10;:12::i;:::-;32239:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;32168:8;:220::i;:::-;32406:4;32399:11;;31972:446;;;;;:::o;33133:322::-;33227:7;33285;;33274;:18;;33252:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33373:19;33395:10;:8;:10::i;:::-;33373:32;;33423:24;33435:11;33423:7;:11;;:24;;;;:::i;:::-;33416:31;;;33133:322;;;:::o;30972:83::-;31013:5;31038:9;;;;;;;;;;;31031:16;;30972:83;:::o;33985:477::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34065:11:::1;:20;34077:7;34065:20;;;;;;;;;;;;;;;;;;;;;;;;;34057:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34133:9;34128:327;34152:9;:16;;;;34148:1;:20;34128:327;;;34210:7;34194:23;;:9;34204:1;34194:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;34190:254:::1;;34253:9;34282:1;34263:9;:16;;;;:20;;;;:::i;:::-;34253:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34238:9;34248:1;34238:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34322:1;34303:7;:16;34311:7;34303:16;;;;;;;;;;;;;;;:20;;;;34365:5;34342:11;:20;34354:7;34342:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34389:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34423:5;;34190:254;34170:3;;;;;:::i;:::-;;;;34128:327;;;;33985:477:::0;:::o;27972:22::-;;;;:::o;35379:111::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35478:4:::1;35448:18;:27;35467:7;35448:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35379:111:::0;:::o;28487:28::-;;;;;;;;;;;;;:::o;28552:33::-;;;;;;;;;;;;;:::o;28793:25::-;;;;:::o;33645:332::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33726:11:::1;:20;33738:7;33726:20;;;;;;;;;;;;;;;;;;;;;;;;;33725:21;33717:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33812:1;33793:7;:16;33801:7;33793:16;;;;;;;;;;;;;;;;:20;33789:109;;;33849:37;33869:7;:16;33877:7;33869:16;;;;;;;;;;;;;;;;33849:19;:37::i;:::-;33830:7;:16;33838:7;33830:16;;;;;;;;;;;;;;;:56;;;;33789:109;33931:4;33908:11;:20;33920:7;33908:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33946:9;33961:7;33946:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33645:332:::0;:::o;42089:124::-;42154:4;42178:18;:27;42197:7;42178:27;;;;;;;;;;;;;;;;;;;;;;;;;42171:34;;42089:124;;;:::o;27692:41::-;;;;;;;;;;;;;:::o;32789:106::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32882:5:::1;32859:16;:22;32876:4;32859:22;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32789:106:::0;:::o;28051:28::-;;;;:::o;31166:198::-;31232:7;31256:11;:20;31268:7;31256:20;;;;;;;;;;;;;;;;;;;;;;;;;31252:49;;;31285:7;:16;31293:7;31285:16;;;;;;;;;;;;;;;;31278:23;;;;31252:49;31319:37;31339:7;:16;31347:7;31339:16;;;;;;;;;;;;;;;;31319:19;:37::i;:::-;31312:44;;31166:198;;;;:::o;5192:94::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5257:21:::1;5275:1;5257:9;:21::i;:::-;5192:94::o:0;32661:120::-;32729:4;32753:11;:20;32765:7;32753:20;;;;;;;;;;;;;;;;;;;;;;;;;32746:27;;32661:120;;;:::o;4541:87::-;4587:7;4614:6;;;;;;;;;;;4607:13;;4541:87;:::o;28757:29::-;;;;:::o;30877:87::-;30916:13;30949:7;30942:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30877:87;:::o;28725:23::-;;;;;;;;;;;;;:::o;27646:39::-;;;;;;;;;;;;;:::o;31372:199::-;31477:4;31499:42;31509:12;:10;:12::i;:::-;31523:9;31534:6;31499:9;:42::i;:::-;31559:4;31552:11;;31372:199;;;;:::o;52120:310::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52188:5:::1;52166:21;;:27;;;;;;;;;;;;;;;;;;27780:1;27771:11;52204:14;:18;;;;27780:1;27771:11;52233:10;:14;;;;52272:1;52258:13;:15;;;;52300:1;52284:15;:17;;;;52326:1;52312:13;:15;;;;52350:1;52338:11;:13;;;;52362:23;52377:7;:5;:7::i;:::-;52362:14;:23::i;:::-;52396:26;52414:7;:5;:7::i;:::-;52396:17;:26::i;:::-;52120:310::o:0;28348:26::-;;;;:::o;28594:44::-;;;;:::o;28245:30::-;;;;:::o;31579:184::-;31696:7;31728:11;:18;31740:5;31728:18;;;;;;;;;;;;;;;:27;31747:7;31728:27;;;;;;;;;;;;;;;;31721:34;;31579:184;;;;:::o;35498:110::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35595:5:::1;35565:18;:27;35584:7;35565:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35498:110:::0;:::o;5441:192::-;4772:12;:10;:12::i;:::-;4761:23;;:7;:5;:7::i;:::-;:23;;;4753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5550:1:::1;5530:22;;:8;:22;;::::0;5522:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5606:19;5616:8;5606:9;:19::i;:::-;5441:192:::0;:::o;32903:120::-;32966:4;32990:16;:25;33007:7;32990:25;;;;;;;;;;;;;;;;;;;;;;;;;32983:32;;32903:120;;;:::o;3417:98::-;3470:7;3497:10;3490:17;;3417:98;:::o;42221:371::-;42365:1;42348:19;;:5;:19;;;42340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42446:1;42427:21;;:7;:21;;;42419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42530:6;42500:11;:18;42512:5;42500:18;;;;;;;;;;;;;;;:27;42519:7;42500:27;;;;;;;;;;;;;;;:36;;;;42568:7;42552:32;;42561:5;42552:32;;;42577:6;42552:32;;;;;;:::i;:::-;;;;;;;;42221:371;;;:::o;42600:1570::-;42738:1;42722:18;;:4;:18;;;42714:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42815:1;42801:16;;:2;:16;;;42793:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42885:1;42876:6;:10;42868:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42975:4;42951:28;;:16;:22;42968:4;42951:22;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;:58;;;;;43005:4;42983:26;;:16;:20;43000:2;42983:20;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;42951:58;42943:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;43331:28;43362:24;43380:4;43362:9;:24::i;:::-;43331:55;;43401:24;43465:29;;43428:20;:66;;43401:93;;43531:13;;;;;;;;;;;43523:21;;:4;:21;;;;:57;;;;;43561:19;43523:57;:91;;;;;43598:16;;;;;;;;;;;43597:17;43523:91;:129;;;;;43631:21;;;;;;;;;;;43523:129;43505:251;;;43708:36;43723:20;43708:14;:36::i;:::-;43505:251;43829:12;43844:4;43829:19;;43949:18;:24;43968:4;43949:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43977:18;:22;43996:2;43977:22;;;;;;;;;;;;;;;;;;;;;;;;;43949:50;43945:98;;;44026:5;44016:15;;43945:98;44121:41;44136:4;44142:2;44146:6;44154:7;44121:14;:41::i;:::-;42703:1467;;;42600:1570;;;:::o;10801:240::-;10921:7;10979:1;10974;:6;;10982:12;10966:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11021:1;11017;:5;11010:12;;10801:240;;;;;:::o;38731:164::-;38773:7;38794:15;38811;38830:19;:17;:19::i;:::-;38793:56;;;;38867:20;38879:7;38867;:11;;:20;;;;:::i;:::-;38860:27;;;;38731:164;:::o;9659:98::-;9717:7;9748:1;9744;:5;;;;:::i;:::-;9737:12;;9659:98;;;;:::o;5641:173::-;5697:16;5716:6;;;;;;;;;;;5697:25;;5742:8;5733:6;;:17;;;;;;;;;;;;;;;;;;5797:8;5766:40;;5787:8;5766:40;;;;;;;;;;;;5686:128;5641:173;:::o;44178:1917::-;29174:4;29155:16;;:23;;;;;;;;;;;;;;;;;;44314:29:::1;44346:56;44388:13;;44346:37;44371:11;;44346:20;:24;;:37;;;;:::i;:::-;:41;;:56;;;;:::i;:::-;44314:88;;44437:28;44463:1;44437:21;:25;;:28;;;;:::i;:::-;44413:52;;44478:20;44501:47;44526:21;44501:20;:24;;:47;;;;:::i;:::-;44478:70;;44826:22;44851:21;44826:46;;44917:30;44934:12;44917:16;:30::i;:::-;44961:12;44976:20;44994:1;44976:13;;:17;;:20;;;;:::i;:::-;44961:35;;45007:15;45070:4;45060:7;;45041:15;;45025:13;;:31;;;;:::i;:::-;:42;;;;:::i;:::-;:49;;;;:::i;:::-;45007:67;;45135:18;45156:41;45182:14;45156:21;:25;;:41;;;;:::i;:::-;45135:62;;45210:27;45240:40;45272:7;45240:27;45255:11;;45240:10;:14;;:27;;;;:::i;:::-;:31;;:40;;;;:::i;:::-;45210:70;;45313:46;45354:4;45313:36;45337:11;;45313:19;:23;;:36;;;;:::i;:::-;:40;;:46;;;;:::i;:::-;45291:68;;45372:26;45401:46;45427:19;45401:21;:25;;:46;;;;:::i;:::-;45372:75;;45531:13;45547:30;45563:13;;45547:11;;:15;;:30;;;;:::i;:::-;45531:46;;45590:24;45617:48;45651:13;;45617:29;45640:5;45617:18;:22;;:29;;;;:::i;:::-;:33;;:48;;;;:::i;:::-;45590:75;;45684:16;;;;;;;;;;;45676:34;;:52;45711:16;45676:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45741:26;45770:50;45804:15;;45770:29;45793:5;45770:18;:22;;:29;;;;:::i;:::-;:33;;:50;;;;:::i;:::-;45741:79;;45839:18;;;;;;;;;;;45831:36;;:56;45868:18;45831:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45937;45950:21;45973:19;45937:12;:56::i;:::-;46009:78;46024:21;46047:18;46067:19;46009:78;;;;;;;;:::i;:::-;;;;;;;;44252:1843;;;;;;;;;;;29220:5:::0;29201:16;;:24;;;;;;;;;;;;;;;;;;44178:1917;:::o;47298:836::-;47454:7;47449:28;;47463:14;:12;:14::i;:::-;47449:28;47492:11;:19;47504:6;47492:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;47516:11;:22;47528:9;47516:22;;;;;;;;;;;;;;;;;;;;;;;;;47515:23;47492:46;47488:597;;;47555:48;47577:6;47585:9;47596:6;47555:21;:48::i;:::-;47488:597;;;47626:11;:19;47638:6;47626:19;;;;;;;;;;;;;;;;;;;;;;;;;47625:20;:46;;;;;47649:11;:22;47661:9;47649:22;;;;;;;;;;;;;;;;;;;;;;;;;47625:46;47621:464;;;47688:46;47708:6;47716:9;47727:6;47688:19;:46::i;:::-;47621:464;;;47757:11;:19;47769:6;47757:19;;;;;;;;;;;;;;;;;;;;;;;;;47756:20;:47;;;;;47781:11;:22;47793:9;47781:22;;;;;;;;;;;;;;;;;;;;;;;;;47780:23;47756:47;47752:333;;;47820:44;47838:6;47846:9;47857:6;47820:17;:44::i;:::-;47752:333;;;47886:11;:19;47898:6;47886:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;47909:11;:22;47921:9;47909:22;;;;;;;;;;;;;;;;;;;;;;;;;47886:45;47882:203;;;47948:48;47970:6;47978:9;47989:6;47948:21;:48::i;:::-;47882:203;;;48029:44;48047:6;48055:9;48066:6;48029:17;:44::i;:::-;47882:203;47752:333;47621:464;47488:597;48102:7;48097:29;;48111:15;:13;:15::i;:::-;48097:29;47298:836;;;;:::o;38903:605::-;38954:7;38963;38983:15;39001:7;;38983:25;;39019:15;39037:7;;39019:25;;39060:9;39055:338;39079:9;:16;;;;39075:1;:20;39055:338;;;39163:7;39139;:21;39147:9;39157:1;39147:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39139:21;;;;;;;;;;;;;;;;:31;:83;;;;39215:7;39191;:21;39199:9;39209:1;39199:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39191:21;;;;;;;;;;;;;;;;:31;39139:83;39117:146;;;39246:7;;39255;;39238:25;;;;;;;;;39117:146;39288:34;39300:7;:21;39308:9;39318:1;39308:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39300:21;;;;;;;;;;;;;;;;39288:7;:11;;:34;;;;:::i;:::-;39278:44;;39347:34;39359:7;:21;39367:9;39377:1;39367:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39359:21;;;;;;;;;;;;;;;;39347:7;:11;;:34;;;;:::i;:::-;39337:44;;39097:3;;;;;:::i;:::-;;;;39055:338;;;;39417:20;39429:7;;39417;;:11;;:20;;;;:::i;:::-;39407:7;:30;39403:61;;;39447:7;;39456;;39439:25;;;;;;;;39403:61;39483:7;39492;39475:25;;;;;;38903:605;;;:::o;9260:98::-;9318:7;9349:1;9345;:5;;;;:::i;:::-;9338:12;;9260:98;;;;:::o;8903:::-;8961:7;8992:1;8988;:5;;;;:::i;:::-;8981:12;;8903:98;;;;:::o;46103:589::-;46229:21;46267:1;46253:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46229:40;;46298:4;46280;46285:1;46280:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46324:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46314:4;46319:1;46314:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46359:62;46376:4;46391:15;;;;;;;;;;;46409:11;46359:8;:62::i;:::-;46460:15;;;;;;;;;;;:66;;;46541:11;46567:1;46611:4;46638;46658:15;46460:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46158:534;46103:589;:::o;46704:513::-;46852:62;46869:4;46884:15;;;;;;;;;;;46902:11;46852:8;:62::i;:::-;46957:15;;;;;;;;;;;:31;;;46996:9;47029:4;47049:11;47075:1;47118;47161:7;:5;:7::i;:::-;47183:15;46957:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46704:513;;:::o;41293:511::-;41351:1;41340:7;;:12;:34;;;;;41373:1;41356:13;;:18;41340:34;:56;;;;;41395:1;41378:13;;:18;41340:56;:80;;;;;41419:1;41400:15;;:20;41340:80;41422:7;41336:93;41459:7;;41441:15;:25;;;;41501:13;;41477:21;:37;;;;41549:13;;41525:21;:37;;;;41599:15;;41573:23;:41;;;;41647:11;;41625:19;:33;;;;41681:1;41671:7;:11;;;;41709:1;41693:13;:17;;;;41739:1;41721:15;:19;;;;41767:1;41751:13;:17;;;;41793:1;41779:11;:15;;;;41293:511;:::o;51282:830::-;51433:15;51463:23;51501:12;51528:23;51566:12;51593:18;51626;51659:20;51693:19;51704:7;51693:10;:19::i;:::-;51418:294;;;;;;;;;;;;;;;;51741:28;51761:7;51741;:15;51749:6;51741:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51723:7;:15;51731:6;51723:15;;;;;;;;;;;;;;;:46;;;;51798:28;51818:7;51798;:15;51806:6;51798:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;51780:7;:15;51788:6;51780:15;;;;;;;;;;;;;;;:46;;;;51858:39;51881:15;51858:7;:18;51866:9;51858:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;51837:7;:18;51845:9;51837:18;;;;;;;;;;;;;;;:60;;;;51908:26;51923:10;51908:14;:26::i;:::-;51945:29;51963:10;51945:17;:29::i;:::-;51985:25;51997:12;51985:11;:25::i;:::-;52021:23;52033:4;52039;52021:11;:23::i;:::-;52077:9;52060:44;;52069:6;52060:44;;;52088:15;52060:44;;;;;;:::i;:::-;;;;;;;;51407:705;;;;;;;;51282:830;;;:::o;50432:842::-;50581:15;50611:23;50649:12;50676:23;50714:12;50741:18;50774;50807:20;50841:19;50852:7;50841:10;:19::i;:::-;50566:294;;;;;;;;;;;;;;;;50889:28;50909:7;50889;:15;50897:6;50889:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;50871:7;:15;50879:6;50871:15;;;;;;;;;;;;;;;:46;;;;50949:39;50972:15;50949:7;:18;50957:9;50949:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50928:7;:18;50936:9;50928:18;;;;;;;;;;;;;;;:60;;;;51020:39;51043:15;51020:7;:18;51028:9;51020:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50999:7;:18;51007:9;50999:18;;;;;;;;;;;;;;;:60;;;;51070:26;51085:10;51070:14;:26::i;:::-;51107:29;51125:10;51107:17;:29::i;:::-;51147:25;51159:12;51147:11;:25::i;:::-;51183:23;51195:4;51201;51183:11;:23::i;:::-;51239:9;51222:44;;51231:6;51222:44;;;51250:15;51222:44;;;;;;:::i;:::-;;;;;;;;50555:719;;;;;;;;50432:842;;;:::o;48142:2282::-;48289:15;48319:23;48357:12;48384:23;48422:12;48449:18;48482;48515:20;48549:19;48560:7;48549:10;:19::i;:::-;48274:294;;;;;;;;;;;;;;;;48603:10;;48594:7;:19;48585:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48684:4;48670:18;;:11;;;;;;;;;;;:18;;;;:47;;;;;48704:13;;;;;;;;;;;48692:25;;:9;:25;;;;48670:47;:66;;;;;48729:7;:5;:7::i;:::-;48721:15;;:6;:15;;;;48670:66;:88;;;;;48751:7;:5;:7::i;:::-;48740:18;;:9;:18;;;;48670:88;48666:1719;;;48803:28;48823:7;48803;:15;48811:6;48803:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48785:7;:15;48793:6;48785:15;;;;;;;;;;;;;;;:46;;;;48867:39;48890:15;48867:7;:18;48875:9;48867:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48846:7;:18;48854:9;48846:18;;;;;;;;;;;;;;;:60;;;;48943:9;48926:44;;48935:6;48926:44;;;48954:15;48926:44;;;;;;:::i;:::-;;;;;;;;49005:24;49019:9;49005:13;:24::i;:::-;48666:1719;;;49075:4;49062:17;;:11;;;;;;;;;;;:17;;;:72;;;;;49119:15;49109:7;;49097:9;49083:11;;:23;;;;:::i;:::-;:33;;;;:::i;:::-;:51;49062:72;:101;;;;;49150:13;;;;;;;;;;;49138:25;;:9;:25;;;;49062:101;:120;;;;;49175:7;:5;:7::i;:::-;49167:15;;:6;:15;;;;49062:120;:142;;;;;49197:7;:5;:7::i;:::-;49186:18;;:9;:18;;;;49062:142;49058:1327;;;49249:28;49269:7;49249;:15;49257:6;49249:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49231:7;:15;49239:6;49231:15;;;;;;;;;;;;;;;:46;;;;49313:39;49336:15;49313:7;:18;49321:9;49313:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49292:7;:18;49300:9;49292:18;;;;;;;;;;;;;;;:60;;;;49389:9;49372:44;;49381:6;49372:44;;;49400:15;49372:44;;;;;;:::i;:::-;;;;;;;;49450:24;49464:9;49450:13;:24::i;:::-;49058:1327;;;49513:7;:5;:7::i;:::-;49505:15;;:6;:15;;;:37;;;;49535:7;:5;:7::i;:::-;49524:18;;:9;:18;;;49505:37;49501:884;;;49590:31;49613:7;49590;:18;49598:9;49590:18;;;;;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;49569:7;:18;49577:9;49569:18;;;;;;;;;;;;;;;:52;;;;49654:28;49674:7;49654;:15;49662:6;49654:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49636:7;:15;49644:6;49636:15;;;;;;;;;;;;;;;:46;;;;49724:9;49707:44;;49716:6;49707:44;;;49735:15;49707:44;;;;;;:::i;:::-;;;;;;;;49501:884;;;49845:13;;;;;;;;;;;49832:26;;:9;:26;;;49828:179;;49939:14;;49901:33;49926:7;49901:20;49911:9;49901;:20::i;:::-;:24;;:33;;;;:::i;:::-;49900:53;;49892:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;49828:179;50041:28;50061:7;50041;:15;50049:6;50041:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;50023:7;:15;50031:6;50023:15;;;;;;;;;;;;;;;:46;;;;50105:39;50128:15;50105:7;:18;50113:9;50105:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50084:7;:18;50092:9;50084:18;;;;;;;;;;;;;;;:60;;;;50159:26;50174:10;50159:14;:26::i;:::-;50200:29;50218:10;50200:17;:29::i;:::-;50244:25;50256:12;50244:11;:25::i;:::-;50284:23;50296:4;50302;50284:11;:23::i;:::-;50344:9;50327:44;;50336:6;50327:44;;;50355:15;50327:44;;;;;;:::i;:::-;;;;;;;;49501:884;49058:1327;48666:1719;48263:2161;;;;;;;;48142:2282;;;:::o;34470:901::-;34621:15;34651:23;34689:12;34716:23;34754:12;34781:18;34814;34847:20;34881:19;34892:7;34881:10;:19::i;:::-;34606:294;;;;;;;;;;;;;;;;34929:28;34949:7;34929;:15;34937:6;34929:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34911:7;:15;34919:6;34911:15;;;;;;;;;;;;;;;:46;;;;34986:28;35006:7;34986;:15;34994:6;34986:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34968:7;:15;34976:6;34968:15;;;;;;;;;;;;;;;:46;;;;35046:39;35069:15;35046:7;:18;35054:9;35046:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35025:7;:18;35033:9;35025:18;;;;;;;;;;;;;;;:60;;;;35117:39;35140:15;35117:7;:18;35125:9;35117:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35096:7;:18;35104:9;35096:18;;;;;;;;;;;;;;;:60;;;;35167:26;35182:10;35167:14;:26::i;:::-;35204:29;35222:10;35204:17;:29::i;:::-;35244:25;35256:12;35244:11;:25::i;:::-;35280:23;35292:4;35298;35280:11;:23::i;:::-;35336:9;35319:44;;35328:6;35319:44;;;35347:15;35319:44;;;;;;:::i;:::-;;;;;;;;34595:776;;;;;;;;34470:901;;;:::o;41812:269::-;41866:15;;41856:7;:25;;;;41908:21;;41892:13;:37;;;;41956:21;;41940:13;:37;;;;42006:23;;41988:15;:41;;;;42054:19;;42040:11;:33;;;;41812:269::o;36050:1029::-;36150:7;36172;36194;36216;36238;36260;36282;36304;36341:23;;:::i;:::-;36545:20;36557:7;36545:11;:20::i;:::-;36395:4;:20;;36430:4;:9;;36454:4;:15;;36484:4;:15;;36514:4;:17;;36380:185;;;;;;;;;;;;;;;;;;;;;;;;;36577:15;36594:23;36619:12;36635:185;36661:7;36683:4;:9;;;36707:4;:15;;;36737:4;:15;;;36767:4;:17;;;36799:10;:8;:10::i;:::-;36635:11;:185::i;:::-;36576:244;;;;;;36853:7;36875:15;36905:4;36924;:20;;;36959:4;:9;;;36983:4;:15;;;37013:4;:15;;;37043:4;:17;;;36831:240;;;;;;;;;;;;;;;;;;;;36050:1029;;;;;;;;;:::o;8522:98::-;8580:7;8611:1;8607;:5;;;;:::i;:::-;8600:12;;8522:98;;;;:::o;39516:355::-;39579:19;39601:10;:8;:10::i;:::-;39579:32;;39622:18;39643:27;39658:11;39643:10;:14;;:27;;;;:::i;:::-;39622:48;;39706:38;39733:10;39706:7;:22;39722:4;39706:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39681:7;:22;39697:4;39681:22;;;;;;;;;;;;;;;:63;;;;39759:11;:26;39779:4;39759:26;;;;;;;;;;;;;;;;;;;;;;;;;39755:108;;;39825:38;39852:10;39825:7;:22;39841:4;39825:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39800:7;:22;39816:4;39800:22;;;;;;;;;;;;;;;:63;;;;39755:108;39568:303;;39516:355;:::o;39879:361::-;39947:19;39969:10;:8;:10::i;:::-;39947:32;;39990:18;40011:27;40026:11;40011:10;:14;;:27;;;;:::i;:::-;39990:48;;40074:38;40101:10;40074:7;:22;40090:4;40074:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40049:7;:22;40065:4;40049:22;;;;;;;;;;;;;;;:63;;;;40127:11;:26;40147:4;40127:26;;;;;;;;;;;;;;;;;;;;;;;;;40123:108;;;40193:38;40220:10;40193:7;:22;40209:4;40193:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40168:7;:22;40184:4;40168:22;;;;;;;;;;;;;;;:63;;;;40123:108;39934:306;;39879:361;:::o;40248:335::-;40306:19;40328:10;:8;:10::i;:::-;40306:32;;40349:12;40364:25;40377:11;40364:8;:12;;:25;;;;:::i;:::-;40349:40;;40425:32;40452:4;40425:7;:22;40441:4;40425:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;40400:7;:22;40416:4;40400:22;;;;;;;;;;;;;;;:57;;;;40472:11;:26;40492:4;40472:26;;;;;;;;;;;;;;;;;;;;;;;;;40468:106;;;40538:36;40565:8;40538:7;:22;40554:4;40538:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;40513:7;:22;40529:4;40513:22;;;;;;;;;;;;;;;:61;;;;40468:106;40295:288;;40248:335;:::o;35709:147::-;35787:17;35799:4;35787:7;;:11;;:17;;;;:::i;:::-;35777:7;:27;;;;35828:20;35843:4;35828:10;;:14;;:20;;;;:::i;:::-;35815:10;:33;;;;35709:147;;:::o;33031:91::-;33110:4;33087:16;:22;33104:4;33087:22;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33031:91;:::o;37087:748::-;37188:7;37210;37232;37254;37276;37311:12;37326:24;37342:7;37326:15;:24::i;:::-;37311:39;;37361:18;37382:30;37404:7;37382:21;:30::i;:::-;37361:51;;37423:21;37447:30;37469:7;37447:21;:30::i;:::-;37423:54;;37488:23;37514:32;37538:7;37514:23;:32::i;:::-;37488:58;;37557:23;37583:17;37595:4;37583:7;:11;;:17;;;;:::i;:::-;37557:43;;37627:31;37647:10;37627:15;:19;;:31;;;;:::i;:::-;37611:47;;37685:55;37724:15;37685:34;37705:13;37685:15;:19;;:34;;;;:::i;:::-;:38;;:55;;;;:::i;:::-;37669:71;;37761:15;37778:4;37784:10;37796:13;37811:15;37753:74;;;;;;;;;;;;;;;37087:748;;;;;;;:::o;37843:880::-;38102:7;38124;38146;38181:15;38199:24;38211:11;38199:7;:11;;:24;;;;:::i;:::-;38181:42;;38234:12;38249:21;38258:11;38249:4;:8;;:21;;;;:::i;:::-;38234:36;;38281:18;38302:27;38317:11;38302:10;:14;;:27;;;;:::i;:::-;38281:48;;38340:18;38361:27;38376:11;38361:10;:14;;:27;;;;:::i;:::-;38340:48;;38399:12;38414:29;38431:11;38414:12;:16;;:29;;;;:::i;:::-;38399:44;;38454:23;38480:17;38492:4;38480:7;:11;;:17;;;;:::i;:::-;38454:43;;38524:31;38544:10;38524:15;:19;;:31;;;;:::i;:::-;38508:47;;38582:31;38602:10;38582:15;:19;;:31;;;;:::i;:::-;38566:47;;38640:25;38660:4;38640:15;:19;;:25;;;;:::i;:::-;38624:41;;38684:7;38693:15;38710:4;38676:39;;;;;;;;;;;;37843:880;;;;;;;;;;:::o;40599:130::-;40663:7;40690:31;40715:5;40690:20;40702:7;;40690;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;40683:38;;40599:130;;;:::o;40737:174::-;40834:7;40866:37;40897:5;40866:26;40878:13;;40866:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;40859:44;;40737:174;;;:::o;40919:177::-;41016:7;41051:37;41082:5;41051:26;41063:13;;41051:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;41044:44;;40919:177;;;:::o;41105:178::-;41204:7;41236:39;41269:5;41236:28;41248:15;;41236:7;:11;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;41229:46;;41105:178;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:329::-;5460:6;5509:2;5497:9;5488:7;5484:23;5480:32;5477:119;;;5515:79;;:::i;:::-;5477:119;5635:1;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5606:117;5401:329;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:329::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:104::-;6898:7;6927:24;6945:5;6927:24;:::i;:::-;6916:35;;6853:104;;;:::o;6963:142::-;7066:32;7092:5;7066:32;:::i;:::-;7061:3;7054:45;6963:142;;:::o;7111:254::-;7220:4;7258:2;7247:9;7243:18;7235:26;;7271:87;7355:1;7344:9;7340:17;7331:6;7271:87;:::i;:::-;7111:254;;;;:::o;7371:474::-;7439:6;7447;7496:2;7484:9;7475:7;7471:23;7467:32;7464:119;;;7502:79;;:::i;:::-;7464:119;7622:1;7647:53;7692:7;7683:6;7672:9;7668:22;7647:53;:::i;:::-;7637:63;;7593:117;7749:2;7775:53;7820:7;7811:6;7800:9;7796:22;7775:53;:::i;:::-;7765:63;;7720:118;7371:474;;;;;:::o;7851:182::-;7991:34;7987:1;7979:6;7975:14;7968:58;7851:182;:::o;8039:366::-;8181:3;8202:67;8266:2;8261:3;8202:67;:::i;:::-;8195:74;;8278:93;8367:3;8278:93;:::i;:::-;8396:2;8391:3;8387:12;8380:19;;8039:366;;;:::o;8411:419::-;8577:4;8615:2;8604:9;8600:18;8592:26;;8664:9;8658:4;8654:20;8650:1;8639:9;8635:17;8628:47;8692:131;8818:4;8692:131;:::i;:::-;8684:139;;8411:419;;;:::o;8836:158::-;8976:10;8972:1;8964:6;8960:14;8953:34;8836:158;:::o;9000:365::-;9142:3;9163:66;9227:1;9222:3;9163:66;:::i;:::-;9156:73;;9238:93;9327:3;9238:93;:::i;:::-;9356:2;9351:3;9347:12;9340:19;;9000:365;;;:::o;9371:419::-;9537:4;9575:2;9564:9;9560:18;9552:26;;9624:9;9618:4;9614:20;9610:1;9599:9;9595:17;9588:47;9652:131;9778:4;9652:131;:::i;:::-;9644:139;;9371:419;;;:::o;9796:180::-;9844:77;9841:1;9834:88;9941:4;9938:1;9931:15;9965:4;9962:1;9955:15;9982:320;10026:6;10063:1;10057:4;10053:12;10043:22;;10110:1;10104:4;10100:12;10131:18;10121:81;;10187:4;10179:6;10175:17;10165:27;;10121:81;10249:2;10241:6;10238:14;10218:18;10215:38;10212:84;;10268:18;;:::i;:::-;10212:84;10033:269;9982:320;;;:::o;10308:229::-;10448:34;10444:1;10436:6;10432:14;10425:58;10517:12;10512:2;10504:6;10500:15;10493:37;10308:229;:::o;10543:366::-;10685:3;10706:67;10770:2;10765:3;10706:67;:::i;:::-;10699:74;;10782:93;10871:3;10782:93;:::i;:::-;10900:2;10895:3;10891:12;10884:19;;10543:366;;;:::o;10915:419::-;11081:4;11119:2;11108:9;11104:18;11096:26;;11168:9;11162:4;11158:20;11154:1;11143:9;11139:17;11132:47;11196:131;11322:4;11196:131;:::i;:::-;11188:139;;10915:419;;;:::o;11340:177::-;11480:29;11476:1;11468:6;11464:14;11457:53;11340:177;:::o;11523:366::-;11665:3;11686:67;11750:2;11745:3;11686:67;:::i;:::-;11679:74;;11762:93;11851:3;11762:93;:::i;:::-;11880:2;11875:3;11871:12;11864:19;;11523:366;;;:::o;11895:419::-;12061:4;12099:2;12088:9;12084:18;12076:26;;12148:9;12142:4;12138:20;12134:1;12123:9;12119:17;12112:47;12176:131;12302:4;12176:131;:::i;:::-;12168:139;;11895:419;;;:::o;12320:180::-;12368:77;12365:1;12358:88;12465:4;12462:1;12455:15;12489:4;12486:1;12479:15;12506:180;12554:77;12551:1;12544:88;12651:4;12648:1;12641:15;12675:4;12672:1;12665:15;12692:194;12732:4;12752:20;12770:1;12752:20;:::i;:::-;12747:25;;12786:20;12804:1;12786:20;:::i;:::-;12781:25;;12830:1;12827;12823:9;12815:17;;12854:1;12848:4;12845:11;12842:37;;;12859:18;;:::i;:::-;12842:37;12692:194;;;;:::o;12892:180::-;12940:77;12937:1;12930:88;13037:4;13034:1;13027:15;13061:4;13058:1;13051:15;13078:233;13117:3;13140:24;13158:5;13140:24;:::i;:::-;13131:33;;13186:66;13179:5;13176:77;13173:103;;13256:18;;:::i;:::-;13173:103;13303:1;13296:5;13292:13;13285:20;;13078:233;;;:::o;13317:225::-;13457:34;13453:1;13445:6;13441:14;13434:58;13526:8;13521:2;13513:6;13509:15;13502:33;13317:225;:::o;13548:366::-;13690:3;13711:67;13775:2;13770:3;13711:67;:::i;:::-;13704:74;;13787:93;13876:3;13787:93;:::i;:::-;13905:2;13900:3;13896:12;13889:19;;13548:366;;;:::o;13920:419::-;14086:4;14124:2;14113:9;14109:18;14101:26;;14173:9;14167:4;14163:20;14159:1;14148:9;14144:17;14137:47;14201:131;14327:4;14201:131;:::i;:::-;14193:139;;13920:419;;;:::o;14345:223::-;14485:34;14481:1;14473:6;14469:14;14462:58;14554:6;14549:2;14541:6;14537:15;14530:31;14345:223;:::o;14574:366::-;14716:3;14737:67;14801:2;14796:3;14737:67;:::i;:::-;14730:74;;14813:93;14902:3;14813:93;:::i;:::-;14931:2;14926:3;14922:12;14915:19;;14574:366;;;:::o;14946:419::-;15112:4;15150:2;15139:9;15135:18;15127:26;;15199:9;15193:4;15189:20;15185:1;15174:9;15170:17;15163:47;15227:131;15353:4;15227:131;:::i;:::-;15219:139;;14946:419;;;:::o;15371:221::-;15511:34;15507:1;15499:6;15495:14;15488:58;15580:4;15575:2;15567:6;15563:15;15556:29;15371:221;:::o;15598:366::-;15740:3;15761:67;15825:2;15820:3;15761:67;:::i;:::-;15754:74;;15837:93;15926:3;15837:93;:::i;:::-;15955:2;15950:3;15946:12;15939:19;;15598:366;;;:::o;15970:419::-;16136:4;16174:2;16163:9;16159:18;16151:26;;16223:9;16217:4;16213:20;16209:1;16198:9;16194:17;16187:47;16251:131;16377:4;16251:131;:::i;:::-;16243:139;;15970:419;;;:::o;16395:224::-;16535:34;16531:1;16523:6;16519:14;16512:58;16604:7;16599:2;16591:6;16587:15;16580:32;16395:224;:::o;16625:366::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:419::-;17163:4;17201:2;17190:9;17186:18;17178:26;;17250:9;17244:4;17240:20;17236:1;17225:9;17221:17;17214:47;17278:131;17404:4;17278:131;:::i;:::-;17270:139;;16997:419;;;:::o;17422:222::-;17562:34;17558:1;17550:6;17546:14;17539:58;17631:5;17626:2;17618:6;17614:15;17607:30;17422:222;:::o;17650:366::-;17792:3;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17889:93;17978:3;17889:93;:::i;:::-;18007:2;18002:3;17998:12;17991:19;;17650:366;;;:::o;18022:419::-;18188:4;18226:2;18215:9;18211:18;18203:26;;18275:9;18269:4;18265:20;18261:1;18250:9;18246:17;18239:47;18303:131;18429:4;18303:131;:::i;:::-;18295:139;;18022:419;;;:::o;18447:228::-;18587:34;18583:1;18575:6;18571:14;18564:58;18656:11;18651:2;18643:6;18639:15;18632:36;18447:228;:::o;18681:366::-;18823:3;18844:67;18908:2;18903:3;18844:67;:::i;:::-;18837:74;;18920:93;19009:3;18920:93;:::i;:::-;19038:2;19033:3;19029:12;19022:19;;18681:366;;;:::o;19053:419::-;19219:4;19257:2;19246:9;19242:18;19234:26;;19306:9;19300:4;19296:20;19292:1;19281:9;19277:17;19270:47;19334:131;19460:4;19334:131;:::i;:::-;19326:139;;19053:419;;;:::o;19478:172::-;19618:24;19614:1;19606:6;19602:14;19595:48;19478:172;:::o;19656:366::-;19798:3;19819:67;19883:2;19878:3;19819:67;:::i;:::-;19812:74;;19895:93;19984:3;19895:93;:::i;:::-;20013:2;20008:3;20004:12;19997:19;;19656:366;;;:::o;20028:419::-;20194:4;20232:2;20221:9;20217:18;20209:26;;20281:9;20275:4;20271:20;20267:1;20256:9;20252:17;20245:47;20309:131;20435:4;20309:131;:::i;:::-;20301:139;;20028:419;;;:::o;20453:180::-;20501:77;20498:1;20491:88;20598:4;20595:1;20588:15;20622:4;20619:1;20612:15;20639:185;20679:1;20696:20;20714:1;20696:20;:::i;:::-;20691:25;;20730:20;20748:1;20730:20;:::i;:::-;20725:25;;20769:1;20759:35;;20774:18;;:::i;:::-;20759:35;20816:1;20813;20809:9;20804:14;;20639:185;;;;:::o;20830:191::-;20870:3;20889:20;20907:1;20889:20;:::i;:::-;20884:25;;20923:20;20941:1;20923:20;:::i;:::-;20918:25;;20966:1;20963;20959:9;20952:16;;20987:3;20984:1;20981:10;20978:36;;;20994:18;;:::i;:::-;20978:36;20830:191;;;;:::o;21027:442::-;21176:4;21214:2;21203:9;21199:18;21191:26;;21227:71;21295:1;21284:9;21280:17;21271:6;21227:71;:::i;:::-;21308:72;21376:2;21365:9;21361:18;21352:6;21308:72;:::i;:::-;21390;21458:2;21447:9;21443:18;21434:6;21390:72;:::i;:::-;21027:442;;;;;;:::o;21475:348::-;21515:7;21538:20;21556:1;21538:20;:::i;:::-;21533:25;;21572:20;21590:1;21572:20;:::i;:::-;21567:25;;21760:1;21692:66;21688:74;21685:1;21682:81;21677:1;21670:9;21663:17;21659:105;21656:131;;;21767:18;;:::i;:::-;21656:131;21815:1;21812;21808:9;21797:20;;21475:348;;;;:::o;21829:180::-;21877:77;21874:1;21867:88;21974:4;21971:1;21964:15;21998:4;21995:1;21988:15;22015:143;22072:5;22103:6;22097:13;22088:22;;22119:33;22146:5;22119:33;:::i;:::-;22015:143;;;;:::o;22164:351::-;22234:6;22283:2;22271:9;22262:7;22258:23;22254:32;22251:119;;;22289:79;;:::i;:::-;22251:119;22409:1;22434:64;22490:7;22481:6;22470:9;22466:22;22434:64;:::i;:::-;22424:74;;22380:128;22164:351;;;;:::o;22521:85::-;22566:7;22595:5;22584:16;;22521:85;;;:::o;22612:158::-;22670:9;22703:61;22721:42;22730:32;22756:5;22730:32;:::i;:::-;22721:42;:::i;:::-;22703:61;:::i;:::-;22690:74;;22612:158;;;:::o;22776:147::-;22871:45;22910:5;22871:45;:::i;:::-;22866:3;22859:58;22776:147;;:::o;22929:114::-;22996:6;23030:5;23024:12;23014:22;;22929:114;;;:::o;23049:184::-;23148:11;23182:6;23177:3;23170:19;23222:4;23217:3;23213:14;23198:29;;23049:184;;;;:::o;23239:132::-;23306:4;23329:3;23321:11;;23359:4;23354:3;23350:14;23342:22;;23239:132;;;:::o;23377:108::-;23454:24;23472:5;23454:24;:::i;:::-;23449:3;23442:37;23377:108;;:::o;23491:179::-;23560:10;23581:46;23623:3;23615:6;23581:46;:::i;:::-;23659:4;23654:3;23650:14;23636:28;;23491:179;;;;:::o;23676:113::-;23746:4;23778;23773:3;23769:14;23761:22;;23676:113;;;:::o;23825:732::-;23944:3;23973:54;24021:5;23973:54;:::i;:::-;24043:86;24122:6;24117:3;24043:86;:::i;:::-;24036:93;;24153:56;24203:5;24153:56;:::i;:::-;24232:7;24263:1;24248:284;24273:6;24270:1;24267:13;24248:284;;;24349:6;24343:13;24376:63;24435:3;24420:13;24376:63;:::i;:::-;24369:70;;24462:60;24515:6;24462:60;:::i;:::-;24452:70;;24308:224;24295:1;24292;24288:9;24283:14;;24248:284;;;24252:14;24548:3;24541:10;;23949:608;;;23825:732;;;;:::o;24563:831::-;24826:4;24864:3;24853:9;24849:19;24841:27;;24878:71;24946:1;24935:9;24931:17;24922:6;24878:71;:::i;:::-;24959:80;25035:2;25024:9;25020:18;25011:6;24959:80;:::i;:::-;25086:9;25080:4;25076:20;25071:2;25060:9;25056:18;25049:48;25114:108;25217:4;25208:6;25114:108;:::i;:::-;25106:116;;25232:72;25300:2;25289:9;25285:18;25276:6;25232:72;:::i;:::-;25314:73;25382:3;25371:9;25367:19;25358:6;25314:73;:::i;:::-;24563:831;;;;;;;;:::o;25400:807::-;25649:4;25687:3;25676:9;25672:19;25664:27;;25701:71;25769:1;25758:9;25754:17;25745:6;25701:71;:::i;:::-;25782:72;25850:2;25839:9;25835:18;25826:6;25782:72;:::i;:::-;25864:80;25940:2;25929:9;25925:18;25916:6;25864:80;:::i;:::-;25954;26030:2;26019:9;26015:18;26006:6;25954:80;:::i;:::-;26044:73;26112:3;26101:9;26097:19;26088:6;26044:73;:::i;:::-;26127;26195:3;26184:9;26180:19;26171:6;26127:73;:::i;:::-;25400:807;;;;;;;;;:::o;26213:143::-;26270:5;26301:6;26295:13;26286:22;;26317:33;26344:5;26317:33;:::i;:::-;26213:143;;;;:::o;26362:663::-;26450:6;26458;26466;26515:2;26503:9;26494:7;26490:23;26486:32;26483:119;;;26521:79;;:::i;:::-;26483:119;26641:1;26666:64;26722:7;26713:6;26702:9;26698:22;26666:64;:::i;:::-;26656:74;;26612:128;26779:2;26805:64;26861:7;26852:6;26841:9;26837:22;26805:64;:::i;:::-;26795:74;;26750:129;26918:2;26944:64;27000:7;26991:6;26980:9;26976:22;26944:64;:::i;:::-;26934:74;;26889:129;26362:663;;;;;:::o;27031:224::-;27171:34;27167:1;27159:6;27155:14;27148:58;27240:7;27235:2;27227:6;27223:15;27216:32;27031:224;:::o;27261:366::-;27403:3;27424:67;27488:2;27483:3;27424:67;:::i;:::-;27417:74;;27500:93;27589:3;27500:93;:::i;:::-;27618:2;27613:3;27609:12;27602:19;;27261:366;;;:::o;27633:419::-;27799:4;27837:2;27826:9;27822:18;27814:26;;27886:9;27880:4;27876:20;27872:1;27861:9;27857:17;27850:47;27914:131;28040:4;27914:131;:::i;:::-;27906:139;;27633:419;;;:::o;28058:182::-;28198:34;28194:1;28186:6;28182:14;28175:58;28058:182;:::o;28246:366::-;28388:3;28409:67;28473:2;28468:3;28409:67;:::i;:::-;28402:74;;28485:93;28574:3;28485:93;:::i;:::-;28603:2;28598:3;28594:12;28587:19;;28246:366;;;:::o;28618:419::-;28784:4;28822:2;28811:9;28807:18;28799:26;;28871:9;28865:4;28861:20;28857:1;28846:9;28842:17;28835:47;28899:131;29025:4;28899:131;:::i;:::-;28891:139;;28618:419;;;:::o
Swarm Source
ipfs://e9524f8842afb02c7618d60a72b4fc6f611a8807cd7389dcc95bbdcb7795daa4
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.