Contract Overview
[ Download CSV Export ]
Contract Name:
PolyCheems
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-21 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.3; /** * @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); } // 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. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * 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 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // 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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 () { _owner = 0x5CC3A6e6fF61A0c7475C0500f3e2FE9d246D06B1; emit OwnershipTransferred(address(0), _owner); } /** * @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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract PolyCheems is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; address private _charityWalletAddress = 0x70a89314b42eC3B91770D017bb304E3bD735104b; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "PolyCheems"; string private _symbol = "CHEEMS"; uint8 private _decimals = 9; uint256 public _taxFee = 2; uint256 private _previousTaxFee = _taxFee; uint256 public _charityFee = 3; uint256 private _previousCharityFee = _charityFee; uint256 public _liquidityFee = 2; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 5000000 * 10**9; uint256 private numTokensSellToAddToLiquidity = 5000000 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0xc03E6953B2015ed86258EB63808CC822E77805D2, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); 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 tCharity) = _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); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setCharityFeePercent(uint256 charityFee) external onlyOwner() { _charityFee = charityFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tCharity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tCharity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tCharity = calculateCharityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tCharity); return (tTransferAmount, tFee, tLiquidity, tCharity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rCharity); 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 _takeCharity(uint256 tCharity) private { uint256 currentRate = _getRate(); uint256 rCharity = tCharity.mul(currentRate); _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add(rCharity); if(_isExcluded[_charityWalletAddress]) _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add(tCharity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateCharityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_charityFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousCharityFee = _charityFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _charityFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _charityFee = _previousCharityFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!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 tCharity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _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 tCharity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _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 tCharity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeCharity(tCharity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040527370a89314b42ec3b91770d017bb304e3bd735104b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a76400006008556008546000196200007791906200085f565b600019620000869190620007b0565b6009556040518060400160405280600a81526020017f506f6c79436865656d7300000000000000000000000000000000000000000000815250600b9080519060200190620000d69291906200064b565b506040518060400160405280600681526020017f434845454d530000000000000000000000000000000000000000000000000000815250600c9080519060200190620001249291906200064b565b506009600d60006101000a81548160ff021916908360ff1602179055506002600e55600e54600f55600360105560105460115560026012556012546013556001601460016101000a81548160ff0219169083151502179055506611c37937e0800060155569010f0cf064dd59200000601655348015620001a357600080fd5b50735cc3a6e6ff61a0c7475c0500f3e2fe9d246d06b16000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600954600160006200028a6200062260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073a5e0829caced8ffdd4de3c43696c57f7d7a678ff90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032857600080fd5b505afa1580156200033d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000363919062000712565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c657600080fd5b505afa158015620003db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000401919062000712565b6040518363ffffffff1660e01b81526004016200042092919062000766565b602060405180830381600087803b1580156200043b57600080fd5b505af115801562000450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000476919062000712565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620004f96200062260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005b26200062260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000613919062000793565b60405180910390a35062000943565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006599062000829565b90600052602060002090601f0160209004810192826200067d5760008555620006c9565b82601f106200069857805160ff1916838001178555620006c9565b82800160010185558215620006c9579182015b82811115620006c8578251825591602001919060010190620006ab565b5b509050620006d89190620006dc565b5090565b5b80821115620006f7576000816000905550600101620006dd565b5090565b6000815190506200070c8162000929565b92915050565b6000602082840312156200072b576200072a62000924565b5b60006200073b84828501620006fb565b91505092915050565b6200074f81620007eb565b82525050565b62000760816200081f565b82525050565b60006040820190506200077d600083018562000744565b6200078c602083018462000744565b9392505050565b6000602082019050620007aa600083018462000755565b92915050565b6000620007bd826200081f565b9150620007ca836200081f565b925082821015620007e057620007df62000897565b5b828203905092915050565b6000620007f882620007ff565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200084257607f821691505b60208210811415620008595762000858620008f5565b5b50919050565b60006200086c826200081f565b915062000879836200081f565b9250826200088c576200088b620008c6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200093481620007eb565b81146200094057600080fd5b50565b60805160601c60a05160601c61505c62000999600039600081816112630152612346015260008181610a0901528181612e3201528181612f2201528181612f4901528181612fe5015261300c015261505c6000f3fe6080604052600436106102135760003560e01c806352390c021161011857806395d89b41116100a0578063c49b9a801161006f578063c49b9a80146107e6578063d543dbeb1461080f578063dd62ed3e14610838578063ea2f0b3714610875578063f2fde38b1461089e5761021a565b806395d89b4114610718578063a457c2d714610743578063a9059cbb14610780578063af41063b146107bd5761021a565b8063715018a6116100e7578063715018a6146106455780637d1db4a51461065c57806388f82020146106875780638da5cb5b146106c45780638ee88c53146106ef5761021a565b806352390c02146105775780635342acb4146105a05780636bc87c3a146105dd57806370a08231146106085761021a565b80633685d4191161019b57806340f8007a1161016a57806340f8007a14610490578063437823ec146104bb5780634549b039146104e457806349bd5a5e146105215780634a74bb021461054c5761021a565b80633685d419146103d657806339509351146103ff5780633b124fe71461043c5780633bd5d173146104675761021a565b80631694505e116101e25780631694505e146102db57806318160ddd1461030657806323b872dd146103315780632d8381191461036e578063313ce567146103ab5761021a565b8063061c82d01461021f57806306fdde0314610248578063095ea7b31461027357806313114a9d146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061417c565b6108c7565b005b34801561025457600080fd5b5061025d61094d565b60405161026a91906145cd565b60405180910390f35b34801561027f57600080fd5b5061029a6004803603810190610295919061410f565b6109df565b6040516102a79190614597565b60405180910390f35b3480156102bc57600080fd5b506102c56109fd565b6040516102d2919061478f565b60405180910390f35b3480156102e757600080fd5b506102f0610a07565b6040516102fd91906145b2565b60405180910390f35b34801561031257600080fd5b5061031b610a2b565b604051610328919061478f565b60405180910390f35b34801561033d57600080fd5b50610358600480360381019061035391906140bc565b610a35565b6040516103659190614597565b60405180910390f35b34801561037a57600080fd5b506103956004803603810190610390919061417c565b610b0e565b6040516103a2919061478f565b60405180910390f35b3480156103b757600080fd5b506103c0610b7c565b6040516103cd919061483b565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190614022565b610b93565b005b34801561040b57600080fd5b506104266004803603810190610421919061410f565b610ec9565b6040516104339190614597565b60405180910390f35b34801561044857600080fd5b50610451610f7c565b60405161045e919061478f565b60405180910390f35b34801561047357600080fd5b5061048e6004803603810190610489919061417c565b610f82565b005b34801561049c57600080fd5b506104a56110fe565b6040516104b2919061478f565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190614022565b611104565b005b3480156104f057600080fd5b5061050b600480360381019061050691906141a9565b6111db565b604051610518919061478f565b60405180910390f35b34801561052d57600080fd5b50610536611261565b604051610543919061451b565b60405180910390f35b34801561055857600080fd5b50610561611285565b60405161056e9190614597565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190614022565b611298565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190614022565b611533565b6040516105d49190614597565b60405180910390f35b3480156105e957600080fd5b506105f2611589565b6040516105ff919061478f565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190614022565b61158f565b60405161063c919061478f565b60405180910390f35b34801561065157600080fd5b5061065a61167a565b005b34801561066857600080fd5b506106716117b4565b60405161067e919061478f565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190614022565b6117ba565b6040516106bb9190614597565b60405180910390f35b3480156106d057600080fd5b506106d9611810565b6040516106e6919061451b565b60405180910390f35b3480156106fb57600080fd5b506107166004803603810190610711919061417c565b611839565b005b34801561072457600080fd5b5061072d6118bf565b60405161073a91906145cd565b60405180910390f35b34801561074f57600080fd5b5061076a6004803603810190610765919061410f565b611951565b6040516107779190614597565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a2919061410f565b611a1e565b6040516107b49190614597565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061417c565b611a3c565b005b3480156107f257600080fd5b5061080d6004803603810190610808919061414f565b611ac2565b005b34801561081b57600080fd5b506108366004803603810190610831919061417c565b611b92565b005b34801561084457600080fd5b5061085f600480360381019061085a919061407c565b611c3f565b60405161086c919061478f565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190614022565b611cc6565b005b3480156108aa57600080fd5b506108c560048036038101906108c09190614022565b611d9d565b005b6108cf611f46565b73ffffffffffffffffffffffffffffffffffffffff166108ed611810565b73ffffffffffffffffffffffffffffffffffffffff1614610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a906146ef565b60405180910390fd5b80600e8190555050565b6060600b805461095c90614a7e565b80601f016020809104026020016040519081016040528092919081815260200182805461098890614a7e565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b60006109f36109ec611f46565b8484611f4e565b6001905092915050565b6000600a54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000610a42848484612119565b610b0384610a4e611f46565b610afe85604051806060016040528060288152602001614fda60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ab4611f46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124869092919063ffffffff16565b611f4e565b600190509392505050565b6000600954821115610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c9061460f565b60405180910390fd5b6000610b5f6124db565b9050610b74818461250690919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b610b9b611f46565b73ffffffffffffffffffffffffffffffffffffffff16610bb9611810565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c06906146ef565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c929061468f565b60405180910390fd5b60005b600680549050811015610ec5578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610cd657610cd5614bb5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610eb25760066001600680549050610d31919061498c565b81548110610d4257610d41614bb5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610d8157610d80614bb5565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610e7857610e77614b86565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610ec5565b8080610ebd90614ab0565b915050610c9e565b5050565b6000610f72610ed6611f46565b84610f6d8560036000610ee7611f46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b611f4e565b6001905092915050565b600e5481565b6000610f8c611f46565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561101b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110129061476f565b60405180910390fd5b600061102683612532565b505050505050905061108081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259a90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110d88160095461259a90919063ffffffff16565b6009819055506110f383600a5461251c90919063ffffffff16565b600a81905550505050565b60105481565b61110c611f46565b73ffffffffffffffffffffffffffffffffffffffff1661112a611810565b73ffffffffffffffffffffffffffffffffffffffff1614611180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611177906146ef565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600854831115611222576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611219906146af565b60405180910390fd5b8161124357600061123284612532565b50505050505090508091505061125b565b600061124e84612532565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601460019054906101000a900460ff1681565b6112a0611f46565b73ffffffffffffffffffffffffffffffffffffffff166112be611810565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906146ef565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113989061466f565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561147557611431600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561162a57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611675565b611672600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b0e565b90505b919050565b611682611f46565b73ffffffffffffffffffffffffffffffffffffffff166116a0611810565b73ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed906146ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611841611f46565b73ffffffffffffffffffffffffffffffffffffffff1661185f611810565b73ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906146ef565b60405180910390fd5b8060128190555050565b6060600c80546118ce90614a7e565b80601f01602080910402602001604051908101604052809291908181526020018280546118fa90614a7e565b80156119475780601f1061191c57610100808354040283529160200191611947565b820191906000526020600020905b81548152906001019060200180831161192a57829003601f168201915b5050505050905090565b6000611a1461195e611f46565b84611a0f856040518060600160405280602581526020016150026025913960036000611988611f46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124869092919063ffffffff16565b611f4e565b6001905092915050565b6000611a32611a2b611f46565b8484612119565b6001905092915050565b611a44611f46565b73ffffffffffffffffffffffffffffffffffffffff16611a62611810565b73ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf906146ef565b60405180910390fd5b8060108190555050565b611aca611f46565b73ffffffffffffffffffffffffffffffffffffffff16611ae8611810565b73ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b35906146ef565b60405180910390fd5b80601460016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611b879190614597565b60405180910390a150565b611b9a611f46565b73ffffffffffffffffffffffffffffffffffffffff16611bb8611810565b73ffffffffffffffffffffffffffffffffffffffff1614611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c05906146ef565b60405180910390fd5b611c366064611c28836008546125b090919063ffffffff16565b61250690919063ffffffff16565b60158190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cce611f46565b73ffffffffffffffffffffffffffffffffffffffff16611cec611810565b73ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d39906146ef565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611da5611f46565b73ffffffffffffffffffffffffffffffffffffffff16611dc3611810565b73ffffffffffffffffffffffffffffffffffffffff1614611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906146ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e809061462f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb59061474f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561202e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120259061464f565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161210c919061478f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612189576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121809061472f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f0906145ef565b60405180910390fd5b6000811161223c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122339061470f565b60405180910390fd5b612244611810565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122b25750612282611810565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156122fd576015548111156122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f3906146cf565b60405180910390fd5b5b60006123083061158f565b905060155481106123195760155490505b6000601654821015905080801561233d5750601460009054906101000a900460ff16155b801561239557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156123ad5750601460019054906101000a900460ff165b156123c15760165491506123c0826125c6565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124685750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561247257600090505b61247e8686868461269c565b505050505050565b60008383111582906124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c591906145cd565b60405180910390fd5b5082840390509392505050565b60008060006124e86129ad565b915091506124ff818361250690919063ffffffff16565b9250505090565b600081836125149190614901565b905092915050565b6000818361252a91906148ab565b905092915050565b600080600080600080600080600080600061254c8c612c60565b9350935093509350600080600061256d8f8787876125686124db565b612cdf565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081836125a8919061498c565b905092915050565b600081836125be9190614932565b905092915050565b6001601460006101000a81548160ff02191690831515021790555060006125f760028361250690919063ffffffff16565b9050600061260e828461259a90919063ffffffff16565b9050600047905061261e83612d93565b6000612633824761259a90919063ffffffff16565b905061263f8382612fdf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161267293929190614804565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b806126aa576126a96130cf565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561274d5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127625761275d848484613123565b612999565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128055750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561281a57612815848484613391565b612998565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128be5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128d3576128ce8484846135ff565b612997565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129755750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561298a576129858484846137d8565b612996565b6129958484846135ff565b5b5b5b5b806129a7576129a6613adb565b5b50505050565b600080600060095490506000600854905060005b600680549050811015612c23578260016000600684815481106129e7576129e6614bb5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ad55750816002600060068481548110612a6d57612a6c614bb5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612aec5760095460085494509450505050612c5c565b612b7c6001600060068481548110612b0757612b06614bb5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461259a90919063ffffffff16565b9250612c0e6002600060068481548110612b9957612b98614bb5565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361259a90919063ffffffff16565b91508080612c1b90614ab0565b9150506129c1565b50612c3b60085460095461250690919063ffffffff16565b821015612c5357600954600854935093505050612c5c565b81819350935050505b9091565b6000806000806000612c7186613af8565b90506000612c7e87613b29565b90506000612c8b88613b5a565b90506000612cc682612cb885612caa888e61259a90919063ffffffff16565b61259a90919063ffffffff16565b61259a90919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080612cf8858a6125b090919063ffffffff16565b90506000612d0f868a6125b090919063ffffffff16565b90506000612d26878a6125b090919063ffffffff16565b90506000612d3d888a6125b090919063ffffffff16565b90506000612d7882612d6a85612d5c888a61259a90919063ffffffff16565b61259a90919063ffffffff16565b61259a90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff811115612db057612daf614be4565b5b604051908082528060200260200182016040528015612dde5781602001602082028036833780820191505090505b5090503081600081518110612df657612df5614bb5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9657600080fd5b505afa158015612eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ece919061404f565b81600181518110612ee257612ee1614bb5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f47307f000000000000000000000000000000000000000000000000000000000000000084611f4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612fa99594939291906147aa565b600060405180830381600087803b158015612fc357600080fd5b505af1158015612fd7573d6000803e3d6000fd5b505050505050565b61300a307f000000000000000000000000000000000000000000000000000000000000000084611f4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613054611810565b426040518863ffffffff1660e01b815260040161307696959493929190614536565b6060604051808303818588803b15801561308f57600080fd5b505af11580156130a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130c891906141e9565b5050505050565b6000600e541480156130e357506000601254145b156130ed57613121565b600e54600f819055506010546011819055506012546013819055506000600e81905550600060108190555060006012819055505b565b600080600080600080600061313788612532565b965096509650965096509650965061319788600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259a90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322c87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259a90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132c186600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330d82613b8b565b61331681613d30565b6133208584613f7f565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161337d919061478f565b60405180910390a350505050505050505050565b60008060008060008060006133a588612532565b965096509650965096509650965061340587600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259a90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061349a84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061352f86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357b82613b8b565b61358481613d30565b61358e8584613f7f565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516135eb919061478f565b60405180910390a350505050505050505050565b600080600080600080600061361388612532565b965096509650965096509650965061367387600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259a90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061370886600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375482613b8b565b61375d81613d30565b6137678584613f7f565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516137c4919061478f565b60405180910390a350505050505050505050565b60008060008060008060006137ec88612532565b965096509650965096509650965061384c88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259a90919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138e187600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259a90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397684600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a0b86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5782613b8b565b613a6081613d30565b613a6a8584613f7f565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613ac7919061478f565b60405180910390a350505050505050505050565b600f54600e81905550601154601081905550601354601281905550565b6000613b226064613b14600e54856125b090919063ffffffff16565b61250690919063ffffffff16565b9050919050565b6000613b536064613b45601254856125b090919063ffffffff16565b61250690919063ffffffff16565b9050919050565b6000613b846064613b76601054856125b090919063ffffffff16565b61250690919063ffffffff16565b9050919050565b6000613b956124db565b90506000613bac82846125b090919063ffffffff16565b9050613c0081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d2b57613ce783600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000613d3a6124db565b90506000613d5182846125b090919063ffffffff16565b9050613dc78160016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b60016000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f7a57613f148360026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251c90919063ffffffff16565b60026000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613f948260095461259a90919063ffffffff16565b600981905550613faf81600a5461251c90919063ffffffff16565b600a819055505050565b600081359050613fc881614f94565b92915050565b600081519050613fdd81614f94565b92915050565b600081359050613ff281614fab565b92915050565b60008135905061400781614fc2565b92915050565b60008151905061401c81614fc2565b92915050565b60006020828403121561403857614037614c13565b5b600061404684828501613fb9565b91505092915050565b60006020828403121561406557614064614c13565b5b600061407384828501613fce565b91505092915050565b6000806040838503121561409357614092614c13565b5b60006140a185828601613fb9565b92505060206140b285828601613fb9565b9150509250929050565b6000806000606084860312156140d5576140d4614c13565b5b60006140e386828701613fb9565b93505060206140f486828701613fb9565b925050604061410586828701613ff8565b9150509250925092565b6000806040838503121561412657614125614c13565b5b600061413485828601613fb9565b925050602061414585828601613ff8565b9150509250929050565b60006020828403121561416557614164614c13565b5b600061417384828501613fe3565b91505092915050565b60006020828403121561419257614191614c13565b5b60006141a084828501613ff8565b91505092915050565b600080604083850312156141c0576141bf614c13565b5b60006141ce85828601613ff8565b92505060206141df85828601613fe3565b9150509250929050565b60008060006060848603121561420257614201614c13565b5b60006142108682870161400d565b93505060206142218682870161400d565b92505060406142328682870161400d565b9150509250925092565b60006142488383614254565b60208301905092915050565b61425d816149c0565b82525050565b61426c816149c0565b82525050565b600061427d82614866565b6142878185614889565b935061429283614856565b8060005b838110156142c35781516142aa888261423c565b97506142b58361487c565b925050600181019050614296565b5085935050505092915050565b6142d9816149d2565b82525050565b6142e881614a15565b82525050565b6142f781614a39565b82525050565b600061430882614871565b614312818561489a565b9350614322818560208601614a4b565b61432b81614c18565b840191505092915050565b600061434360238361489a565b915061434e82614c29565b604082019050919050565b6000614366602a8361489a565b915061437182614c78565b604082019050919050565b600061438960268361489a565b915061439482614cc7565b604082019050919050565b60006143ac60228361489a565b91506143b782614d16565b604082019050919050565b60006143cf601b8361489a565b91506143da82614d65565b602082019050919050565b60006143f2601b8361489a565b91506143fd82614d8e565b602082019050919050565b6000614415601f8361489a565b915061442082614db7565b602082019050919050565b600061443860288361489a565b915061444382614de0565b604082019050919050565b600061445b60208361489a565b915061446682614e2f565b602082019050919050565b600061447e60298361489a565b915061448982614e58565b604082019050919050565b60006144a160258361489a565b91506144ac82614ea7565b604082019050919050565b60006144c460248361489a565b91506144cf82614ef6565b604082019050919050565b60006144e7602c8361489a565b91506144f282614f45565b604082019050919050565b614506816149fe565b82525050565b61451581614a08565b82525050565b60006020820190506145306000830184614263565b92915050565b600060c08201905061454b6000830189614263565b61455860208301886144fd565b61456560408301876142ee565b61457260608301866142ee565b61457f6080830185614263565b61458c60a08301846144fd565b979650505050505050565b60006020820190506145ac60008301846142d0565b92915050565b60006020820190506145c760008301846142df565b92915050565b600060208201905081810360008301526145e781846142fd565b905092915050565b6000602082019050818103600083015261460881614336565b9050919050565b6000602082019050818103600083015261462881614359565b9050919050565b600060208201905081810360008301526146488161437c565b9050919050565b600060208201905081810360008301526146688161439f565b9050919050565b60006020820190508181036000830152614688816143c2565b9050919050565b600060208201905081810360008301526146a8816143e5565b9050919050565b600060208201905081810360008301526146c881614408565b9050919050565b600060208201905081810360008301526146e88161442b565b9050919050565b600060208201905081810360008301526147088161444e565b9050919050565b6000602082019050818103600083015261472881614471565b9050919050565b6000602082019050818103600083015261474881614494565b9050919050565b60006020820190508181036000830152614768816144b7565b9050919050565b60006020820190508181036000830152614788816144da565b9050919050565b60006020820190506147a460008301846144fd565b92915050565b600060a0820190506147bf60008301886144fd565b6147cc60208301876142ee565b81810360408301526147de8186614272565b90506147ed6060830185614263565b6147fa60808301846144fd565b9695505050505050565b600060608201905061481960008301866144fd565b61482660208301856144fd565b61483360408301846144fd565b949350505050565b6000602082019050614850600083018461450c565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006148b6826149fe565b91506148c1836149fe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148f6576148f5614af9565b5b828201905092915050565b600061490c826149fe565b9150614917836149fe565b92508261492757614926614b28565b5b828204905092915050565b600061493d826149fe565b9150614948836149fe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561498157614980614af9565b5b828202905092915050565b6000614997826149fe565b91506149a2836149fe565b9250828210156149b5576149b4614af9565b5b828203905092915050565b60006149cb826149de565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614a2082614a27565b9050919050565b6000614a32826149de565b9050919050565b6000614a44826149fe565b9050919050565b60005b83811015614a69578082015181840152602081019050614a4e565b83811115614a78576000848401525b50505050565b60006002820490506001821680614a9657607f821691505b60208210811415614aaa57614aa9614b57565b5b50919050565b6000614abb826149fe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aee57614aed614af9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b614f9d816149c0565b8114614fa857600080fd5b50565b614fb4816149d2565b8114614fbf57600080fd5b50565b614fcb816149fe565b8114614fd657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c4cdad6c77d0968407f623c8e170fb267e726ef11c3ea6a199ef642b3bbdccbe64736f6c63430008060033
Deployed ByteCode Sourcemap
28765:19744:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36435:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31316:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32228:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33349:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29905:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31593:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32397:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34276:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31502:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34992:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32718:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29624:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33444:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29711:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36190:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33830:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29963:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30042:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34537:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41358:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29804:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31696:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20248:148;;;;;;;;;;;;;:::i;:::-;;30095:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33221:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19597:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36667:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31407:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32944:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31902:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36541:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36970:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36800:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32077:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36313:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20551:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36435:98;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36519:6:::1;36509:7;:16;;;;36435:98:::0;:::o;31316:83::-;31353:13;31386:5;31379:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31316:83;:::o;32228:161::-;32303:4;32320:39;32329:12;:10;:12::i;:::-;32343:7;32352:6;32320:8;:39::i;:::-;32377:4;32370:11;;32228:161;;;;:::o;33349:87::-;33391:7;33418:10;;33411:17;;33349:87;:::o;29905:51::-;;;:::o;31593:95::-;31646:7;31673;;31666:14;;31593:95;:::o;32397:313::-;32495:4;32512:36;32522:6;32530:9;32541:6;32512:9;:36::i;:::-;32559:121;32568:6;32576:12;:10;:12::i;:::-;32590:89;32628:6;32590:89;;;;;;;;;;;;;;;;;:11;:19;32602:6;32590:19;;;;;;;;;;;;;;;:33;32610:12;:10;:12::i;:::-;32590:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32559:8;:121::i;:::-;32698:4;32691:11;;32397:313;;;;;:::o;34276:253::-;34342:7;34381;;34370;:18;;34362:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34446:19;34469:10;:8;:10::i;:::-;34446:33;;34497:24;34509:11;34497:7;:11;;:24;;;;:::i;:::-;34490:31;;;34276:253;;;:::o;31502:83::-;31543:5;31568:9;;;;;;;;;;;31561:16;;31502:83;:::o;34992:479::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35074:11:::1;:20;35086:7;35074:20;;;;;;;;;;;;;;;;;;;;;;;;;35066:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35142:9;35137:327;35161:9;:16;;;;35157:1;:20;35137:327;;;35219:7;35203:23;;:9;35213:1;35203:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;35199:254;;;35262:9;35291:1;35272:9;:16;;;;:20;;;;:::i;:::-;35262:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35247:9;35257:1;35247:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35331:1;35312:7;:16;35320:7;35312:16;;;;;;;;;;;;;;;:20;;;;35374:5;35351:11;:20;35363:7;35351:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;35398:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;35432:5;;35199:254;35179:3;;;;;:::i;:::-;;;;35137:327;;;;34992:479:::0;:::o;32718:218::-;32806:4;32823:83;32832:12;:10;:12::i;:::-;32846:7;32855:50;32894:10;32855:11;:25;32867:12;:10;:12::i;:::-;32855:25;;;;;;;;;;;;;;;:34;32881:7;32855:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32823:8;:83::i;:::-;32924:4;32917:11;;32718:218;;;;:::o;29624:26::-;;;;:::o;33444:378::-;33496:14;33513:12;:10;:12::i;:::-;33496:29;;33545:11;:19;33557:6;33545:19;;;;;;;;;;;;;;;;;;;;;;;;;33544:20;33536:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33625:15;33650:19;33661:7;33650:10;:19::i;:::-;33624:45;;;;;;;;33698:28;33718:7;33698;:15;33706:6;33698:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33680:7;:15;33688:6;33680:15;;;;;;;;;;;;;;;:46;;;;33747:20;33759:7;33747;;:11;;:20;;;;:::i;:::-;33737:7;:30;;;;33791:23;33806:7;33791:10;;:14;;:23;;;;:::i;:::-;33778:10;:36;;;;33485:337;;33444:378;:::o;29711:30::-;;;;:::o;36190:111::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36289:4:::1;36259:18;:27;36278:7;36259:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;36190:111:::0;:::o;33830:438::-;33920:7;33959;;33948;:18;;33940:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34018:17;34013:248;;34053:15;34078:19;34089:7;34078:10;:19::i;:::-;34052:45;;;;;;;;34119:7;34112:14;;;;;34013:248;34161:23;34193:19;34204:7;34193:10;:19::i;:::-;34159:53;;;;;;;;34234:15;34227:22;;;33830:438;;;;;:::o;29963:38::-;;;:::o;30042:40::-;;;;;;;;;;;;;:::o;34537:447::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34734:11:::1;:20;34746:7;34734:20;;;;;;;;;;;;;;;;;;;;;;;;;34733:21;34725:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34819:1;34800:7;:16;34808:7;34800:16;;;;;;;;;;;;;;;;:20;34797:108;;;34856:37;34876:7;:16;34884:7;34876:16;;;;;;;;;;;;;;;;34856:19;:37::i;:::-;34837:7;:16;34845:7;34837:16;;;;;;;;;;;;;;;:56;;;;34797:108;34938:4;34915:11;:20;34927:7;34915:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34953:9;34968:7;34953:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34537:447:::0;:::o;41358:123::-;41422:4;41446:18;:27;41465:7;41446:27;;;;;;;;;;;;;;;;;;;;;;;;;41439:34;;41358:123;;;:::o;29804:32::-;;;;:::o;31696:198::-;31762:7;31786:11;:20;31798:7;31786:20;;;;;;;;;;;;;;;;;;;;;;;;;31782:49;;;31815:7;:16;31823:7;31815:16;;;;;;;;;;;;;;;;31808:23;;;;31782:49;31849:37;31869:7;:16;31877:7;31869:16;;;;;;;;;;;;;;;;31849:19;:37::i;:::-;31842:44;;31696:198;;;;:::o;20248:148::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20355:1:::1;20318:40;;20339:6;::::0;::::1;;;;;;;;20318:40;;;;;;;;;;;;20386:1;20369:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20248:148::o:0;30095:46::-;;;;:::o;33221:120::-;33289:4;33313:11;:20;33325:7;33313:20;;;;;;;;;;;;;;;;;;;;;;;;;33306:27;;33221:120;;;:::o;19597:87::-;19643:7;19670:6;;;;;;;;;;;19663:13;;19597:87;:::o;36667:122::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36769:12:::1;36753:13;:28;;;;36667:122:::0;:::o;31407:87::-;31446:13;31479:7;31472:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31407:87;:::o;32944:269::-;33037:4;33054:129;33063:12;:10;:12::i;:::-;33077:7;33086:96;33125:15;33086:96;;;;;;;;;;;;;;;;;:11;:25;33098:12;:10;:12::i;:::-;33086:25;;;;;;;;;;;;;;;:34;33112:7;33086:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;33054:8;:129::i;:::-;33201:4;33194:11;;32944:269;;;;:::o;31902:167::-;31980:4;31997:42;32007:12;:10;:12::i;:::-;32021:9;32032:6;31997:9;:42::i;:::-;32057:4;32050:11;;31902:167;;;;:::o;36541:114::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36637:10:::1;36623:11;:24;;;;36541:114:::0;:::o;36970:171::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37071:8:::1;37047:21;;:32;;;;;;;;;;;;;;;;;;37095:38;37124:8;37095:38;;;;;;:::i;:::-;;;;;;;;36970:171:::0;:::o;36800:162::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36894:60:::1;36938:5;36894:25;36906:12;36894:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;36879:12;:75;;;;36800:162:::0;:::o;32077:143::-;32158:7;32185:11;:18;32197:5;32185:18;;;;;;;;;;;;;;;:27;32204:7;32185:27;;;;;;;;;;;;;;;;32178:34;;32077:143;;;;:::o;36313:110::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36410:5:::1;36380:18;:27;36399:7;36380:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36313:110:::0;:::o;20551:244::-;19828:12;:10;:12::i;:::-;19817:23;;:7;:5;:7::i;:::-;:23;;;19809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20660:1:::1;20640:22;;:8;:22;;;;20632:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20750:8;20721:38;;20742:6;::::0;::::1;;;;;;;;20721:38;;;;;;;;;;;;20779:8;20770:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20551:244:::0;:::o;10314:98::-;10367:7;10394:10;10387:17;;10314:98;:::o;41489:337::-;41599:1;41582:19;;:5;:19;;;;41574:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41680:1;41661:21;;:7;:21;;;;41653:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41764:6;41734:11;:18;41746:5;41734:18;;;;;;;;;;;;;;;:27;41753:7;41734:27;;;;;;;;;;;;;;;:36;;;;41802:7;41786:32;;41795:5;41786:32;;;41811:6;41786:32;;;;;;:::i;:::-;;;;;;;;41489:337;;;:::o;41834:1813::-;41972:1;41956:18;;:4;:18;;;;41948:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42049:1;42035:16;;:2;:16;;;;42027:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42119:1;42110:6;:10;42102:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42188:7;:5;:7::i;:::-;42180:15;;:4;:15;;;;:32;;;;;42205:7;:5;:7::i;:::-;42199:13;;:2;:13;;;;42180:32;42177:125;;;42245:12;;42235:6;:22;;42227:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42177:125;42597:28;42628:24;42646:4;42628:9;:24::i;:::-;42597:55;;42700:12;;42676:20;:36;42673:112;;42761:12;;42738:35;;42673:112;42805:24;42856:29;;42832:20;:53;;42805:80;;42914:19;:53;;;;;42951:16;;;;;;;;;;;42950:17;42914:53;:91;;;;;42992:13;42984:21;;:4;:21;;;;42914:91;:129;;;;;43022:21;;;;;;;;;;;42914:129;42896:318;;;43093:29;;43070:52;;43166:36;43181:20;43166:14;:36::i;:::-;42896:318;43295:12;43310:4;43295:19;;43422:18;:24;43441:4;43422:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43450:18;:22;43469:2;43450:22;;;;;;;;;;;;;;;;;;;;;;;;;43422:50;43419:96;;;43498:5;43488:15;;43419:96;43601:38;43616:4;43621:2;43624:6;43631:7;43601:14;:38::i;:::-;41937:1710;;;41834:1813;;;:::o;7764:206::-;7850:7;7908:1;7903;:6;;7911:12;7895:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7950:1;7946;:5;7939:12;;7764:206;;;;;:::o;38829:163::-;38870:7;38891:15;38908;38927:19;:17;:19::i;:::-;38890:56;;;;38964:20;38976:7;38964;:11;;:20;;;;:::i;:::-;38957:27;;;;38829:163;:::o;6622:98::-;6680:7;6711:1;6707;:5;;;;:::i;:::-;6700:12;;6622:98;;;;:::o;5485:::-;5543:7;5574:1;5570;:5;;;;:::i;:::-;5563:12;;5485:98;;;;:::o;37402:466::-;37461:7;37470;37479;37488;37497;37506;37515;37536:23;37561:12;37575:18;37595:16;37615:20;37627:7;37615:11;:20::i;:::-;37535:100;;;;;;;;37647:15;37664:23;37689:12;37705:60;37717:7;37726:4;37732:10;37744:8;37754:10;:8;:10::i;:::-;37705:11;:60::i;:::-;37646:119;;;;;;37784:7;37793:15;37810:4;37816:15;37833:4;37839:10;37851:8;37776:84;;;;;;;;;;;;;;;;;;;;;37402:466;;;;;;;;;:::o;5866:98::-;5924:7;5955:1;5951;:5;;;;:::i;:::-;5944:12;;5866:98;;;;:::o;6223:::-;6281:7;6312:1;6308;:5;;;;:::i;:::-;6301:12;;6223:98;;;;:::o;43655:985::-;30545:4;30526:16;;:23;;;;;;;;;;;;;;;;;;43791:12:::1;43806:27;43831:1;43806:20;:24;;:27;;;;:::i;:::-;43791:42;;43844:17;43864:30;43889:4;43864:20;:24;;:30;;;;:::i;:::-;43844:50;;44172:22;44197:21;44172:46;;44263:22;44280:4;44263:16;:22::i;:::-;44416:18;44437:41;44463:14;44437:21;:25;;:41;;;;:::i;:::-;44416:62;;44528:35;44541:9;44552:10;44528:12;:35::i;:::-;44589:43;44604:4;44610:10;44622:9;44589:43;;;;;;;;:::i;:::-;;;;;;;;43729:911;;;;30591:5:::0;30572:16;;:24;;;;;;;;;;;;;;;;;;43655:985;:::o;45839:834::-;45950:7;45946:40;;45972:14;:12;:14::i;:::-;45946:40;46011:11;:19;46023:6;46011:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;46035:11;:22;46047:9;46035:22;;;;;;;;;;;;;;;;;;;;;;;;;46034:23;46011:46;46007:597;;;46074:48;46096:6;46104:9;46115:6;46074:21;:48::i;:::-;46007:597;;;46145:11;:19;46157:6;46145:19;;;;;;;;;;;;;;;;;;;;;;;;;46144:20;:46;;;;;46168:11;:22;46180:9;46168:22;;;;;;;;;;;;;;;;;;;;;;;;;46144:46;46140:464;;;46207:46;46227:6;46235:9;46246:6;46207:19;:46::i;:::-;46140:464;;;46276:11;:19;46288:6;46276:19;;;;;;;;;;;;;;;;;;;;;;;;;46275:20;:47;;;;;46300:11;:22;46312:9;46300:22;;;;;;;;;;;;;;;;;;;;;;;;;46299:23;46275:47;46271:333;;;46339:44;46357:6;46365:9;46376:6;46339:17;:44::i;:::-;46271:333;;;46405:11;:19;46417:6;46405:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46428:11;:22;46440:9;46428:22;;;;;;;;;;;;;;;;;;;;;;;;;46405:45;46401:203;;;46467:48;46489:6;46497:9;46508:6;46467:21;:48::i;:::-;46401:203;;;46548:44;46566:6;46574:9;46585:6;46548:17;:44::i;:::-;46401:203;46271:333;46140:464;46007:597;46628:7;46624:41;;46650:15;:13;:15::i;:::-;46624:41;45839:834;;;;:::o;39000:561::-;39050:7;39059;39079:15;39097:7;;39079:25;;39115:15;39133:7;;39115:25;;39162:9;39157:289;39181:9;:16;;;;39177:1;:20;39157:289;;;39247:7;39223;:21;39231:9;39241:1;39231:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39223:21;;;;;;;;;;;;;;;;:31;:66;;;;39282:7;39258;:21;39266:9;39276:1;39266:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39258:21;;;;;;;;;;;;;;;;:31;39223:66;39219:97;;;39299:7;;39308;;39291:25;;;;;;;;;39219:97;39341:34;39353:7;:21;39361:9;39371:1;39361:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39353:21;;;;;;;;;;;;;;;;39341:7;:11;;:34;;;;:::i;:::-;39331:44;;39400:34;39412:7;:21;39420:9;39430:1;39420:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39412:21;;;;;;;;;;;;;;;;39400:7;:11;;:34;;;;:::i;:::-;39390:44;;39199:3;;;;;:::i;:::-;;;;39157:289;;;;39470:20;39482:7;;39470;;:11;;:20;;;;:::i;:::-;39460:7;:30;39456:61;;;39500:7;;39509;;39492:25;;;;;;;;39456:61;39536:7;39545;39528:25;;;;;;39000:561;;;:::o;37876:421::-;37936:7;37945;37954;37963;37983:12;37998:24;38014:7;37998:15;:24::i;:::-;37983:39;;38033:18;38054:30;38076:7;38054:21;:30::i;:::-;38033:51;;38095:16;38114:28;38134:7;38114:19;:28::i;:::-;38095:47;;38153:23;38179:47;38217:8;38179:33;38201:10;38179:17;38191:4;38179:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;38153:73;;38245:15;38262:4;38268:10;38280:8;38237:52;;;;;;;;;;;;37876:421;;;;;:::o;38305:516::-;38438:7;38447;38456;38476:15;38494:24;38506:11;38494:7;:11;;:24;;;;:::i;:::-;38476:42;;38529:12;38544:21;38553:11;38544:4;:8;;:21;;;;:::i;:::-;38529:36;;38576:18;38597:27;38612:11;38597:10;:14;;:27;;;;:::i;:::-;38576:48;;38635:16;38654:25;38667:11;38654:8;:12;;:25;;;;:::i;:::-;38635:44;;38690:23;38716:47;38754:8;38716:33;38738:10;38716:17;38728:4;38716:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;38690:73;;38782:7;38791:15;38808:4;38774:39;;;;;;;;;;;38305:516;;;;;;;;;:::o;44648:589::-;44774:21;44812:1;44798:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44774:40;;44843:4;44825;44830:1;44825:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44869:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44859:4;44864:1;44859:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44904:62;44921:4;44936:15;44954:11;44904:8;:62::i;:::-;45005:15;:66;;;45086:11;45112:1;45156:4;45183;45203:15;45005:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44703:534;44648:589;:::o;45245:513::-;45393:62;45410:4;45425:15;45443:11;45393:8;:62::i;:::-;45498:15;:31;;;45537:9;45570:4;45590:11;45616:1;45659;45702:7;:5;:7::i;:::-;45724:15;45498:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45245:513;;:::o;40845:320::-;40902:1;40891:7;;:12;:34;;;;;40924:1;40907:13;;:18;40891:34;40888:46;;;40927:7;;40888:46;40972:7;;40954:15;:25;;;;41012:11;;40990:19;:33;;;;41058:13;;41034:21;:37;;;;41102:1;41092:7;:11;;;;41128:1;41114:11;:15;;;;41156:1;41140:13;:17;;;;40845:320;:::o;47887:617::-;47990:15;48007:23;48032:12;48046:23;48071:12;48085:18;48105:16;48125:19;48136:7;48125:10;:19::i;:::-;47989:155;;;;;;;;;;;;;;48173:28;48193:7;48173;:15;48181:6;48173:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48155:7;:15;48163:6;48155:15;;;;;;;;;;;;;;;:46;;;;48230:28;48250:7;48230;:15;48238:6;48230:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48212:7;:15;48220:6;48212:15;;;;;;;;;;;;;;;:46;;;;48290:39;48313:15;48290:7;:18;48298:9;48290:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48269:7;:18;48277:9;48269:18;;;;;;;;;;;;;;;:60;;;;48343:26;48358:10;48343:14;:26::i;:::-;48380:22;48393:8;48380:12;:22::i;:::-;48413:23;48425:4;48431;48413:11;:23::i;:::-;48469:9;48452:44;;48461:6;48452:44;;;48480:15;48452:44;;;;;;:::i;:::-;;;;;;;;47978:526;;;;;;;47887:617;;;:::o;47242:637::-;47343:15;47360:23;47385:12;47399:23;47424:12;47438:18;47458:16;47478:19;47489:7;47478:10;:19::i;:::-;47342:155;;;;;;;;;;;;;;47526:28;47546:7;47526;:15;47534:6;47526:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47508:7;:15;47516:6;47508:15;;;;;;;;;;;;;;;:46;;;;47586:39;47609:15;47586:7;:18;47594:9;47586:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47565:7;:18;47573:9;47565:18;;;;;;;;;;;;;;;:60;;;;47657:39;47680:15;47657:7;:18;47665:9;47657:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47636:7;:18;47644:9;47636:18;;;;;;;;;;;;;;;:60;;;;47718:26;47733:10;47718:14;:26::i;:::-;47755:22;47768:8;47755:12;:22::i;:::-;47788:23;47800:4;47806;47788:11;:23::i;:::-;47844:9;47827:44;;47836:6;47827:44;;;47855:15;47827:44;;;;;;:::i;:::-;;;;;;;;47331:548;;;;;;;47242:637;;;:::o;46681:553::-;46780:15;46797:23;46822:12;46836:23;46861:12;46875:18;46895:16;46915:19;46926:7;46915:10;:19::i;:::-;46779:155;;;;;;;;;;;;;;46963:28;46983:7;46963;:15;46971:6;46963:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46945:7;:15;46953:6;46945:15;;;;;;;;;;;;;;;:46;;;;47023:39;47046:15;47023:7;:18;47031:9;47023:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47002:7;:18;47010:9;47002:18;;;;;;;;;;;;;;;:60;;;;47073:26;47088:10;47073:14;:26::i;:::-;47110:22;47123:8;47110:12;:22::i;:::-;47143:23;47155:4;47161;47143:11;:23::i;:::-;47199:9;47182:44;;47191:6;47182:44;;;47210:15;47182:44;;;;;;:::i;:::-;;;;;;;;46768:466;;;;;;;46681:553;;;:::o;35481:693::-;35584:15;35601:23;35626:12;35640:23;35665:12;35679:18;35699:16;35719:19;35730:7;35719:10;:19::i;:::-;35583:155;;;;;;;;;;;;;;35767:28;35787:7;35767;:15;35775:6;35767:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35749:7;:15;35757:6;35749:15;;;;;;;;;;;;;;;:46;;;;35824:28;35844:7;35824;:15;35832:6;35824:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35806:7;:15;35814:6;35806:15;;;;;;;;;;;;;;;:46;;;;35884:39;35907:15;35884:7;:18;35892:9;35884:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35863:7;:18;35871:9;35863:18;;;;;;;;;;;;;;;:60;;;;35955:39;35978:15;35955:7;:18;35963:9;35955:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35934:7;:18;35942:9;35934:18;;;;;;;;;;;;;;;:60;;;;36013:26;36028:10;36013:14;:26::i;:::-;36050:22;36063:8;36050:12;:22::i;:::-;36083:23;36095:4;36101;36083:11;:23::i;:::-;36139:9;36122:44;;36131:6;36122:44;;;36150:15;36122:44;;;;;;:::i;:::-;;;;;;;;35572:602;;;;;;;35481:693;;;:::o;41177:169::-;41231:15;;41221:7;:25;;;;41271:19;;41257:11;:33;;;;41317:21;;41301:13;:37;;;;41177:169::o;40335:154::-;40399:7;40426:55;40465:5;40426:20;40438:7;;40426;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;40419:62;;40335:154;;;:::o;40667:166::-;40737:7;40764:61;40809:5;40764:26;40776:13;;40764:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;40757:68;;40667:166;;;:::o;40497:162::-;40565:7;40592:59;40635:5;40592:24;40604:11;;40592:7;:11;;:24;;;;:::i;:::-;:28;;:59;;;;:::i;:::-;40585:66;;40497:162;;;:::o;39573:355::-;39636:19;39659:10;:8;:10::i;:::-;39636:33;;39680:18;39701:27;39716:11;39701:10;:14;;:27;;;;:::i;:::-;39680:48;;39764:38;39791:10;39764:7;:22;39780:4;39764:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39739:7;:22;39755:4;39739:22;;;;;;;;;;;;;;;:63;;;;39816:11;:26;39836:4;39816:26;;;;;;;;;;;;;;;;;;;;;;;;;39813:107;;;39882:38;39909:10;39882:7;:22;39898:4;39882:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39857:7;:22;39873:4;39857:22;;;;;;;;;;;;;;;:63;;;;39813:107;39625:303;;39573:355;:::o;39940:383::-;39999:19;40022:10;:8;:10::i;:::-;39999:33;;40043:16;40062:25;40075:11;40062:8;:12;;:25;;;;:::i;:::-;40043:44;;40131;40166:8;40131:7;:30;40139:21;;;;;;;;;;;40131:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40098:7;:30;40106:21;;;;;;;;;;;40098:30;;;;;;;;;;;;;;;:77;;;;40189:11;:34;40201:21;;;;;;;;;;;40189:34;;;;;;;;;;;;;;;;;;;;;;;;;40186:129;;;40271:44;40306:8;40271:7;:30;40279:21;;;;;;;;;;;40271:30;;;;;;;;;;;;;;;;:34;;:44;;;;:::i;:::-;40238:7;:30;40246:21;;;;;;;;;;;40238:30;;;;;;;;;;;;;;;:77;;;;40186:129;39988:335;;39940:383;:::o;37247:147::-;37325:17;37337:4;37325:7;;:11;;:17;;;;:::i;:::-;37315:7;:27;;;;37366:20;37381:4;37366:10;;:14;;:20;;;;:::i;:::-;37353:10;:33;;;;37247:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;848:79;;:::i;:::-;810:2;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;800:263;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:2;;;1194:79;;:::i;:::-;1156:2;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1146:274;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:2;;;1557:79;;:::i;:::-;1519:2;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1509:391;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:2;;;2054:79;;:::i;:::-;2016:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;2006:519;;;;;:::o;2531:474::-;2599:6;2607;2656:2;2644:9;2635:7;2631:23;2627:32;2624:2;;;2662:79;;:::i;:::-;2624:2;2782:1;2807:53;2852:7;2843:6;2832:9;2828:22;2807:53;:::i;:::-;2797:63;;2753:117;2909:2;2935:53;2980:7;2971:6;2960:9;2956:22;2935:53;:::i;:::-;2925:63;;2880:118;2614:391;;;;;:::o;3011:323::-;3067:6;3116:2;3104:9;3095:7;3091:23;3087:32;3084:2;;;3122:79;;:::i;:::-;3084:2;3242:1;3267:50;3309:7;3300:6;3289:9;3285:22;3267:50;:::i;:::-;3257:60;;3213:114;3074:260;;;;:::o;3340:329::-;3399:6;3448:2;3436:9;3427:7;3423:23;3419:32;3416:2;;;3454:79;;:::i;:::-;3416:2;3574:1;3599:53;3644:7;3635:6;3624:9;3620:22;3599:53;:::i;:::-;3589:63;;3545:117;3406:263;;;;:::o;3675:468::-;3740:6;3748;3797:2;3785:9;3776:7;3772:23;3768:32;3765:2;;;3803:79;;:::i;:::-;3765:2;3923:1;3948:53;3993:7;3984:6;3973:9;3969:22;3948:53;:::i;:::-;3938:63;;3894:117;4050:2;4076:50;4118:7;4109:6;4098:9;4094:22;4076:50;:::i;:::-;4066:60;;4021:115;3755:388;;;;;:::o;4149:663::-;4237:6;4245;4253;4302:2;4290:9;4281:7;4277:23;4273:32;4270:2;;;4308:79;;:::i;:::-;4270:2;4428:1;4453:64;4509:7;4500:6;4489:9;4485:22;4453:64;:::i;:::-;4443:74;;4399:128;4566:2;4592:64;4648:7;4639:6;4628:9;4624:22;4592:64;:::i;:::-;4582:74;;4537:129;4705:2;4731:64;4787:7;4778:6;4767:9;4763:22;4731:64;:::i;:::-;4721:74;;4676:129;4260:552;;;;;:::o;4818:179::-;4887:10;4908:46;4950:3;4942:6;4908:46;:::i;:::-;4986:4;4981:3;4977:14;4963:28;;4898:99;;;;:::o;5003:108::-;5080:24;5098:5;5080:24;:::i;:::-;5075:3;5068:37;5058:53;;:::o;5117:118::-;5204:24;5222:5;5204:24;:::i;:::-;5199:3;5192:37;5182:53;;:::o;5271:732::-;5390:3;5419:54;5467:5;5419:54;:::i;:::-;5489:86;5568:6;5563:3;5489:86;:::i;:::-;5482:93;;5599:56;5649:5;5599:56;:::i;:::-;5678:7;5709:1;5694:284;5719:6;5716:1;5713:13;5694:284;;;5795:6;5789:13;5822:63;5881:3;5866:13;5822:63;:::i;:::-;5815:70;;5908:60;5961:6;5908:60;:::i;:::-;5898:70;;5754:224;5741:1;5738;5734:9;5729:14;;5694:284;;;5698:14;5994:3;5987:10;;5395:608;;;;;;;:::o;6009:109::-;6090:21;6105:5;6090:21;:::i;:::-;6085:3;6078:34;6068:50;;:::o;6124:185::-;6238:64;6296:5;6238:64;:::i;:::-;6233:3;6226:77;6216:93;;:::o;6315:147::-;6410:45;6449:5;6410:45;:::i;:::-;6405:3;6398:58;6388:74;;:::o;6468:364::-;6556:3;6584:39;6617:5;6584:39;:::i;:::-;6639:71;6703:6;6698:3;6639:71;:::i;:::-;6632:78;;6719:52;6764:6;6759:3;6752:4;6745:5;6741:16;6719:52;:::i;:::-;6796:29;6818:6;6796:29;:::i;:::-;6791:3;6787:39;6780:46;;6560:272;;;;;:::o;6838:366::-;6980:3;7001:67;7065:2;7060:3;7001:67;:::i;:::-;6994:74;;7077:93;7166:3;7077:93;:::i;:::-;7195:2;7190:3;7186:12;7179:19;;6984:220;;;:::o;7210:366::-;7352:3;7373:67;7437:2;7432:3;7373:67;:::i;:::-;7366:74;;7449:93;7538:3;7449:93;:::i;:::-;7567:2;7562:3;7558:12;7551:19;;7356:220;;;:::o;7582:366::-;7724:3;7745:67;7809:2;7804:3;7745:67;:::i;:::-;7738:74;;7821:93;7910:3;7821:93;:::i;:::-;7939:2;7934:3;7930:12;7923:19;;7728:220;;;:::o;7954:366::-;8096:3;8117:67;8181:2;8176:3;8117:67;:::i;:::-;8110:74;;8193:93;8282:3;8193:93;:::i;:::-;8311:2;8306:3;8302:12;8295:19;;8100:220;;;:::o;8326:366::-;8468:3;8489:67;8553:2;8548:3;8489:67;:::i;:::-;8482:74;;8565:93;8654:3;8565:93;:::i;:::-;8683:2;8678:3;8674:12;8667:19;;8472:220;;;:::o;8698:366::-;8840:3;8861:67;8925:2;8920:3;8861:67;:::i;:::-;8854:74;;8937:93;9026:3;8937:93;:::i;:::-;9055:2;9050:3;9046:12;9039:19;;8844:220;;;:::o;9070:366::-;9212:3;9233:67;9297:2;9292:3;9233:67;:::i;:::-;9226:74;;9309:93;9398:3;9309:93;:::i;:::-;9427:2;9422:3;9418:12;9411:19;;9216:220;;;:::o;9442:366::-;9584:3;9605:67;9669:2;9664:3;9605:67;:::i;:::-;9598:74;;9681:93;9770:3;9681:93;:::i;:::-;9799:2;9794:3;9790:12;9783:19;;9588:220;;;:::o;9814:366::-;9956:3;9977:67;10041:2;10036:3;9977:67;:::i;:::-;9970:74;;10053:93;10142:3;10053:93;:::i;:::-;10171:2;10166:3;10162:12;10155:19;;9960:220;;;:::o;10186:366::-;10328:3;10349:67;10413:2;10408:3;10349:67;:::i;:::-;10342:74;;10425:93;10514:3;10425:93;:::i;:::-;10543:2;10538:3;10534:12;10527:19;;10332:220;;;:::o;10558:366::-;10700:3;10721:67;10785:2;10780:3;10721:67;:::i;:::-;10714:74;;10797:93;10886:3;10797:93;:::i;:::-;10915:2;10910:3;10906:12;10899:19;;10704:220;;;:::o;10930:366::-;11072:3;11093:67;11157:2;11152:3;11093:67;:::i;:::-;11086:74;;11169:93;11258:3;11169:93;:::i;:::-;11287:2;11282:3;11278:12;11271:19;;11076:220;;;:::o;11302:366::-;11444:3;11465:67;11529:2;11524:3;11465:67;:::i;:::-;11458:74;;11541:93;11630:3;11541:93;:::i;:::-;11659:2;11654:3;11650:12;11643:19;;11448:220;;;:::o;11674:118::-;11761:24;11779:5;11761:24;:::i;:::-;11756:3;11749:37;11739:53;;:::o;11798:112::-;11881:22;11897:5;11881:22;:::i;:::-;11876:3;11869:35;11859:51;;:::o;11916:222::-;12009:4;12047:2;12036:9;12032:18;12024:26;;12060:71;12128:1;12117:9;12113:17;12104:6;12060:71;:::i;:::-;12014:124;;;;:::o;12144:807::-;12393:4;12431:3;12420:9;12416:19;12408:27;;12445:71;12513:1;12502:9;12498:17;12489:6;12445:71;:::i;:::-;12526:72;12594:2;12583:9;12579:18;12570:6;12526:72;:::i;:::-;12608:80;12684:2;12673:9;12669:18;12660:6;12608:80;:::i;:::-;12698;12774:2;12763:9;12759:18;12750:6;12698:80;:::i;:::-;12788:73;12856:3;12845:9;12841:19;12832:6;12788:73;:::i;:::-;12871;12939:3;12928:9;12924:19;12915:6;12871:73;:::i;:::-;12398:553;;;;;;;;;:::o;12957:210::-;13044:4;13082:2;13071:9;13067:18;13059:26;;13095:65;13157:1;13146:9;13142:17;13133:6;13095:65;:::i;:::-;13049:118;;;;:::o;13173:276::-;13293:4;13331:2;13320:9;13316:18;13308:26;;13344:98;13439:1;13428:9;13424:17;13415:6;13344:98;:::i;:::-;13298:151;;;;:::o;13455:313::-;13568:4;13606:2;13595:9;13591:18;13583:26;;13655:9;13649:4;13645:20;13641:1;13630:9;13626:17;13619:47;13683:78;13756:4;13747:6;13683:78;:::i;:::-;13675:86;;13573:195;;;;:::o;13774:419::-;13940:4;13978:2;13967:9;13963:18;13955:26;;14027:9;14021:4;14017:20;14013:1;14002:9;13998:17;13991:47;14055:131;14181:4;14055:131;:::i;:::-;14047:139;;13945:248;;;:::o;14199:419::-;14365:4;14403:2;14392:9;14388:18;14380:26;;14452:9;14446:4;14442:20;14438:1;14427:9;14423:17;14416:47;14480:131;14606:4;14480:131;:::i;:::-;14472:139;;14370:248;;;:::o;14624:419::-;14790:4;14828:2;14817:9;14813:18;14805:26;;14877:9;14871:4;14867:20;14863:1;14852:9;14848:17;14841:47;14905:131;15031:4;14905:131;:::i;:::-;14897:139;;14795:248;;;:::o;15049:419::-;15215:4;15253:2;15242:9;15238:18;15230:26;;15302:9;15296:4;15292:20;15288:1;15277:9;15273:17;15266:47;15330:131;15456:4;15330:131;:::i;:::-;15322:139;;15220:248;;;:::o;15474:419::-;15640:4;15678:2;15667:9;15663:18;15655:26;;15727:9;15721:4;15717:20;15713:1;15702:9;15698:17;15691:47;15755:131;15881:4;15755:131;:::i;:::-;15747:139;;15645:248;;;:::o;15899:419::-;16065:4;16103:2;16092:9;16088:18;16080:26;;16152:9;16146:4;16142:20;16138:1;16127:9;16123:17;16116:47;16180:131;16306:4;16180:131;:::i;:::-;16172:139;;16070:248;;;:::o;16324:419::-;16490:4;16528:2;16517:9;16513:18;16505:26;;16577:9;16571:4;16567:20;16563:1;16552:9;16548:17;16541:47;16605:131;16731:4;16605:131;:::i;:::-;16597:139;;16495:248;;;:::o;16749:419::-;16915:4;16953:2;16942:9;16938:18;16930:26;;17002:9;16996:4;16992:20;16988:1;16977:9;16973:17;16966:47;17030:131;17156:4;17030:131;:::i;:::-;17022:139;;16920:248;;;:::o;17174:419::-;17340:4;17378:2;17367:9;17363:18;17355:26;;17427:9;17421:4;17417:20;17413:1;17402:9;17398:17;17391:47;17455:131;17581:4;17455:131;:::i;:::-;17447:139;;17345:248;;;:::o;17599:419::-;17765:4;17803:2;17792:9;17788:18;17780:26;;17852:9;17846:4;17842:20;17838:1;17827:9;17823:17;17816:47;17880:131;18006:4;17880:131;:::i;:::-;17872:139;;17770:248;;;:::o;18024:419::-;18190:4;18228:2;18217:9;18213:18;18205:26;;18277:9;18271:4;18267:20;18263:1;18252:9;18248:17;18241:47;18305:131;18431:4;18305:131;:::i;:::-;18297:139;;18195:248;;;:::o;18449:419::-;18615:4;18653:2;18642:9;18638:18;18630:26;;18702:9;18696:4;18692:20;18688:1;18677:9;18673:17;18666:47;18730:131;18856:4;18730:131;:::i;:::-;18722:139;;18620:248;;;:::o;18874:419::-;19040:4;19078:2;19067:9;19063:18;19055:26;;19127:9;19121:4;19117:20;19113:1;19102:9;19098:17;19091:47;19155:131;19281:4;19155:131;:::i;:::-;19147:139;;19045:248;;;:::o;19299:222::-;19392:4;19430:2;19419:9;19415:18;19407:26;;19443:71;19511:1;19500:9;19496:17;19487:6;19443:71;:::i;:::-;19397:124;;;;:::o;19527:831::-;19790:4;19828:3;19817:9;19813:19;19805:27;;19842:71;19910:1;19899:9;19895:17;19886:6;19842:71;:::i;:::-;19923:80;19999:2;19988:9;19984:18;19975:6;19923:80;:::i;:::-;20050:9;20044:4;20040:20;20035:2;20024:9;20020:18;20013:48;20078:108;20181:4;20172:6;20078:108;:::i;:::-;20070:116;;20196:72;20264:2;20253:9;20249:18;20240:6;20196:72;:::i;:::-;20278:73;20346:3;20335:9;20331:19;20322:6;20278:73;:::i;:::-;19795:563;;;;;;;;:::o;20364:442::-;20513:4;20551:2;20540:9;20536:18;20528:26;;20564:71;20632:1;20621:9;20617:17;20608:6;20564:71;:::i;:::-;20645:72;20713:2;20702:9;20698:18;20689:6;20645:72;:::i;:::-;20727;20795:2;20784:9;20780:18;20771:6;20727:72;:::i;:::-;20518:288;;;;;;:::o;20812:214::-;20901:4;20939:2;20928:9;20924:18;20916:26;;20952:67;21016:1;21005:9;21001:17;20992:6;20952:67;:::i;:::-;20906:120;;;;:::o;21113:132::-;21180:4;21203:3;21195:11;;21233:4;21228:3;21224:14;21216:22;;21185:60;;;:::o;21251:114::-;21318:6;21352:5;21346:12;21336:22;;21325:40;;;:::o;21371:99::-;21423:6;21457:5;21451:12;21441:22;;21430:40;;;:::o;21476:113::-;21546:4;21578;21573:3;21569:14;21561:22;;21551:38;;;:::o;21595:184::-;21694:11;21728:6;21723:3;21716:19;21768:4;21763:3;21759:14;21744:29;;21706:73;;;;:::o;21785:169::-;21869:11;21903:6;21898:3;21891:19;21943:4;21938:3;21934:14;21919:29;;21881:73;;;;:::o;21960:305::-;22000:3;22019:20;22037:1;22019:20;:::i;:::-;22014:25;;22053:20;22071:1;22053:20;:::i;:::-;22048:25;;22207:1;22139:66;22135:74;22132:1;22129:81;22126:2;;;22213:18;;:::i;:::-;22126:2;22257:1;22254;22250:9;22243:16;;22004:261;;;;:::o;22271:185::-;22311:1;22328:20;22346:1;22328:20;:::i;:::-;22323:25;;22362:20;22380:1;22362:20;:::i;:::-;22357:25;;22401:1;22391:2;;22406:18;;:::i;:::-;22391:2;22448:1;22445;22441:9;22436:14;;22313:143;;;;:::o;22462:348::-;22502:7;22525:20;22543:1;22525:20;:::i;:::-;22520:25;;22559:20;22577:1;22559:20;:::i;:::-;22554:25;;22747:1;22679:66;22675:74;22672:1;22669:81;22664:1;22657:9;22650:17;22646:105;22643:2;;;22754:18;;:::i;:::-;22643:2;22802:1;22799;22795:9;22784:20;;22510:300;;;;:::o;22816:191::-;22856:4;22876:20;22894:1;22876:20;:::i;:::-;22871:25;;22910:20;22928:1;22910:20;:::i;:::-;22905:25;;22949:1;22946;22943:8;22940:2;;;22954:18;;:::i;:::-;22940:2;22999:1;22996;22992:9;22984:17;;22861:146;;;;:::o;23013:96::-;23050:7;23079:24;23097:5;23079:24;:::i;:::-;23068:35;;23058:51;;;:::o;23115:90::-;23149:7;23192:5;23185:13;23178:21;23167:32;;23157:48;;;:::o;23211:126::-;23248:7;23288:42;23281:5;23277:54;23266:65;;23256:81;;;:::o;23343:77::-;23380:7;23409:5;23398:16;;23388:32;;;:::o;23426:86::-;23461:7;23501:4;23494:5;23490:16;23479:27;;23469:43;;;:::o;23518:180::-;23595:9;23628:64;23686:5;23628:64;:::i;:::-;23615:77;;23605:93;;;:::o;23704:140::-;23781:9;23814:24;23832:5;23814:24;:::i;:::-;23801:37;;23791:53;;;:::o;23850:121::-;23908:9;23941:24;23959:5;23941:24;:::i;:::-;23928:37;;23918:53;;;:::o;23977:307::-;24045:1;24055:113;24069:6;24066:1;24063:13;24055:113;;;24154:1;24149:3;24145:11;24139:18;24135:1;24130:3;24126:11;24119:39;24091:2;24088:1;24084:10;24079:15;;24055:113;;;24186:6;24183:1;24180:13;24177:2;;;24266:1;24257:6;24252:3;24248:16;24241:27;24177:2;24026:258;;;;:::o;24290:320::-;24334:6;24371:1;24365:4;24361:12;24351:22;;24418:1;24412:4;24408:12;24439:18;24429:2;;24495:4;24487:6;24483:17;24473:27;;24429:2;24557;24549:6;24546:14;24526:18;24523:38;24520:2;;;24576:18;;:::i;:::-;24520:2;24341:269;;;;:::o;24616:233::-;24655:3;24678:24;24696:5;24678:24;:::i;:::-;24669:33;;24724:66;24717:5;24714:77;24711:2;;;24794:18;;:::i;:::-;24711:2;24841:1;24834:5;24830:13;24823:20;;24659:190;;;:::o;24855:180::-;24903:77;24900:1;24893:88;25000:4;24997:1;24990:15;25024:4;25021:1;25014:15;25041:180;25089:77;25086:1;25079:88;25186:4;25183:1;25176:15;25210:4;25207:1;25200:15;25227:180;25275:77;25272:1;25265:88;25372:4;25369:1;25362:15;25396:4;25393:1;25386:15;25413:180;25461:77;25458:1;25451:88;25558:4;25555:1;25548:15;25582:4;25579:1;25572:15;25599:180;25647:77;25644:1;25637:88;25744:4;25741:1;25734:15;25768:4;25765:1;25758:15;25785:180;25833:77;25830:1;25823:88;25930:4;25927:1;25920:15;25954:4;25951:1;25944:15;26094:117;26203:1;26200;26193:12;26217:102;26258:6;26309:2;26305:7;26300:2;26293:5;26289:14;26285:28;26275:38;;26265:54;;;:::o;26325:222::-;26465:34;26461:1;26453:6;26449:14;26442:58;26534:5;26529:2;26521:6;26517:15;26510:30;26431:116;:::o;26553:229::-;26693:34;26689:1;26681:6;26677:14;26670:58;26762:12;26757:2;26749:6;26745:15;26738:37;26659:123;:::o;26788:225::-;26928:34;26924:1;26916:6;26912:14;26905:58;26997:8;26992:2;26984:6;26980:15;26973:33;26894:119;:::o;27019:221::-;27159:34;27155:1;27147:6;27143:14;27136:58;27228:4;27223:2;27215:6;27211:15;27204:29;27125:115;:::o;27246:177::-;27386:29;27382:1;27374:6;27370:14;27363:53;27352:71;:::o;27429:177::-;27569:29;27565:1;27557:6;27553:14;27546:53;27535:71;:::o;27612:181::-;27752:33;27748:1;27740:6;27736:14;27729:57;27718:75;:::o;27799:227::-;27939:34;27935:1;27927:6;27923:14;27916:58;28008:10;28003:2;27995:6;27991:15;27984:35;27905:121;:::o;28032:182::-;28172:34;28168:1;28160:6;28156:14;28149:58;28138:76;:::o;28220:228::-;28360:34;28356:1;28348:6;28344:14;28337:58;28429:11;28424:2;28416:6;28412:15;28405:36;28326:122;:::o;28454:224::-;28594:34;28590:1;28582:6;28578:14;28571:58;28663:7;28658:2;28650:6;28646:15;28639:32;28560:118;:::o;28684:223::-;28824:34;28820:1;28812:6;28808:14;28801:58;28893:6;28888:2;28880:6;28876:15;28869:31;28790:117;:::o;28913:231::-;29053:34;29049:1;29041:6;29037:14;29030:58;29122:14;29117:2;29109:6;29105:15;29098:39;29019:125;:::o;29150:122::-;29223:24;29241:5;29223:24;:::i;:::-;29216:5;29213:35;29203:2;;29262:1;29259;29252:12;29203:2;29193:79;:::o;29278:116::-;29348:21;29363:5;29348:21;:::i;:::-;29341:5;29338:32;29328:2;;29384:1;29381;29374:12;29328:2;29318:76;:::o;29400:122::-;29473:24;29491:5;29473:24;:::i;:::-;29466:5;29463:35;29453:2;;29512:1;29509;29502:12;29453:2;29443:79;:::o
Swarm Source
ipfs://c4cdad6c77d0968407f623c8e170fb267e726ef11c3ea6a199ef642b3bbdccbe
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.