ERC-20
Overview
Max Total Supply
1,000,000,000,000,000,000 SELENA
Holders
329
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
341,307,669,044,889.574431191 SELENAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SelenaInu
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-07 */ /** *Submitted for verification at Etherscan.io on 2022-01-07 */ pragma solidity ^0.8.10; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } 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 SelenaInu 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 botWallets; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000000 * 10 ** 6 * 10 ** 9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "SELENA INU"; string private _symbol = "SELENA"; uint8 private _decimals = 9; uint256 public taxFee = 2; uint256 public liquidityFee = 8; uint256 public burnFee = 2; uint256 public distributionSharePercentage = 75; uint256 public marketingFeePercentageage = 33; uint256 public investmentFeePercentage = 34; uint256 public devFeePercentage = 33; uint256 private _previousTaxFee = taxFee; uint256 private _previousLiquidityFee = liquidityFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 1000000000000000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 100000000000000 * 10**9; address public marketingWallet = 0x72B75111d243Cba98C8746cE261E390366616aA9; address public investmentWallet = 0x800C3C9b2b132543917cbB5a54A6E99d47e39A7B; address public devWallet = 0x16ce829696166C382e1Dbbb5A1E23e4203Bd06D1; address public deadWallet = 0x000000000000000000000000000000000000dEaD; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[_msgSender()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[investmentWallet] = true; _isExcludedFromFee[devWallet] = true; //multi signature wallets _isExcludedFromFee[0xc633D6733b26fdf9f2209a91994F236291aE91B2] = true; _isExcludedFromFee[0x2b2386f6Da3784b6941c52b77fd313124b2af7B2] = true; _isExcludedFromFee[0x7a38eD4B61F5484B28E75505dD019C94A1537fed] = true; _isExcluded[deadWallet] = true; _excluded.push(deadWallet); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function airDrops(address[] calldata newholders, uint256[] calldata amounts) public onlyOwner() { uint256 iterator = 0; require(newholders.length == amounts.length, "must be the same length"); while(iterator < newholders.length){ _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false); iterator += 1; } } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount * 10**9; } 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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address[] calldata addresses) public onlyOwner { addRemoveFee(addresses, true); } function includeInFee(address[] calldata addresses) public onlyOwner { addRemoveFee(addresses, false); } function addRemoveFee(address[] calldata addresses, bool flag) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; _isExcludedFromFee[addr] = flag; } } function setBurnFee(uint256 fee) external onlyOwner() { burnFee = fee; } function setFees(uint256 taxFee_, uint256 liquidityFee_, uint256 marketingFeePercentage_, uint256 investmentFeePercentage_, uint256 devFeePercentage_, uint256 distSharePercentage) external onlyOwner { require(marketingFeePercentage_.add(investmentFeePercentage_).add(devFeePercentage_) == 100, "Fee percentage must equal 100"); taxFee = taxFee_; marketingFeePercentageage = marketingFeePercentage_; investmentFeePercentage = investmentFeePercentage_; devFeePercentage = devFeePercentage_; liquidityFee = liquidityFee_; distributionSharePercentage = distSharePercentage; } function setNumTokensToSell(uint256 numTokensSellToAddToLiquidity_) external onlyOwner { numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity_ * 10**9; } function setWallets(address _marketingWallet, address _investmentWallet, address _devWallet) external onlyOwner { marketingWallet = _marketingWallet; investmentWallet = _investmentWallet; devWallet = _devWallet; } function isAddressBlocked(address addr) public view returns (bool) { return botWallets[addr]; } function claimTokens() external onlyOwner() { uint256 numberOfTokensToSell = balanceOf(address(this)); distributeShares(numberOfTokensToSell); } function blockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, true); } function unblockAddresses(address[] memory addresses) external onlyOwner() { blockUnblockAddress(addresses, false); } function blockUnblockAddress(address[] memory addresses, bool doBlock) private { for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; if(doBlock) { botWallets[addr] = true; } else { delete botWallets[addr]; } } } function getContractTokenBalance() public view returns (uint256) { return balanceOf(address(this)); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(liquidityFee).div(10**2); } function removeAllFee() private { if (taxFee == 0 && liquidityFee == 0) return; _previousTaxFee = taxFee; _previousLiquidityFee = liquidityFee; taxFee = 0; liquidityFee = 0; } function restoreAllFee() private { taxFee = _previousTaxFee; liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner() && to != deadWallet) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } if (contractTokenBalance >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) { if(contractTokenBalance >= numTokensSellToAddToLiquidity) { contractTokenBalance = numTokensSellToAddToLiquidity; } //distribution shares is the percentage to be shared between marketing, investment, and dev wallets //remainder will be for the liquidity pool uint256 balanceToShareTokens = contractTokenBalance.mul(distributionSharePercentage).div(100); uint256 liquidityPoolTokens = contractTokenBalance.sub(balanceToShareTokens); //just in case distributionSharePercentage is set to 100%, there will be no tokens to be swapped for liquidity pool if(liquidityPoolTokens > 0) { //add liquidity swapAndLiquify(liquidityPoolTokens); } //send eth to wallets (marketing, investment, dev) distributeShares(balanceToShareTokens); } if(from != uniswapV2Pair) { require(!botWallets[from] , "bots are not allowed to sell or transfer tokens"); require(!botWallets[to] , "bots are not allowed to sell or transfer tokens"); } bool takeFee = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner(); if(takeFee && burnFee > 0) { uint256 _burnFeeAmount = amount * burnFee / 100; if(_burnFeeAmount > 0) { _tokenTransfer(from, deadWallet, _burnFeeAmount, false); } _tokenTransfer(from, to, amount.sub(_burnFeeAmount), takeFee); } else { _tokenTransfer(from, to, amount, takeFee); } } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function distributeShares(uint256 balanceToShareTokens) private lockTheSwap { swapTokensForEth(balanceToShareTokens); uint256 balanceToShare = address(this).balance; uint256 marketingShare = balanceToShare.mul(marketingFeePercentageage).div(100); uint256 investmentShare = balanceToShare.mul(investmentFeePercentage).div(100); uint256 devShare = balanceToShare.mul(devFeePercentage).div(100); payable(marketingWallet).transfer(marketingShare); payable(investmentWallet).transfer(investmentShare); payable(devWallet).transfer(devShare); } 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) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investmentFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeePercentageage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"liquidityFee_","type":"uint256"},{"internalType":"uint256","name":"marketingFeePercentage_","type":"uint256"},{"internalType":"uint256","name":"investmentFeePercentage_","type":"uint256"},{"internalType":"uint256","name":"devFeePercentage_","type":"uint256"},{"internalType":"uint256","name":"distSharePercentage","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity_","type":"uint256"}],"name":"setNumTokensToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_investmentWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","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
60806040526b033b2e3c9fd0803ce800000060085560085460001962000026919062000bc3565b60001962000035919062000c2a565b6009556040518060400160405280600a81526020017f53454c454e4120494e5500000000000000000000000000000000000000000000815250600b90805190602001906200008592919062000ada565b506040518060400160405280600681526020017f53454c454e410000000000000000000000000000000000000000000000000000815250600c9080519060200190620000d392919062000ada565b506009600d60006101000a81548160ff021916908360ff1602179055506002600e556008600f556002601055604b601155602160125560226013556021601455600e54601555600f546016556001601860156101000a81548160ff02191690831515021790555069d3c21bcecceda100000060195569152d02c7e14af6800000601a557372b75111d243cba98c8746ce261e390366616aa9601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073800c3c9b2b132543917cbb5a54a6e99d47e39a7b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507316ce829696166c382e1dbbb5a1e23e4203bd06d1601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620002a557600080fd5b506000620002b862000aa960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600954600160006200036d62000aa960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160056000620003c162000ab160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560006200042862000aa960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600073c633d6733b26fdf9f2209a91994f236291ae91b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000732b2386f6da3784b6941c52b77fd313124b2af7b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000737a38ed4b61f5484b28e75505dd019c94a1537fed73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200088f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b5919062000ccf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200091d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000943919062000ccf565b6040518363ffffffff1660e01b81526004016200096292919062000d12565b6020604051808303816000875af115801562000982573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009a8919062000ccf565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a3962000aa960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000a9a919062000d50565b60405180910390a35062000dd2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000ae89062000d9c565b90600052602060002090601f01602090048101928262000b0c576000855562000b58565b82601f1062000b2757805160ff191683800117855562000b58565b8280016001018555821562000b58579182015b8281111562000b5757825182559160200191906001019062000b3a565b5b50905062000b67919062000b6b565b5090565b5b8082111562000b8657600081600090555060010162000b6c565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000bd08262000b8a565b915062000bdd8362000b8a565b92508262000bf05762000bef62000b94565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c378262000b8a565b915062000c448362000b8a565b92508282101562000c5a5762000c5962000bfb565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c978262000c6a565b9050919050565b62000ca98162000c8a565b811462000cb557600080fd5b50565b60008151905062000cc98162000c9e565b92915050565b60006020828403121562000ce85762000ce762000c65565b5b600062000cf88482850162000cb8565b91505092915050565b62000d0c8162000c8a565b82525050565b600060408201905062000d29600083018562000d01565b62000d38602083018462000d01565b9392505050565b62000d4a8162000b8a565b82525050565b600060208201905062000d67600083018462000d3f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000db557607f821691505b6020821081141562000dcc5762000dcb62000d6d565b5b50919050565b615e288062000de26000396000f3fe6080604052600436106102b25760003560e01c80637ca2ea4411610175578063a9059cbb116100dc578063dd62ed3e11610095578063eaeddcc51161006f578063eaeddcc514610ad5578063ec28438a14610b00578063f2fde38b14610b29578063fce589d814610b52576102b9565b8063dd62ed3e14610a30578063e7dad4f914610a6d578063e884269a14610aaa576102b9565b8063a9059cbb14610920578063b202886b1461095d578063b6fa37bc14610988578063c49b9a80146109b3578063d12a7688146109dc578063dcda6af314610a07576102b9565b80638ea5220f1161012e5780638ea5220f1461080e57806395d89b411461083957806398118cb4146108645780639b0e2e861461088f578063a071dcf4146108b8578063a457c2d7146108e3576102b9565b80637ca2ea44146107125780637d1db4a51461073b57806385141a771461076657806385d4787b1461079157806386f6c3c1146107ba5780638da5cb5b146107e3576102b9565b8063436560d0116102195780635342acb4116101d25780635342acb41461060457806370a0823114610641578063715018a61461067e57806371b9189c1461069557806375cb1bd1146106be57806375f0a874146106e7576102b9565b8063436560d0146105065780634549b0391461053157806348c54b9d1461056e57806349bd5a5e146105855780634a74bb02146105b05780634bf2c7c9146105db576102b9565b806323b872dd1161026b57806323b872dd146103d05780632d8381191461040d578063313ce5671461044a578063317d94531461047557806339509351146104a05780633bd5d173146104dd576102b9565b8063024022f7146102be57806306fdde03146102e7578063095ea7b31461031257806313114a9d1461034f5780631694505e1461037a57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614887565b610b7d565b005b3480156102f357600080fd5b506102fc610c22565b604051610309919061496d565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190614a23565b610cb4565b6040516103469190614a7e565b60405180910390f35b34801561035b57600080fd5b50610364610cd2565b6040516103719190614aa8565b60405180910390f35b34801561038657600080fd5b5061038f610cdc565b60405161039c9190614b22565b60405180910390f35b3480156103b157600080fd5b506103ba610d02565b6040516103c79190614aa8565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190614b3d565b610d0c565b6040516104049190614a7e565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190614b90565b610de5565b6040516104419190614aa8565b60405180910390f35b34801561045657600080fd5b5061045f610e53565b60405161046c9190614bd9565b60405180910390f35b34801561048157600080fd5b5061048a610e6a565b6040516104979190614aa8565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190614a23565b610e7a565b6040516104d49190614a7e565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190614b90565b610f2d565b005b34801561051257600080fd5b5061051b6110a8565b6040516105289190614aa8565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190614c20565b6110ae565b6040516105659190614aa8565b60405180910390f35b34801561057a57600080fd5b50610583611132565b005b34801561059157600080fd5b5061059a6111e0565b6040516105a79190614c6f565b60405180910390f35b3480156105bc57600080fd5b506105c5611206565b6040516105d29190614a7e565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190614b90565b611219565b005b34801561061057600080fd5b5061062b60048036038101906106269190614c8a565b6112b8565b6040516106389190614a7e565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190614c8a565b61130e565b6040516106759190614aa8565b60405180910390f35b34801561068a57600080fd5b506106936113f9565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190614887565b61154c565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190614cb7565b6115f1565b005b3480156106f357600080fd5b506106fc61174e565b6040516107099190614c6f565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614b90565b611774565b005b34801561074757600080fd5b50610750611822565b60405161075d9190614aa8565b60405180910390f35b34801561077257600080fd5b5061077b611828565b6040516107889190614c6f565b60405180910390f35b34801561079d57600080fd5b506107b860048036038101906107b39190614e48565b61184e565b005b3480156107c657600080fd5b506107e160048036038101906107dc9190614e91565b6118f1565b005b3480156107ef57600080fd5b506107f8611a1f565b6040516108059190614c6f565b60405180910390f35b34801561081a57600080fd5b50610823611a48565b6040516108309190614c6f565b60405180910390f35b34801561084557600080fd5b5061084e611a6e565b60405161085b919061496d565b60405180910390f35b34801561087057600080fd5b50610879611b00565b6040516108869190614aa8565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614e48565b611b06565b005b3480156108c457600080fd5b506108cd611ba9565b6040516108da9190614aa8565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190614a23565b611baf565b6040516109179190614a7e565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190614a23565b611c7c565b6040516109549190614a7e565b60405180910390f35b34801561096957600080fd5b50610972611c9a565b60405161097f9190614aa8565b60405180910390f35b34801561099457600080fd5b5061099d611ca0565b6040516109aa9190614c6f565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190614f1e565b611cc6565b005b3480156109e857600080fd5b506109f1611daf565b6040516109fe9190614aa8565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190614fa1565b611db5565b005b348015610a3c57600080fd5b50610a576004803603810190610a529190615022565b611f1e565b604051610a649190614aa8565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f9190614c8a565b611fa5565b604051610aa19190614a7e565b60405180910390f35b348015610ab657600080fd5b50610abf611ffb565b604051610acc9190614aa8565b60405180910390f35b348015610ae157600080fd5b50610aea612001565b604051610af79190614aa8565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614b90565b612007565b005b348015610b3557600080fd5b50610b506004803603810190610b4b9190614c8a565b6120b5565b005b348015610b5e57600080fd5b50610b67612277565b604051610b749190614aa8565b60405180910390f35b610b8561227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906150ae565b60405180910390fd5b610c1e82826000612285565b5050565b6060600b8054610c31906150fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5d906150fd565b8015610caa5780601f10610c7f57610100808354040283529160200191610caa565b820191906000526020600020905b815481529060010190602001808311610c8d57829003601f168201915b5050505050905090565b6000610cc8610cc161227d565b8484612330565b6001905092915050565b6000600a54905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610d198484846124fb565b610dda84610d2561227d565b610dd585604051806060016040528060288152602001615da660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d8b61227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b959092919063ffffffff16565b612330565b600190509392505050565b6000600954821115610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e23906151a1565b60405180910390fd5b6000610e36612bf9565b9050610e4b8184612c2490919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6000610e753061130e565b905090565b6000610f23610e8761227d565b84610f1e8560036000610e9861227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b612330565b6001905092915050565b6000610f3761227d565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90615233565b60405180910390fd5b6000610fd183612ccc565b5050505050905061102a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061108281600954612d2890919063ffffffff16565b60098190555061109d83600a54612c6e90919063ffffffff16565b600a81905550505050565b60135481565b60006008548311156110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec9061529f565b60405180910390fd5b8161111557600061110584612ccc565b505050505090508091505061112c565b600061112084612ccc565b50505050915050809150505b92915050565b61113a61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be906150ae565b60405180910390fd5b60006111d23061130e565b90506111dd81612d72565b50565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860159054906101000a900460ff1681565b61122161227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a5906150ae565b60405180910390fd5b8060108190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113a957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113f4565b6113f1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de5565b90505b919050565b61140161227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611485906150ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61155461227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d8906150ae565b60405180910390fd5b6115ed82826001612285565b5050565b6115f961227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906150ae565b60405180910390fd5b82601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61177c61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611800906150ae565b60405180910390fd5b633b9aca008161181991906152ee565b601a8190555050565b60195481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61185661227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da906150ae565b60405180910390fd5b6118ee816001612f7c565b50565b6118f961227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906150ae565b60405180910390fd5b60646119ad8361199f8688612c6e90919063ffffffff16565b612c6e90919063ffffffff16565b146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490615394565b60405180910390fd5b85600e8190555083601281905550826013819055508160148190555084600f8190555080601181905550505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c8054611a7d906150fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa9906150fd565b8015611af65780601f10611acb57610100808354040283529160200191611af6565b820191906000526020600020905b815481529060010190602001808311611ad957829003601f168201915b5050505050905090565b600f5481565b611b0e61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906150ae565b60405180910390fd5b611ba6816000612f7c565b50565b600e5481565b6000611c72611bbc61227d565b84611c6d85604051806060016040528060258152602001615dce6025913960036000611be661227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b959092919063ffffffff16565b612330565b6001905092915050565b6000611c90611c8961227d565b84846124fb565b6001905092915050565b60115481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cce61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906150ae565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611da49190614a7e565b60405180910390a150565b601a5481565b611dbd61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e41906150ae565b60405180910390fd5b6000828290508585905014611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90615400565b60405180910390fd5b5b84849050811015611f1757611f03611eab61227d565b868684818110611ebe57611ebd615420565b5b9050602002016020810190611ed39190614c8a565b633b9aca00868686818110611eeb57611eea615420565b5b90506020020135611efc91906152ee565b6000613073565b600181611f10919061544f565b9050611e95565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60125481565b61200f61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612093906150ae565b60405180910390fd5b633b9aca00816120ac91906152ee565b60198190555050565b6120bd61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612141906150ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190615517565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600033905090565b60005b8383905081101561232a5760008484838181106122a8576122a7615420565b5b90506020020160208101906122bd9190614c8a565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061232290615537565b915050612288565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612397906155f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790615684565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124ee9190614aa8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290615716565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d2906157a8565b60405180910390fd5b6000811161261e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126159061583a565b60405180910390fd5b612626611a1f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126945750612664611a1f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126ee5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561273957601954811115612738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272f906158cc565b60405180910390fd5b5b60006127443061130e565b905060195481106127555760195490505b601a5481101580156127745750601860149054906101000a900460ff16155b80156127ce5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156127e65750601860159054906101000a900460ff165b1561285c57601a5481106127fa57601a5490505b600061282460646128166011548561338490919063ffffffff16565b612c2490919063ffffffff16565b9050600061283b8284612d2890919063ffffffff16565b905060008111156128505761284f816133ff565b5b61285982612d72565b50505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146129cc57600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561293e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129359061595e565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c29061595e565b60405180910390fd5b5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a725750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ab15750612a81611a1f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612af05750612ac0611a1f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050808015612b0157506000601054115b15612b81576000606460105485612b1891906152ee565b612b2291906159ad565b90506000811115612b5d57612b5c86601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000613073565b5b612b7b8686612b758488612d2890919063ffffffff16565b85613073565b50612b8e565b612b8d85858584613073565b5b5050505050565b6000838311158290612bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd4919061496d565b60405180910390fd5b5060008385612bec91906159de565b9050809150509392505050565b6000806000612c066134d5565b91509150612c1d8183612c2490919063ffffffff16565b9250505090565b6000612c6683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613788565b905092915050565b6000808284612c7d919061544f565b905083811015612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990615a5e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ce38a6137eb565b9250925092506000806000612d018d8686612cfc612bf9565b613845565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612d6a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b95565b905092915050565b6001601860146101000a81548160ff021916908315150217905550612d96816138ce565b60004790506000612dc56064612db76012548561338490919063ffffffff16565b612c2490919063ffffffff16565b90506000612df16064612de36013548661338490919063ffffffff16565b612c2490919063ffffffff16565b90506000612e1d6064612e0f6014548761338490919063ffffffff16565b612c2490919063ffffffff16565b9050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612e87573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612ef0573d6000803e3d6000fd5b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f59573d6000803e3d6000fd5b50505050506000601860146101000a81548160ff02191690831515021790555050565b60005b825181101561306e576000838281518110612f9d57612f9c615420565b5b60200260200101519050821561300a576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061305a565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061306690615537565b915050612f7f565b505050565b8061308157613080613b11565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131245750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313957613134848484613b54565b613370565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131dc5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131f1576131ec848484613db4565b61336f565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132955750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132aa576132a5848484614014565b61336e565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133615761335c8484846141df565b61336d565b61336c848484614014565b5b5b5b5b8061337e5761337d6144d4565b5b50505050565b60008083141561339757600090506133f9565b600082846133a591906152ee565b90508284826133b491906159ad565b146133f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133eb90615af0565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff0219169083151502179055506000613430600283612c2490919063ffffffff16565b905060006134478284612d2890919063ffffffff16565b90506000479050613457836138ce565b600061346c8247612d2890919063ffffffff16565b905061347883826144e8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516134ab93929190615b10565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600080600060095490506000600854905060005b60078054905081101561374b5782600160006007848154811061350f5761350e615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135fd575081600260006007848154811061359557613594615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136145760095460085494509450505050613784565b6136a4600160006007848154811061362f5761362e615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612d2890919063ffffffff16565b925061373660026000600784815481106136c1576136c0615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612d2890919063ffffffff16565b9150808061374390615537565b9150506134e9565b50613763600854600954612c2490919063ffffffff16565b82101561377b57600954600854935093505050613784565b81819350935050505b9091565b600080831182906137cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c6919061496d565b60405180910390fd5b50600083856137de91906159ad565b9050809150509392505050565b6000806000806137fa856145cd565b90506000613807866145fe565b9050600061383082613822858a612d2890919063ffffffff16565b612d2890919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061385e858961338490919063ffffffff16565b90506000613875868961338490919063ffffffff16565b9050600061388c878961338490919063ffffffff16565b905060006138b5826138a78587612d2890919063ffffffff16565b612d2890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156138eb576138ea614d0a565b5b6040519080825280602002602001820160405280156139195781602001602082028036833780820191505090505b509050308160008151811061393157613930615420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139fc9190615b5c565b81600181518110613a1057613a0f615420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7730601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612330565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613adb959493929190615c82565b600060405180830381600087803b158015613af557600080fd5b505af1158015613b09573d6000803e3d6000fd5b505050505050565b6000600e54148015613b2557506000600f54145b15613b2f57613b52565b600e54601581905550600f546016819055506000600e819055506000600f819055505b565b600080600080600080613b6687612ccc565b955095509550955095509550613bc487600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cee85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3a8161462f565b613d4484836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613da19190614aa8565b60405180910390a3505050505050505050565b600080600080600080613dc687612ccc565b955095509550955095509550613e2486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eb983600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9a8161462f565b613fa484836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140019190614aa8565b60405180910390a3505050505050505050565b60008060008060008061402687612ccc565b95509550955095509550955061408486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141658161462f565b61416f84836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141cc9190614aa8565b60405180910390a3505050505050505050565b6000806000806000806141f187612ccc565b95509550955095509550955061424f87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142e486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437983600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445a8161462f565b61446484836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144c19190614aa8565b60405180910390a3505050505050505050565b601554600e81905550601654600f81905550565b61451530601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612330565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614561611a1f565b426040518863ffffffff1660e01b815260040161458396959493929190615cdc565b60606040518083038185885af11580156145a1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145c69190615d52565b5050505050565b60006145f760646145e9600e548561338490919063ffffffff16565b612c2490919063ffffffff16565b9050919050565b6000614628606461461a600f548561338490919063ffffffff16565b612c2490919063ffffffff16565b9050919050565b6000614639612bf9565b90506000614650828461338490919063ffffffff16565b90506146a481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147cf5761478b83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6147e982600954612d2890919063ffffffff16565b60098190555061480481600a54612c6e90919063ffffffff16565b600a819055505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261484757614846614822565b5b8235905067ffffffffffffffff81111561486457614863614827565b5b6020830191508360208202830111156148805761487f61482c565b5b9250929050565b6000806020838503121561489e5761489d614818565b5b600083013567ffffffffffffffff8111156148bc576148bb61481d565b5b6148c885828601614831565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561490e5780820151818401526020810190506148f3565b8381111561491d576000848401525b50505050565b6000601f19601f8301169050919050565b600061493f826148d4565b61494981856148df565b93506149598185602086016148f0565b61496281614923565b840191505092915050565b600060208201905081810360008301526149878184614934565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149ba8261498f565b9050919050565b6149ca816149af565b81146149d557600080fd5b50565b6000813590506149e7816149c1565b92915050565b6000819050919050565b614a00816149ed565b8114614a0b57600080fd5b50565b600081359050614a1d816149f7565b92915050565b60008060408385031215614a3a57614a39614818565b5b6000614a48858286016149d8565b9250506020614a5985828601614a0e565b9150509250929050565b60008115159050919050565b614a7881614a63565b82525050565b6000602082019050614a936000830184614a6f565b92915050565b614aa2816149ed565b82525050565b6000602082019050614abd6000830184614a99565b92915050565b6000819050919050565b6000614ae8614ae3614ade8461498f565b614ac3565b61498f565b9050919050565b6000614afa82614acd565b9050919050565b6000614b0c82614aef565b9050919050565b614b1c81614b01565b82525050565b6000602082019050614b376000830184614b13565b92915050565b600080600060608486031215614b5657614b55614818565b5b6000614b64868287016149d8565b9350506020614b75868287016149d8565b9250506040614b8686828701614a0e565b9150509250925092565b600060208284031215614ba657614ba5614818565b5b6000614bb484828501614a0e565b91505092915050565b600060ff82169050919050565b614bd381614bbd565b82525050565b6000602082019050614bee6000830184614bca565b92915050565b614bfd81614a63565b8114614c0857600080fd5b50565b600081359050614c1a81614bf4565b92915050565b60008060408385031215614c3757614c36614818565b5b6000614c4585828601614a0e565b9250506020614c5685828601614c0b565b9150509250929050565b614c69816149af565b82525050565b6000602082019050614c846000830184614c60565b92915050565b600060208284031215614ca057614c9f614818565b5b6000614cae848285016149d8565b91505092915050565b600080600060608486031215614cd057614ccf614818565b5b6000614cde868287016149d8565b9350506020614cef868287016149d8565b9250506040614d00868287016149d8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614d4282614923565b810181811067ffffffffffffffff82111715614d6157614d60614d0a565b5b80604052505050565b6000614d7461480e565b9050614d808282614d39565b919050565b600067ffffffffffffffff821115614da057614d9f614d0a565b5b602082029050602081019050919050565b6000614dc4614dbf84614d85565b614d6a565b90508083825260208201905060208402830185811115614de757614de661482c565b5b835b81811015614e105780614dfc88826149d8565b845260208401935050602081019050614de9565b5050509392505050565b600082601f830112614e2f57614e2e614822565b5b8135614e3f848260208601614db1565b91505092915050565b600060208284031215614e5e57614e5d614818565b5b600082013567ffffffffffffffff811115614e7c57614e7b61481d565b5b614e8884828501614e1a565b91505092915050565b60008060008060008060c08789031215614eae57614ead614818565b5b6000614ebc89828a01614a0e565b9650506020614ecd89828a01614a0e565b9550506040614ede89828a01614a0e565b9450506060614eef89828a01614a0e565b9350506080614f0089828a01614a0e565b92505060a0614f1189828a01614a0e565b9150509295509295509295565b600060208284031215614f3457614f33614818565b5b6000614f4284828501614c0b565b91505092915050565b60008083601f840112614f6157614f60614822565b5b8235905067ffffffffffffffff811115614f7e57614f7d614827565b5b602083019150836020820283011115614f9a57614f9961482c565b5b9250929050565b60008060008060408587031215614fbb57614fba614818565b5b600085013567ffffffffffffffff811115614fd957614fd861481d565b5b614fe587828801614831565b9450945050602085013567ffffffffffffffff8111156150085761500761481d565b5b61501487828801614f4b565b925092505092959194509250565b6000806040838503121561503957615038614818565b5b6000615047858286016149d8565b9250506020615058858286016149d8565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150986020836148df565b91506150a382615062565b602082019050919050565b600060208201905081810360008301526150c78161508b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061511557607f821691505b60208210811415615129576151286150ce565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061518b602a836148df565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061521d602c836148df565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615289601f836148df565b915061529482615253565b602082019050919050565b600060208201905081810360008301526152b88161527c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152f9826149ed565b9150615304836149ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561533d5761533c6152bf565b5b828202905092915050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b600061537e601d836148df565b915061538982615348565b602082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b60006153ea6017836148df565b91506153f5826153b4565b602082019050919050565b60006020820190508181036000830152615419816153dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061545a826149ed565b9150615465836149ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561549a576154996152bf565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155016026836148df565b915061550c826154a5565b604082019050919050565b60006020820190508181036000830152615530816154f4565b9050919050565b6000615542826149ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615575576155746152bf565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155dc6024836148df565b91506155e782615580565b604082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061566e6022836148df565b915061567982615612565b604082019050919050565b6000602082019050818103600083015261569d81615661565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157006025836148df565b915061570b826156a4565b604082019050919050565b6000602082019050818103600083015261572f816156f3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157926023836148df565b915061579d82615736565b604082019050919050565b600060208201905081810360008301526157c181615785565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006158246029836148df565b915061582f826157c8565b604082019050919050565b6000602082019050818103600083015261585381615817565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006158b66028836148df565b91506158c18261585a565b604082019050919050565b600060208201905081810360008301526158e5816158a9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615948602f836148df565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159b8826149ed565b91506159c3836149ed565b9250826159d3576159d261597e565b5b828204905092915050565b60006159e9826149ed565b91506159f4836149ed565b925082821015615a0757615a066152bf565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615a48601b836148df565b9150615a5382615a12565b602082019050919050565b60006020820190508181036000830152615a7781615a3b565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615ada6021836148df565b9150615ae582615a7e565b604082019050919050565b60006020820190508181036000830152615b0981615acd565b9050919050565b6000606082019050615b256000830186614a99565b615b326020830185614a99565b615b3f6040830184614a99565b949350505050565b600081519050615b56816149c1565b92915050565b600060208284031215615b7257615b71614818565b5b6000615b8084828501615b47565b91505092915050565b6000819050919050565b6000615bae615ba9615ba484615b89565b614ac3565b6149ed565b9050919050565b615bbe81615b93565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615bf9816149af565b82525050565b6000615c0b8383615bf0565b60208301905092915050565b6000602082019050919050565b6000615c2f82615bc4565b615c398185615bcf565b9350615c4483615be0565b8060005b83811015615c75578151615c5c8882615bff565b9750615c6783615c17565b925050600181019050615c48565b5085935050505092915050565b600060a082019050615c976000830188614a99565b615ca46020830187615bb5565b8181036040830152615cb68186615c24565b9050615cc56060830185614c60565b615cd26080830184614a99565b9695505050505050565b600060c082019050615cf16000830189614c60565b615cfe6020830188614a99565b615d0b6040830187615bb5565b615d186060830186615bb5565b615d256080830185614c60565b615d3260a0830184614a99565b979650505050505050565b600081519050615d4c816149f7565b92915050565b600080600060608486031215615d6b57615d6a614818565b5b6000615d7986828701615d3d565b9350506020615d8a86828701615d3d565b9250506040615d9b86828701615d3d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220613e39d4cc9972a9ac985f57499e507ab68e889ca3b7c061cf4d1130e353e7f964736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c80637ca2ea4411610175578063a9059cbb116100dc578063dd62ed3e11610095578063eaeddcc51161006f578063eaeddcc514610ad5578063ec28438a14610b00578063f2fde38b14610b29578063fce589d814610b52576102b9565b8063dd62ed3e14610a30578063e7dad4f914610a6d578063e884269a14610aaa576102b9565b8063a9059cbb14610920578063b202886b1461095d578063b6fa37bc14610988578063c49b9a80146109b3578063d12a7688146109dc578063dcda6af314610a07576102b9565b80638ea5220f1161012e5780638ea5220f1461080e57806395d89b411461083957806398118cb4146108645780639b0e2e861461088f578063a071dcf4146108b8578063a457c2d7146108e3576102b9565b80637ca2ea44146107125780637d1db4a51461073b57806385141a771461076657806385d4787b1461079157806386f6c3c1146107ba5780638da5cb5b146107e3576102b9565b8063436560d0116102195780635342acb4116101d25780635342acb41461060457806370a0823114610641578063715018a61461067e57806371b9189c1461069557806375cb1bd1146106be57806375f0a874146106e7576102b9565b8063436560d0146105065780634549b0391461053157806348c54b9d1461056e57806349bd5a5e146105855780634a74bb02146105b05780634bf2c7c9146105db576102b9565b806323b872dd1161026b57806323b872dd146103d05780632d8381191461040d578063313ce5671461044a578063317d94531461047557806339509351146104a05780633bd5d173146104dd576102b9565b8063024022f7146102be57806306fdde03146102e7578063095ea7b31461031257806313114a9d1461034f5780631694505e1461037a57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614887565b610b7d565b005b3480156102f357600080fd5b506102fc610c22565b604051610309919061496d565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190614a23565b610cb4565b6040516103469190614a7e565b60405180910390f35b34801561035b57600080fd5b50610364610cd2565b6040516103719190614aa8565b60405180910390f35b34801561038657600080fd5b5061038f610cdc565b60405161039c9190614b22565b60405180910390f35b3480156103b157600080fd5b506103ba610d02565b6040516103c79190614aa8565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190614b3d565b610d0c565b6040516104049190614a7e565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190614b90565b610de5565b6040516104419190614aa8565b60405180910390f35b34801561045657600080fd5b5061045f610e53565b60405161046c9190614bd9565b60405180910390f35b34801561048157600080fd5b5061048a610e6a565b6040516104979190614aa8565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190614a23565b610e7a565b6040516104d49190614a7e565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190614b90565b610f2d565b005b34801561051257600080fd5b5061051b6110a8565b6040516105289190614aa8565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190614c20565b6110ae565b6040516105659190614aa8565b60405180910390f35b34801561057a57600080fd5b50610583611132565b005b34801561059157600080fd5b5061059a6111e0565b6040516105a79190614c6f565b60405180910390f35b3480156105bc57600080fd5b506105c5611206565b6040516105d29190614a7e565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd9190614b90565b611219565b005b34801561061057600080fd5b5061062b60048036038101906106269190614c8a565b6112b8565b6040516106389190614a7e565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190614c8a565b61130e565b6040516106759190614aa8565b60405180910390f35b34801561068a57600080fd5b506106936113f9565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190614887565b61154c565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190614cb7565b6115f1565b005b3480156106f357600080fd5b506106fc61174e565b6040516107099190614c6f565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614b90565b611774565b005b34801561074757600080fd5b50610750611822565b60405161075d9190614aa8565b60405180910390f35b34801561077257600080fd5b5061077b611828565b6040516107889190614c6f565b60405180910390f35b34801561079d57600080fd5b506107b860048036038101906107b39190614e48565b61184e565b005b3480156107c657600080fd5b506107e160048036038101906107dc9190614e91565b6118f1565b005b3480156107ef57600080fd5b506107f8611a1f565b6040516108059190614c6f565b60405180910390f35b34801561081a57600080fd5b50610823611a48565b6040516108309190614c6f565b60405180910390f35b34801561084557600080fd5b5061084e611a6e565b60405161085b919061496d565b60405180910390f35b34801561087057600080fd5b50610879611b00565b6040516108869190614aa8565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614e48565b611b06565b005b3480156108c457600080fd5b506108cd611ba9565b6040516108da9190614aa8565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190614a23565b611baf565b6040516109179190614a7e565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190614a23565b611c7c565b6040516109549190614a7e565b60405180910390f35b34801561096957600080fd5b50610972611c9a565b60405161097f9190614aa8565b60405180910390f35b34801561099457600080fd5b5061099d611ca0565b6040516109aa9190614c6f565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190614f1e565b611cc6565b005b3480156109e857600080fd5b506109f1611daf565b6040516109fe9190614aa8565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190614fa1565b611db5565b005b348015610a3c57600080fd5b50610a576004803603810190610a529190615022565b611f1e565b604051610a649190614aa8565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f9190614c8a565b611fa5565b604051610aa19190614a7e565b60405180910390f35b348015610ab657600080fd5b50610abf611ffb565b604051610acc9190614aa8565b60405180910390f35b348015610ae157600080fd5b50610aea612001565b604051610af79190614aa8565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b229190614b90565b612007565b005b348015610b3557600080fd5b50610b506004803603810190610b4b9190614c8a565b6120b5565b005b348015610b5e57600080fd5b50610b67612277565b604051610b749190614aa8565b60405180910390f35b610b8561227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906150ae565b60405180910390fd5b610c1e82826000612285565b5050565b6060600b8054610c31906150fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5d906150fd565b8015610caa5780601f10610c7f57610100808354040283529160200191610caa565b820191906000526020600020905b815481529060010190602001808311610c8d57829003601f168201915b5050505050905090565b6000610cc8610cc161227d565b8484612330565b6001905092915050565b6000600a54905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610d198484846124fb565b610dda84610d2561227d565b610dd585604051806060016040528060288152602001615da660289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d8b61227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b959092919063ffffffff16565b612330565b600190509392505050565b6000600954821115610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e23906151a1565b60405180910390fd5b6000610e36612bf9565b9050610e4b8184612c2490919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6000610e753061130e565b905090565b6000610f23610e8761227d565b84610f1e8560036000610e9861227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b612330565b6001905092915050565b6000610f3761227d565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90615233565b60405180910390fd5b6000610fd183612ccc565b5050505050905061102a81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061108281600954612d2890919063ffffffff16565b60098190555061109d83600a54612c6e90919063ffffffff16565b600a81905550505050565b60135481565b60006008548311156110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec9061529f565b60405180910390fd5b8161111557600061110584612ccc565b505050505090508091505061112c565b600061112084612ccc565b50505050915050809150505b92915050565b61113a61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be906150ae565b60405180910390fd5b60006111d23061130e565b90506111dd81612d72565b50565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860159054906101000a900460ff1681565b61122161227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a5906150ae565b60405180910390fd5b8060108190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113a957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113f4565b6113f1600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de5565b90505b919050565b61140161227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611485906150ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61155461227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d8906150ae565b60405180910390fd5b6115ed82826001612285565b5050565b6115f961227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906150ae565b60405180910390fd5b82601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61177c61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611800906150ae565b60405180910390fd5b633b9aca008161181991906152ee565b601a8190555050565b60195481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61185661227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da906150ae565b60405180910390fd5b6118ee816001612f7c565b50565b6118f961227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906150ae565b60405180910390fd5b60646119ad8361199f8688612c6e90919063ffffffff16565b612c6e90919063ffffffff16565b146119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490615394565b60405180910390fd5b85600e8190555083601281905550826013819055508160148190555084600f8190555080601181905550505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c8054611a7d906150fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa9906150fd565b8015611af65780601f10611acb57610100808354040283529160200191611af6565b820191906000526020600020905b815481529060010190602001808311611ad957829003601f168201915b5050505050905090565b600f5481565b611b0e61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906150ae565b60405180910390fd5b611ba6816000612f7c565b50565b600e5481565b6000611c72611bbc61227d565b84611c6d85604051806060016040528060258152602001615dce6025913960036000611be661227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b959092919063ffffffff16565b612330565b6001905092915050565b6000611c90611c8961227d565b84846124fb565b6001905092915050565b60115481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cce61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906150ae565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611da49190614a7e565b60405180910390a150565b601a5481565b611dbd61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e41906150ae565b60405180910390fd5b6000828290508585905014611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90615400565b60405180910390fd5b5b84849050811015611f1757611f03611eab61227d565b868684818110611ebe57611ebd615420565b5b9050602002016020810190611ed39190614c8a565b633b9aca00868686818110611eeb57611eea615420565b5b90506020020135611efc91906152ee565b6000613073565b600181611f10919061544f565b9050611e95565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60125481565b61200f61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461209c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612093906150ae565b60405180910390fd5b633b9aca00816120ac91906152ee565b60198190555050565b6120bd61227d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612141906150ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190615517565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600033905090565b60005b8383905081101561232a5760008484838181106122a8576122a7615420565b5b90506020020160208101906122bd9190614c8a565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061232290615537565b915050612288565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612397906155f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790615684565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124ee9190614aa8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290615716565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d2906157a8565b60405180910390fd5b6000811161261e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126159061583a565b60405180910390fd5b612626611a1f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126945750612664611a1f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126ee5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561273957601954811115612738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272f906158cc565b60405180910390fd5b5b60006127443061130e565b905060195481106127555760195490505b601a5481101580156127745750601860149054906101000a900460ff16155b80156127ce5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156127e65750601860159054906101000a900460ff165b1561285c57601a5481106127fa57601a5490505b600061282460646128166011548561338490919063ffffffff16565b612c2490919063ffffffff16565b9050600061283b8284612d2890919063ffffffff16565b905060008111156128505761284f816133ff565b5b61285982612d72565b50505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146129cc57600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561293e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129359061595e565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c29061595e565b60405180910390fd5b5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a725750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ab15750612a81611a1f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612af05750612ac0611a1f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050808015612b0157506000601054115b15612b81576000606460105485612b1891906152ee565b612b2291906159ad565b90506000811115612b5d57612b5c86601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000613073565b5b612b7b8686612b758488612d2890919063ffffffff16565b85613073565b50612b8e565b612b8d85858584613073565b5b5050505050565b6000838311158290612bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd4919061496d565b60405180910390fd5b5060008385612bec91906159de565b9050809150509392505050565b6000806000612c066134d5565b91509150612c1d8183612c2490919063ffffffff16565b9250505090565b6000612c6683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613788565b905092915050565b6000808284612c7d919061544f565b905083811015612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990615a5e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ce38a6137eb565b9250925092506000806000612d018d8686612cfc612bf9565b613845565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612d6a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b95565b905092915050565b6001601860146101000a81548160ff021916908315150217905550612d96816138ce565b60004790506000612dc56064612db76012548561338490919063ffffffff16565b612c2490919063ffffffff16565b90506000612df16064612de36013548661338490919063ffffffff16565b612c2490919063ffffffff16565b90506000612e1d6064612e0f6014548761338490919063ffffffff16565b612c2490919063ffffffff16565b9050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612e87573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612ef0573d6000803e3d6000fd5b50601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f59573d6000803e3d6000fd5b50505050506000601860146101000a81548160ff02191690831515021790555050565b60005b825181101561306e576000838281518110612f9d57612f9c615420565b5b60200260200101519050821561300a576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061305a565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061306690615537565b915050612f7f565b505050565b8061308157613080613b11565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131245750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313957613134848484613b54565b613370565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131dc5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131f1576131ec848484613db4565b61336f565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132955750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132aa576132a5848484614014565b61336e565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561334c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133615761335c8484846141df565b61336d565b61336c848484614014565b5b5b5b5b8061337e5761337d6144d4565b5b50505050565b60008083141561339757600090506133f9565b600082846133a591906152ee565b90508284826133b491906159ad565b146133f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133eb90615af0565b60405180910390fd5b809150505b92915050565b6001601860146101000a81548160ff0219169083151502179055506000613430600283612c2490919063ffffffff16565b905060006134478284612d2890919063ffffffff16565b90506000479050613457836138ce565b600061346c8247612d2890919063ffffffff16565b905061347883826144e8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516134ab93929190615b10565b60405180910390a1505050506000601860146101000a81548160ff02191690831515021790555050565b600080600060095490506000600854905060005b60078054905081101561374b5782600160006007848154811061350f5761350e615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135fd575081600260006007848154811061359557613594615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136145760095460085494509450505050613784565b6136a4600160006007848154811061362f5761362e615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612d2890919063ffffffff16565b925061373660026000600784815481106136c1576136c0615420565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612d2890919063ffffffff16565b9150808061374390615537565b9150506134e9565b50613763600854600954612c2490919063ffffffff16565b82101561377b57600954600854935093505050613784565b81819350935050505b9091565b600080831182906137cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c6919061496d565b60405180910390fd5b50600083856137de91906159ad565b9050809150509392505050565b6000806000806137fa856145cd565b90506000613807866145fe565b9050600061383082613822858a612d2890919063ffffffff16565b612d2890919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061385e858961338490919063ffffffff16565b90506000613875868961338490919063ffffffff16565b9050600061388c878961338490919063ffffffff16565b905060006138b5826138a78587612d2890919063ffffffff16565b612d2890919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156138eb576138ea614d0a565b5b6040519080825280602002602001820160405280156139195781602001602082028036833780820191505090505b509050308160008151811061393157613930615420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139fc9190615b5c565b81600181518110613a1057613a0f615420565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7730601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612330565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613adb959493929190615c82565b600060405180830381600087803b158015613af557600080fd5b505af1158015613b09573d6000803e3d6000fd5b505050505050565b6000600e54148015613b2557506000600f54145b15613b2f57613b52565b600e54601581905550600f546016819055506000600e819055506000600f819055505b565b600080600080600080613b6687612ccc565b955095509550955095509550613bc487600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cee85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3a8161462f565b613d4484836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613da19190614aa8565b60405180910390a3505050505050505050565b600080600080600080613dc687612ccc565b955095509550955095509550613e2486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eb983600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f4e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9a8161462f565b613fa484836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140019190614aa8565b60405180910390a3505050505050505050565b60008060008060008061402687612ccc565b95509550955095509550955061408486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141658161462f565b61416f84836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141cc9190614aa8565b60405180910390a3505050505050505050565b6000806000806000806141f187612ccc565b95509550955095509550955061424f87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142e486600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2890919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437983600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061440e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445a8161462f565b61446484836147d4565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144c19190614aa8565b60405180910390a3505050505050505050565b601554600e81905550601654600f81905550565b61451530601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612330565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614561611a1f565b426040518863ffffffff1660e01b815260040161458396959493929190615cdc565b60606040518083038185885af11580156145a1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145c69190615d52565b5050505050565b60006145f760646145e9600e548561338490919063ffffffff16565b612c2490919063ffffffff16565b9050919050565b6000614628606461461a600f548561338490919063ffffffff16565b612c2490919063ffffffff16565b9050919050565b6000614639612bf9565b90506000614650828461338490919063ffffffff16565b90506146a481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147cf5761478b83600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c6e90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6147e982600954612d2890919063ffffffff16565b60098190555061480481600a54612c6e90919063ffffffff16565b600a819055505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261484757614846614822565b5b8235905067ffffffffffffffff81111561486457614863614827565b5b6020830191508360208202830111156148805761487f61482c565b5b9250929050565b6000806020838503121561489e5761489d614818565b5b600083013567ffffffffffffffff8111156148bc576148bb61481d565b5b6148c885828601614831565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561490e5780820151818401526020810190506148f3565b8381111561491d576000848401525b50505050565b6000601f19601f8301169050919050565b600061493f826148d4565b61494981856148df565b93506149598185602086016148f0565b61496281614923565b840191505092915050565b600060208201905081810360008301526149878184614934565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149ba8261498f565b9050919050565b6149ca816149af565b81146149d557600080fd5b50565b6000813590506149e7816149c1565b92915050565b6000819050919050565b614a00816149ed565b8114614a0b57600080fd5b50565b600081359050614a1d816149f7565b92915050565b60008060408385031215614a3a57614a39614818565b5b6000614a48858286016149d8565b9250506020614a5985828601614a0e565b9150509250929050565b60008115159050919050565b614a7881614a63565b82525050565b6000602082019050614a936000830184614a6f565b92915050565b614aa2816149ed565b82525050565b6000602082019050614abd6000830184614a99565b92915050565b6000819050919050565b6000614ae8614ae3614ade8461498f565b614ac3565b61498f565b9050919050565b6000614afa82614acd565b9050919050565b6000614b0c82614aef565b9050919050565b614b1c81614b01565b82525050565b6000602082019050614b376000830184614b13565b92915050565b600080600060608486031215614b5657614b55614818565b5b6000614b64868287016149d8565b9350506020614b75868287016149d8565b9250506040614b8686828701614a0e565b9150509250925092565b600060208284031215614ba657614ba5614818565b5b6000614bb484828501614a0e565b91505092915050565b600060ff82169050919050565b614bd381614bbd565b82525050565b6000602082019050614bee6000830184614bca565b92915050565b614bfd81614a63565b8114614c0857600080fd5b50565b600081359050614c1a81614bf4565b92915050565b60008060408385031215614c3757614c36614818565b5b6000614c4585828601614a0e565b9250506020614c5685828601614c0b565b9150509250929050565b614c69816149af565b82525050565b6000602082019050614c846000830184614c60565b92915050565b600060208284031215614ca057614c9f614818565b5b6000614cae848285016149d8565b91505092915050565b600080600060608486031215614cd057614ccf614818565b5b6000614cde868287016149d8565b9350506020614cef868287016149d8565b9250506040614d00868287016149d8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614d4282614923565b810181811067ffffffffffffffff82111715614d6157614d60614d0a565b5b80604052505050565b6000614d7461480e565b9050614d808282614d39565b919050565b600067ffffffffffffffff821115614da057614d9f614d0a565b5b602082029050602081019050919050565b6000614dc4614dbf84614d85565b614d6a565b90508083825260208201905060208402830185811115614de757614de661482c565b5b835b81811015614e105780614dfc88826149d8565b845260208401935050602081019050614de9565b5050509392505050565b600082601f830112614e2f57614e2e614822565b5b8135614e3f848260208601614db1565b91505092915050565b600060208284031215614e5e57614e5d614818565b5b600082013567ffffffffffffffff811115614e7c57614e7b61481d565b5b614e8884828501614e1a565b91505092915050565b60008060008060008060c08789031215614eae57614ead614818565b5b6000614ebc89828a01614a0e565b9650506020614ecd89828a01614a0e565b9550506040614ede89828a01614a0e565b9450506060614eef89828a01614a0e565b9350506080614f0089828a01614a0e565b92505060a0614f1189828a01614a0e565b9150509295509295509295565b600060208284031215614f3457614f33614818565b5b6000614f4284828501614c0b565b91505092915050565b60008083601f840112614f6157614f60614822565b5b8235905067ffffffffffffffff811115614f7e57614f7d614827565b5b602083019150836020820283011115614f9a57614f9961482c565b5b9250929050565b60008060008060408587031215614fbb57614fba614818565b5b600085013567ffffffffffffffff811115614fd957614fd861481d565b5b614fe587828801614831565b9450945050602085013567ffffffffffffffff8111156150085761500761481d565b5b61501487828801614f4b565b925092505092959194509250565b6000806040838503121561503957615038614818565b5b6000615047858286016149d8565b9250506020615058858286016149d8565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150986020836148df565b91506150a382615062565b602082019050919050565b600060208201905081810360008301526150c78161508b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061511557607f821691505b60208210811415615129576151286150ce565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b600061518b602a836148df565b91506151968261512f565b604082019050919050565b600060208201905081810360008301526151ba8161517e565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061521d602c836148df565b9150615228826151c1565b604082019050919050565b6000602082019050818103600083015261524c81615210565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615289601f836148df565b915061529482615253565b602082019050919050565b600060208201905081810360008301526152b88161527c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152f9826149ed565b9150615304836149ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561533d5761533c6152bf565b5b828202905092915050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b600061537e601d836148df565b915061538982615348565b602082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b60006153ea6017836148df565b91506153f5826153b4565b602082019050919050565b60006020820190508181036000830152615419816153dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061545a826149ed565b9150615465836149ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561549a576154996152bf565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155016026836148df565b915061550c826154a5565b604082019050919050565b60006020820190508181036000830152615530816154f4565b9050919050565b6000615542826149ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615575576155746152bf565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155dc6024836148df565b91506155e782615580565b604082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061566e6022836148df565b915061567982615612565b604082019050919050565b6000602082019050818103600083015261569d81615661565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157006025836148df565b915061570b826156a4565b604082019050919050565b6000602082019050818103600083015261572f816156f3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157926023836148df565b915061579d82615736565b604082019050919050565b600060208201905081810360008301526157c181615785565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006158246029836148df565b915061582f826157c8565b604082019050919050565b6000602082019050818103600083015261585381615817565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006158b66028836148df565b91506158c18261585a565b604082019050919050565b600060208201905081810360008301526158e5816158a9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615948602f836148df565b9150615953826158ec565b604082019050919050565b600060208201905081810360008301526159778161593b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159b8826149ed565b91506159c3836149ed565b9250826159d3576159d261597e565b5b828204905092915050565b60006159e9826149ed565b91506159f4836149ed565b925082821015615a0757615a066152bf565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615a48601b836148df565b9150615a5382615a12565b602082019050919050565b60006020820190508181036000830152615a7781615a3b565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615ada6021836148df565b9150615ae582615a7e565b604082019050919050565b60006020820190508181036000830152615b0981615acd565b9050919050565b6000606082019050615b256000830186614a99565b615b326020830185614a99565b615b3f6040830184614a99565b949350505050565b600081519050615b56816149c1565b92915050565b600060208284031215615b7257615b71614818565b5b6000615b8084828501615b47565b91505092915050565b6000819050919050565b6000615bae615ba9615ba484615b89565b614ac3565b6149ed565b9050919050565b615bbe81615b93565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615bf9816149af565b82525050565b6000615c0b8383615bf0565b60208301905092915050565b6000602082019050919050565b6000615c2f82615bc4565b615c398185615bcf565b9350615c4483615be0565b8060005b83811015615c75578151615c5c8882615bff565b9750615c6783615c17565b925050600181019050615c48565b5085935050505092915050565b600060a082019050615c976000830188614a99565b615ca46020830187615bb5565b8181036040830152615cb68186615c24565b9050615cc56060830185614c60565b615cd26080830184614a99565b9695505050505050565b600060c082019050615cf16000830189614c60565b615cfe6020830188614a99565b615d0b6040830187615bb5565b615d186060830186615bb5565b615d256080830185614c60565b615d3260a0830184614a99565b979650505050505050565b600081519050615d4c816149f7565b92915050565b600080600060608486031215615d6b57615d6a614818565b5b6000615d7986828701615d3d565b9350506020615d8a86828701615d3d565b9250506040615d9b86828701615d3d565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220613e39d4cc9972a9ac985f57499e507ab68e889ca3b7c061cf4d1130e353e7f964736f6c634300080a0033
Deployed Bytecode Sourcemap
24763:21410:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32410:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28017:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28929:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29922:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26004:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28294:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29098:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31380:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28203:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34892:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29419:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30551:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25793:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30936:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34089:167;;;;;;;;;;;;;:::i;:::-;;26052:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26117:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32780:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38339:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28397:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16276:148;;;;;;;;;;;;;:::i;:::-;;32283:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33719:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26304:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33535:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26164:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26545:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34264:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32878:649;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15633:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26469:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28108:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25616:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34399:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25584:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29645:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28603:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25687:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26386:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35015:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26225:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30017:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28778:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33972:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25843:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25741:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30426:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16579:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25654:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32410:118;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32490:30:::1;32503:9;;32514:5;32490:12;:30::i;:::-;32410:118:::0;;:::o;28017:83::-;28054:13;28087:5;28080:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28017:83;:::o;28929:161::-;29004:4;29021:39;29030:12;:10;:12::i;:::-;29044:7;29053:6;29021:8;:39::i;:::-;29078:4;29071:11;;28929:161;;;;:::o;29922:87::-;29964:7;29991:10;;29984:17;;29922:87;:::o;26004:41::-;;;;;;;;;;;;;:::o;28294:95::-;28347:7;28374;;28367:14;;28294:95;:::o;29098:313::-;29196:4;29213:36;29223:6;29231:9;29242:6;29213:9;:36::i;:::-;29260:121;29269:6;29277:12;:10;:12::i;:::-;29291:89;29329:6;29291:89;;;;;;;;;;;;;;;;;:11;:19;29303:6;29291:19;;;;;;;;;;;;;;;:33;29311:12;:10;:12::i;:::-;29291:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29260:8;:121::i;:::-;29399:4;29392:11;;29098:313;;;;;:::o;31380:253::-;31446:7;31485;;31474;:18;;31466:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31550:19;31573:10;:8;:10::i;:::-;31550:33;;31601:24;31613:11;31601:7;:11;;:24;;;;:::i;:::-;31594:31;;;31380:253;;;:::o;28203:83::-;28244:5;28269:9;;;;;;;;;;;28262:16;;28203:83;:::o;34892:115::-;34948:7;34975:24;34993:4;34975:9;:24::i;:::-;34968:31;;34892:115;:::o;29419:218::-;29507:4;29524:83;29533:12;:10;:12::i;:::-;29547:7;29556:50;29595:10;29556:11;:25;29568:12;:10;:12::i;:::-;29556:25;;;;;;;;;;;;;;;:34;29582:7;29556:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29524:8;:83::i;:::-;29625:4;29618:11;;29419:218;;;;:::o;30551:377::-;30603:14;30620:12;:10;:12::i;:::-;30603:29;;30652:11;:19;30664:6;30652:19;;;;;;;;;;;;;;;;;;;;;;;;;30651:20;30643:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30732:15;30756:19;30767:7;30756:10;:19::i;:::-;30731:44;;;;;;;30804:28;30824:7;30804;:15;30812:6;30804:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30786:7;:15;30794:6;30786:15;;;;;;;;;;;;;;;:46;;;;30853:20;30865:7;30853;;:11;;:20;;;;:::i;:::-;30843:7;:30;;;;30897:23;30912:7;30897:10;;:14;;:23;;;;:::i;:::-;30884:10;:36;;;;30592:336;;30551:377;:::o;25793:43::-;;;;:::o;30936:436::-;31026:7;31065;;31054;:18;;31046:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31124:17;31119:246;;31159:15;31183:19;31194:7;31183:10;:19::i;:::-;31158:44;;;;;;;31224:7;31217:14;;;;;31119:246;31266:23;31297:19;31308:7;31297:10;:19::i;:::-;31264:52;;;;;;;31338:15;31331:22;;;30936:436;;;;;:::o;34089:167::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34144:28:::1;34175:24;34193:4;34175:9;:24::i;:::-;34144:55;;34210:38;34227:20;34210:16;:38::i;:::-;34133:123;34089:167::o:0;26052:28::-;;;;;;;;;;;;;:::o;26117:40::-;;;;;;;;;;;;;:::o;32780:86::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32855:3:::1;32845:7;:13;;;;32780:86:::0;:::o;38339:123::-;38403:4;38427:18;:27;38446:7;38427:27;;;;;;;;;;;;;;;;;;;;;;;;;38420:34;;38339:123;;;:::o;28397:198::-;28463:7;28487:11;:20;28499:7;28487:20;;;;;;;;;;;;;;;;;;;;;;;;;28483:49;;;28516:7;:16;28524:7;28516:16;;;;;;;;;;;;;;;;28509:23;;;;28483:49;28550:37;28570:7;:16;28578:7;28570:16;;;;;;;;;;;;;;;;28550:19;:37::i;:::-;28543:44;;28397:198;;;;:::o;16276:148::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16383:1:::1;16346:40;;16367:6;::::0;::::1;;;;;;;;16346:40;;;;;;;;;;;;16414:1;16397:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16276:148::o:0;32283:119::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32365:29:::1;32378:9;;32389:4;32365:12;:29::i;:::-;32283:119:::0;;:::o;33719:245::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33860:16:::1;33842:15;;:34;;;;;;;;;;;;;;;;;;33906:17;33887:16;;:36;;;;;;;;;;;;;;;;;;33946:10;33934:9;;:22;;;;;;;;;;;;;;;;;;33719:245:::0;;;:::o;26304:75::-;;;;;;;;;;;;;:::o;33535:176::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33698:5:::1;33665:30;:38;;;;:::i;:::-;33633:29;:70;;;;33535:176:::0;:::o;26164:54::-;;;;:::o;26545:70::-;;;;;;;;;;;;;:::o;34264:127::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34347:36:::1;34367:9;34378:4;34347:19;:36::i;:::-;34264:127:::0;:::o;32878:649::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33186:3:::1;33106:76;33164:17;33106:53;33134:24;33106:23;:27;;:53;;;;:::i;:::-;:57;;:76;;;;:::i;:::-;:83;33098:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;33243:7;33234:6;:16;;;;33289:23;33261:25;:51;;;;33349:24;33323:23;:50;;;;33403:17;33384:16;:36;;;;33446:13;33431:12;:28;;;;33500:19;33470:27;:49;;;;32878:649:::0;;;;;;:::o;15633:79::-;15671:7;15698:6;;;;;;;;;;;15691:13;;15633:79;:::o;26469:69::-;;;;;;;;;;;;;:::o;28108:87::-;28147:13;28180:7;28173:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28108:87;:::o;25616:31::-;;;;:::o;34399:131::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34485:37:::1;34505:9;34516:5;34485:19;:37::i;:::-;34399:131:::0;:::o;25584:25::-;;;;:::o;29645:269::-;29738:4;29755:129;29764:12;:10;:12::i;:::-;29778:7;29787:96;29826:15;29787:96;;;;;;;;;;;;;;;;;:11;:25;29799:12;:10;:12::i;:::-;29787:25;;;;;;;;;;;;;;;:34;29813:7;29787:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29755:8;:129::i;:::-;29902:4;29895:11;;29645:269;;;;:::o;28603:167::-;28681:4;28698:42;28708:12;:10;:12::i;:::-;28722:9;28733:6;28698:9;:42::i;:::-;28758:4;28751:11;;28603:167;;;;:::o;25687:47::-;;;;:::o;26386:76::-;;;;;;;;;;;;;:::o;35015:171::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35116:8:::1;35092:21;;:32;;;;;;;;;;;;;;;;;;35140:38;35169:8;35140:38;;;;;;:::i;:::-;;;;;;;;35015:171:::0;:::o;26225:70::-;;;;:::o;30017:401::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30124:16:::1;30184:7;;:14;;30163:10;;:17;;:35;30155:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30237:174;30254:10;;:17;;30243:8;:28;30237:174;;;30287:84;30302:12;:10;:12::i;:::-;30316:10;;30327:8;30316:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30358:5;30338:7;;30346:8;30338:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;30365:5;30287:14;:84::i;:::-;30398:1;30386:13;;;;;:::i;:::-;;;30237:174;;;30113:305;30017:401:::0;;;;:::o;28778:143::-;28859:7;28886:11;:18;28898:5;28886:18;;;;;;;;;;;;;;;:27;28905:7;28886:27;;;;;;;;;;;;;;;;28879:34;;28778:143;;;;:::o;33972:109::-;34033:4;34057:10;:16;34068:4;34057:16;;;;;;;;;;;;;;;;;;;;;;;;;34050:23;;33972:109;;;:::o;25843:36::-;;;;:::o;25741:45::-;;;;:::o;30426:119::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30532:5:::1;30518:11;:19;;;;:::i;:::-;30503:12;:34;;;;30426:119:::0;:::o;16579:244::-;15855:12;:10;:12::i;:::-;15845:22;;:6;;;;;;;;;;:22;;;15837:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16688:1:::1;16668:22;;:8;:22;;;;16660:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16778:8;16749:38;;16770:6;::::0;::::1;;;;;;;;16749:38;;;;;;;;;;;;16807:8;16798:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16579:244:::0;:::o;25654:26::-;;;;:::o;8123:98::-;8176:7;8203:10;8196:17;;8123:98;:::o;32536:236::-;32623:9;32618:147;32642:9;;:16;;32638:1;:20;32618:147;;;32680:12;32695:9;;32705:1;32695:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;32680:27;;32749:4;32722:18;:24;32741:4;32722:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32665:100;32660:3;;;;;:::i;:::-;;;;32618:147;;;;32536:236;;;:::o;38470:337::-;38580:1;38563:19;;:5;:19;;;;38555:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38661:1;38642:21;;:7;:21;;;;38634:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38745:6;38715:11;:18;38727:5;38715:18;;;;;;;;;;;;;;;:27;38734:7;38715:27;;;;;;;;;;;;;;;:36;;;;38783:7;38767:32;;38776:5;38767:32;;;38792:6;38767:32;;;;;;:::i;:::-;;;;;;;;38470:337;;;:::o;38815:2542::-;38953:1;38937:18;;:4;:18;;;;38929:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39030:1;39016:16;;:2;:16;;;;39008:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39100:1;39091:6;:10;39083:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39169:7;:5;:7::i;:::-;39161:15;;:4;:15;;;;:32;;;;;39186:7;:5;:7::i;:::-;39180:13;;:2;:13;;;;39161:32;:52;;;;;39203:10;;;;;;;;;;;39197:16;;:2;:16;;;;39161:52;39158:145;;;39246:12;;39236:6;:22;;39228:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39158:145;39316:28;39347:24;39365:4;39347:9;:24::i;:::-;39316:55;;39411:12;;39387:20;:36;39384:112;;39472:12;;39449:35;;39384:112;39534:29;;39510:20;:53;;:74;;;;;39568:16;;;;;;;;;;;39567:17;39510:74;:99;;;;;39596:13;;;;;;;;;;;39588:21;;:4;:21;;;;39510:99;:124;;;;;39613:21;;;;;;;;;;;39510:124;39506:1089;;;39678:29;;39654:20;:53;39651:145;;39751:29;;39728:52;;39651:145;39979:28;40010:62;40068:3;40010:53;40035:27;;40010:20;:24;;:53;;;;:::i;:::-;:57;;:62;;;;:::i;:::-;39979:93;;40087:27;40117:46;40142:20;40117;:24;;:46;;;;:::i;:::-;40087:76;;40346:1;40324:19;:23;40321:131;;;40401:35;40416:19;40401:14;:35::i;:::-;40321:131;40530:38;40547:20;40530:16;:38::i;:::-;39636:959;;39506:1089;40618:13;;;;;;;;;;;40610:21;;:4;:21;;;40607:222;;40657:10;:16;40668:4;40657:16;;;;;;;;;;;;;;;;;;;;;;;;;40656:17;40648:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40750:10;:14;40761:2;40750:14;;;;;;;;;;;;;;;;;;;;;;;;;40749:15;40741:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40607:222;40849:12;40865:18;:24;40884:4;40865:24;;;;;;;;;;;;;;;;;;;;;;;;;40864:25;:52;;;;;40894:18;:22;40913:2;40894:22;;;;;;;;;;;;;;;;;;;;;;;;;40893:23;40864:52;:71;;;;;40928:7;:5;:7::i;:::-;40920:15;;:4;:15;;;;40864:71;:88;;;;;40945:7;:5;:7::i;:::-;40939:13;;:2;:13;;;;40864:88;40849:103;;40976:7;:22;;;;;40997:1;40987:7;;:11;40976:22;40973:377;;;41015:22;41059:3;41049:7;;41040:6;:16;;;;:::i;:::-;:22;;;;:::i;:::-;41015:47;;41097:1;41080:14;:18;41077:113;;;41119:55;41134:4;41140:10;;;;;;;;;;;41152:14;41168:5;41119:14;:55::i;:::-;41077:113;41204:61;41219:4;41225:2;41229:26;41240:14;41229:6;:10;;:26;;;;:::i;:::-;41257:7;41204:14;:61::i;:::-;41000:277;40973:377;;;41297:41;41312:4;41318:2;41322:6;41330:7;41297:14;:41::i;:::-;40973:377;38918:2439;;38815:2542;;;:::o;4454:192::-;4540:7;4573:1;4568;:6;;4576:12;4560:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4600:9;4616:1;4612;:5;;;;:::i;:::-;4600:17;;4637:1;4630:8;;;4454:192;;;;;:::o;36588:163::-;36629:7;36650:15;36667;36686:19;:17;:19::i;:::-;36649:56;;;;36723:20;36735:7;36723;:11;;:20;;;;:::i;:::-;36716:27;;;;36588:163;:::o;5852:132::-;5910:7;5937:39;5941:1;5944;5937:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5930:46;;5852:132;;;;:::o;3551:181::-;3609:7;3629:9;3645:1;3641;:5;;;;:::i;:::-;3629:17;;3670:1;3665;:6;;3657:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3723:1;3716:8;;;3551:181;;;;:::o;35386:419::-;35445:7;35454;35463;35472;35481;35490;35511:23;35536:12;35550:18;35572:20;35584:7;35572:11;:20::i;:::-;35510:82;;;;;;35604:15;35621:23;35646:12;35662:50;35674:7;35683:4;35689:10;35701;:8;:10::i;:::-;35662:11;:50::i;:::-;35603:109;;;;;;35731:7;35740:15;35757:4;35763:15;35780:4;35786:10;35723:74;;;;;;;;;;;;;;;;;;35386:419;;;;;;;:::o;4015:136::-;4073:7;4100:43;4104:1;4107;4100:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4093:50;;4015:136;;;;:::o;41857:628::-;26933:4;26914:16;;:23;;;;;;;;;;;;;;;;;;41954:38:::1;41971:20;41954:16;:38::i;:::-;42003:22;42028:21;42003:46;;42060:22;42085:54;42135:3;42085:45;42104:25;;42085:14;:18;;:45;;;;:::i;:::-;:49;;:54;;;;:::i;:::-;42060:79;;42150:23;42176:52;42224:3;42176:43;42195:23;;42176:14;:18;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;42150:78;;42239:16;42258:45;42299:3;42258:36;42277:16;;42258:14;:18;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;42239:64;;42324:15;;;;;;;;;;;42316:33;;:49;42350:14;42316:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42384:16;;;;;;;;;;;42376:34;;:51;42411:15;42376:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42446:9;;;;;;;;;;;42438:27;;:37;42466:8;42438:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41933:552;;;;26979:5:::0;26960:16;;:24;;;;;;;;;;;;;;;;;;41857:628;:::o;34538:346::-;34633:9;34628:249;34652:9;:16;34648:1;:20;34628:249;;;34690:12;34705:9;34715:1;34705:12;;;;;;;;:::i;:::-;;;;;;;;34690:27;;34735:7;34732:134;;;34782:4;34763:10;:16;34774:4;34763:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;34732:134;;;34834:10;:16;34845:4;34834:16;;;;;;;;;;;;;;;;34827:23;;;;;;;;;;;34732:134;34675:202;34670:3;;;;;:::i;:::-;;;;34628:249;;;;34538:346;;:::o;43684:820::-;43797:7;43793:40;;43819:14;:12;:14::i;:::-;43793:40;43850:11;:19;43862:6;43850:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;43874:11;:22;43886:9;43874:22;;;;;;;;;;;;;;;;;;;;;;;;;43873:23;43850:46;43846:597;;;43913:48;43935:6;43943:9;43954:6;43913:21;:48::i;:::-;43846:597;;;43984:11;:19;43996:6;43984:19;;;;;;;;;;;;;;;;;;;;;;;;;43983:20;:46;;;;;44007:11;:22;44019:9;44007:22;;;;;;;;;;;;;;;;;;;;;;;;;43983:46;43979:464;;;44046:46;44066:6;44074:9;44085:6;44046:19;:46::i;:::-;43979:464;;;44115:11;:19;44127:6;44115:19;;;;;;;;;;;;;;;;;;;;;;;;;44114:20;:47;;;;;44139:11;:22;44151:9;44139:22;;;;;;;;;;;;;;;;;;;;;;;;;44138:23;44114:47;44110:333;;;44178:44;44196:6;44204:9;44215:6;44178:17;:44::i;:::-;44110:333;;;44244:11;:19;44256:6;44244:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;44267:11;:22;44279:9;44267:22;;;;;;;;;;;;;;;;;;;;;;;;;44244:45;44240:203;;;44306:48;44328:6;44336:9;44347:6;44306:21;:48::i;:::-;44240:203;;;44387:44;44405:6;44413:9;44424:6;44387:17;:44::i;:::-;44240:203;44110:333;43979:464;43846:597;44459:7;44455:41;;44481:15;:13;:15::i;:::-;44455:41;43684:820;;;;:::o;4905:471::-;4963:7;5213:1;5208;:6;5204:47;;;5238:1;5231:8;;;;5204:47;5263:9;5279:1;5275;:5;;;;:::i;:::-;5263:17;;5308:1;5303;5299;:5;;;;:::i;:::-;:10;5291:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5367:1;5360:8;;;4905:471;;;;;:::o;41365:484::-;26933:4;26914:16;;:23;;;;;;;;;;;;;;;;;;41452:12:::1;41467:27;41492:1;41467:20;:24;;:27;;;;:::i;:::-;41452:42;;41505:17;41525:30;41550:4;41525:20;:24;;:30;;;;:::i;:::-;41505:50;;41568:22;41593:21;41568:46;;41627:22;41644:4;41627:16;:22::i;:::-;41662:18;41683:41;41709:14;41683:21;:25;;:41;;;;:::i;:::-;41662:62;;41737:35;41750:9;41761:10;41737:12;:35::i;:::-;41798:43;41813:4;41819:10;41831:9;41798:43;;;;;;;;:::i;:::-;;;;;;;;41439:410;;;;26979:5:::0;26960:16;;:24;;;;;;;;;;;;;;;;;;41365:484;:::o;36759:555::-;36809:7;36818;36838:15;36856:7;;36838:25;;36874:15;36892:7;;36874:25;;36915:9;36910:289;36934:9;:16;;;;36930:1;:20;36910:289;;;37000:7;36976;:21;36984:9;36994:1;36984:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36976:21;;;;;;;;;;;;;;;;:31;:66;;;;37035:7;37011;:21;37019:9;37029:1;37019:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37011:21;;;;;;;;;;;;;;;;:31;36976:66;36972:97;;;37052:7;;37061;;37044:25;;;;;;;;;36972:97;37094:34;37106:7;:21;37114:9;37124:1;37114:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37106:21;;;;;;;;;;;;;;;;37094:7;:11;;:34;;;;:::i;:::-;37084:44;;37153:34;37165:7;:21;37173:9;37183:1;37173:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37165:21;;;;;;;;;;;;;;;;37153:7;:11;;:34;;;;:::i;:::-;37143:44;;36952:3;;;;;:::i;:::-;;;;36910:289;;;;37223:20;37235:7;;37223;;:11;;:20;;;;:::i;:::-;37213:7;:30;37209:61;;;37253:7;;37262;;37245:25;;;;;;;;37209:61;37289:7;37298;37281:25;;;;;;36759:555;;;:::o;6480:278::-;6566:7;6598:1;6594;:5;6601:12;6586:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6625:9;6641:1;6637;:5;;;;:::i;:::-;6625:17;;6749:1;6742:8;;;6480:278;;;;;:::o;35813:330::-;35873:7;35882;35891;35911:12;35926:24;35942:7;35926:15;:24::i;:::-;35911:39;;35961:18;35982:30;36004:7;35982:21;:30::i;:::-;35961:51;;36023:23;36049:33;36071:10;36049:17;36061:4;36049:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36023:59;;36101:15;36118:4;36124:10;36093:42;;;;;;;;;35813:330;;;;;:::o;36151:429::-;36266:7;36275;36284;36304:15;36322:24;36334:11;36322:7;:11;;:24;;;;:::i;:::-;36304:42;;36357:12;36372:21;36381:11;36372:4;:8;;:21;;;;:::i;:::-;36357:36;;36404:18;36425:27;36440:11;36425:10;:14;;:27;;;;:::i;:::-;36404:48;;36463:23;36489:33;36511:10;36489:17;36501:4;36489:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36463:59;;36541:7;36550:15;36567:4;36533:39;;;;;;;;;;36151:429;;;;;;;;:::o;42493:589::-;42619:21;42657:1;42643:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42619:40;;42688:4;42670;42675:1;42670:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42714:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42704:4;42709:1;42704:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42749:62;42766:4;42781:15;;;;;;;;;;;42799:11;42749:8;:62::i;:::-;42850:15;;;;;;;;;;;:66;;;42931:11;42957:1;43001:4;43028;43048:15;42850:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42548:534;42493:589;:::o;37971:229::-;38028:1;38018:6;;:11;:32;;;;;38049:1;38033:12;;:17;38018:32;38014:45;;;38052:7;;38014:45;38089:6;;38071:15;:24;;;;38130:12;;38106:21;:36;;;;38164:1;38155:6;:10;;;;38191:1;38176:12;:16;;;;37971:229;:::o;45605:563::-;45708:15;45725:23;45750:12;45764:23;45789:12;45803:18;45825:19;45836:7;45825:10;:19::i;:::-;45707:137;;;;;;;;;;;;45873:28;45893:7;45873;:15;45881:6;45873:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45855:7;:15;45863:6;45855:15;;;;;;;;;;;;;;;:46;;;;45930:28;45950:7;45930;:15;45938:6;45930:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45912:7;:15;45920:6;45912:15;;;;;;;;;;;;;;;:46;;;;45990:39;46013:15;45990:7;:18;45998:9;45990:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45969:7;:18;45977:9;45969:18;;;;;;;;;;;;;;;:60;;;;46040:26;46055:10;46040:14;:26::i;:::-;46077:23;46089:4;46095;46077:11;:23::i;:::-;46133:9;46116:44;;46125:6;46116:44;;;46144:15;46116:44;;;;;;:::i;:::-;;;;;;;;45696:472;;;;;;45605:563;;;:::o;45022:575::-;45123:15;45140:23;45165:12;45179:23;45204:12;45218:18;45240:19;45251:7;45240:10;:19::i;:::-;45122:137;;;;;;;;;;;;45288:28;45308:7;45288;:15;45296:6;45288:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45270:7;:15;45278:6;45270:15;;;;;;;;;;;;;;;:46;;;;45348:39;45371:15;45348:7;:18;45356:9;45348:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45327:7;:18;45335:9;45327:18;;;;;;;;;;;;;;;:60;;;;45419:39;45442:15;45419:7;:18;45427:9;45419:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45398:7;:18;45406:9;45398:18;;;;;;;;;;;;;;;:60;;;;45469:26;45484:10;45469:14;:26::i;:::-;45506:23;45518:4;45524;45506:11;:23::i;:::-;45562:9;45545:44;;45554:6;45545:44;;;45573:15;45545:44;;;;;;:::i;:::-;;;;;;;;45111:486;;;;;;45022:575;;;:::o;44512:502::-;44611:15;44628:23;44653:12;44667:23;44692:12;44706:18;44728:19;44739:7;44728:10;:19::i;:::-;44610:137;;;;;;;;;;;;44776:28;44796:7;44776;:15;44784:6;44776:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44758:7;:15;44766:6;44758:15;;;;;;;;;;;;;;;:46;;;;44836:39;44859:15;44836:7;:18;44844:9;44836:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44815:7;:18;44823:9;44815:18;;;;;;;;;;;;;;;:60;;;;44886:26;44901:10;44886:14;:26::i;:::-;44923:23;44935:4;44941;44923:11;:23::i;:::-;44979:9;44962:44;;44971:6;44962:44;;;44990:15;44962:44;;;;;;:::i;:::-;;;;;;;;44599:415;;;;;;44512:502;;;:::o;31641:634::-;31744:15;31761:23;31786:12;31800:23;31825:12;31839:18;31861:19;31872:7;31861:10;:19::i;:::-;31743:137;;;;;;;;;;;;31909:28;31929:7;31909;:15;31917:6;31909:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31891:7;:15;31899:6;31891:15;;;;;;;;;;;;;;;:46;;;;31966:28;31986:7;31966;:15;31974:6;31966:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31948:7;:15;31956:6;31948:15;;;;;;;;;;;;;;;:46;;;;32026:39;32049:15;32026:7;:18;32034:9;32026:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32005:7;:18;32013:9;32005:18;;;;;;;;;;;;;;;:60;;;;32097:39;32120:15;32097:7;:18;32105:9;32097:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32076:7;:18;32084:9;32076:18;;;;;;;;;;;;;;;:60;;;;32147:26;32162:10;32147:14;:26::i;:::-;32184:23;32196:4;32202;32184:11;:23::i;:::-;32240:9;32223:44;;32232:6;32223:44;;;32251:15;32223:44;;;;;;:::i;:::-;;;;;;;;31732:543;;;;;;31641:634;;;:::o;38208:123::-;38261:15;;38252:6;:24;;;;38302:21;;38287:12;:36;;;;38208:123::o;43090:513::-;43238:62;43255:4;43270:15;;;;;;;;;;;43288:11;43238:8;:62::i;:::-;43343:15;;;;;;;;;;;:31;;;43382:9;43415:4;43435:11;43461:1;43504;43547:7;:5;:7::i;:::-;43569:15;43343:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43090:513;;:::o;37685:129::-;37749:7;37776:30;37800:5;37776:19;37788:6;;37776:7;:11;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;37769:37;;37685:129;;;:::o;37822:141::-;37892:7;37919:36;37949:5;37919:25;37931:12;;37919:7;:11;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;37912:43;;37822:141;;;:::o;37322:355::-;37385:19;37408:10;:8;:10::i;:::-;37385:33;;37429:18;37450:27;37465:11;37450:10;:14;;:27;;;;:::i;:::-;37429:48;;37513:38;37540:10;37513:7;:22;37529:4;37513:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37488:7;:22;37504:4;37488:22;;;;;;;;;;;;;;;:63;;;;37565:11;:26;37585:4;37565:26;;;;;;;;;;;;;;;;;;;;;;;;;37562:107;;;37631:38;37658:10;37631:7;:22;37647:4;37631:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37606:7;:22;37622:4;37606:22;;;;;;;;;;;;;;;:63;;;;37562:107;37374:303;;37322:355;:::o;35231:147::-;35309:17;35321:4;35309:7;;:11;;:17;;;;:::i;:::-;35299:7;:27;;;;35350:20;35365:4;35350:10;;:14;;:20;;;;:::i;:::-;35337:10;:33;;;;35231:147;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1294:559::-;1380:6;1388;1437:2;1425:9;1416:7;1412:23;1408:32;1405:119;;;1443:79;;:::i;:::-;1405:119;1591:1;1580:9;1576:17;1563:31;1621:18;1613:6;1610:30;1607:117;;;1643:79;;:::i;:::-;1607:117;1756:80;1828:7;1819:6;1808:9;1804:22;1756:80;:::i;:::-;1738:98;;;;1534:312;1294:559;;;;;:::o;1859:99::-;1911:6;1945:5;1939:12;1929:22;;1859:99;;;:::o;1964:169::-;2048:11;2082:6;2077:3;2070:19;2122:4;2117:3;2113:14;2098:29;;1964:169;;;;:::o;2139:307::-;2207:1;2217:113;2231:6;2228:1;2225:13;2217:113;;;2316:1;2311:3;2307:11;2301:18;2297:1;2292:3;2288:11;2281:39;2253:2;2250:1;2246:10;2241:15;;2217:113;;;2348:6;2345:1;2342:13;2339:101;;;2428:1;2419:6;2414:3;2410:16;2403:27;2339:101;2188:258;2139:307;;;:::o;2452:102::-;2493:6;2544:2;2540:7;2535:2;2528:5;2524:14;2520:28;2510:38;;2452:102;;;:::o;2560:364::-;2648:3;2676:39;2709:5;2676:39;:::i;:::-;2731:71;2795:6;2790:3;2731:71;:::i;:::-;2724:78;;2811:52;2856:6;2851:3;2844:4;2837:5;2833:16;2811:52;:::i;:::-;2888:29;2910:6;2888:29;:::i;:::-;2883:3;2879:39;2872:46;;2652:272;2560:364;;;;:::o;2930:313::-;3043:4;3081:2;3070:9;3066:18;3058:26;;3130:9;3124:4;3120:20;3116:1;3105:9;3101:17;3094:47;3158:78;3231:4;3222:6;3158:78;:::i;:::-;3150:86;;2930:313;;;;:::o;3249:126::-;3286:7;3326:42;3319:5;3315:54;3304:65;;3249:126;;;:::o;3381:96::-;3418:7;3447:24;3465:5;3447:24;:::i;:::-;3436:35;;3381:96;;;:::o;3483:122::-;3556:24;3574:5;3556:24;:::i;:::-;3549:5;3546:35;3536:63;;3595:1;3592;3585:12;3536:63;3483:122;:::o;3611:139::-;3657:5;3695:6;3682:20;3673:29;;3711:33;3738:5;3711:33;:::i;:::-;3611:139;;;;:::o;3756:77::-;3793:7;3822:5;3811:16;;3756:77;;;:::o;3839:122::-;3912:24;3930:5;3912:24;:::i;:::-;3905:5;3902:35;3892:63;;3951:1;3948;3941:12;3892:63;3839:122;:::o;3967:139::-;4013:5;4051:6;4038:20;4029:29;;4067:33;4094:5;4067:33;:::i;:::-;3967:139;;;;:::o;4112:474::-;4180:6;4188;4237:2;4225:9;4216:7;4212:23;4208:32;4205:119;;;4243:79;;:::i;:::-;4205:119;4363:1;4388:53;4433:7;4424:6;4413:9;4409:22;4388:53;:::i;:::-;4378:63;;4334:117;4490:2;4516:53;4561:7;4552:6;4541:9;4537:22;4516:53;:::i;:::-;4506:63;;4461:118;4112:474;;;;;:::o;4592:90::-;4626:7;4669:5;4662:13;4655:21;4644:32;;4592:90;;;:::o;4688:109::-;4769:21;4784:5;4769:21;:::i;:::-;4764:3;4757:34;4688:109;;:::o;4803:210::-;4890:4;4928:2;4917:9;4913:18;4905:26;;4941:65;5003:1;4992:9;4988:17;4979:6;4941:65;:::i;:::-;4803:210;;;;:::o;5019:118::-;5106:24;5124:5;5106:24;:::i;:::-;5101:3;5094:37;5019:118;;:::o;5143:222::-;5236:4;5274:2;5263:9;5259:18;5251:26;;5287:71;5355:1;5344:9;5340:17;5331:6;5287:71;:::i;:::-;5143:222;;;;:::o;5371:60::-;5399:3;5420:5;5413:12;;5371:60;;;:::o;5437:142::-;5487:9;5520:53;5538:34;5547:24;5565:5;5547:24;:::i;:::-;5538:34;:::i;:::-;5520:53;:::i;:::-;5507:66;;5437:142;;;:::o;5585:126::-;5635:9;5668:37;5699:5;5668:37;:::i;:::-;5655:50;;5585:126;;;:::o;5717:153::-;5794:9;5827:37;5858:5;5827:37;:::i;:::-;5814:50;;5717:153;;;:::o;5876:185::-;5990:64;6048:5;5990:64;:::i;:::-;5985:3;5978:77;5876:185;;:::o;6067:276::-;6187:4;6225:2;6214:9;6210:18;6202:26;;6238:98;6333:1;6322:9;6318:17;6309:6;6238:98;:::i;:::-;6067:276;;;;:::o;6349:619::-;6426:6;6434;6442;6491:2;6479:9;6470:7;6466:23;6462:32;6459:119;;;6497:79;;:::i;:::-;6459:119;6617:1;6642:53;6687:7;6678:6;6667:9;6663:22;6642:53;:::i;:::-;6632:63;;6588:117;6744:2;6770:53;6815:7;6806:6;6795:9;6791:22;6770:53;:::i;:::-;6760:63;;6715:118;6872:2;6898:53;6943:7;6934:6;6923:9;6919:22;6898:53;:::i;:::-;6888:63;;6843:118;6349:619;;;;;:::o;6974:329::-;7033:6;7082:2;7070:9;7061:7;7057:23;7053:32;7050:119;;;7088:79;;:::i;:::-;7050:119;7208:1;7233:53;7278:7;7269:6;7258:9;7254:22;7233:53;:::i;:::-;7223:63;;7179:117;6974:329;;;;:::o;7309:86::-;7344:7;7384:4;7377:5;7373:16;7362:27;;7309:86;;;:::o;7401:112::-;7484:22;7500:5;7484:22;:::i;:::-;7479:3;7472:35;7401:112;;:::o;7519:214::-;7608:4;7646:2;7635:9;7631:18;7623:26;;7659:67;7723:1;7712:9;7708:17;7699:6;7659:67;:::i;:::-;7519:214;;;;:::o;7739:116::-;7809:21;7824:5;7809:21;:::i;:::-;7802:5;7799:32;7789:60;;7845:1;7842;7835:12;7789:60;7739:116;:::o;7861:133::-;7904:5;7942:6;7929:20;7920:29;;7958:30;7982:5;7958:30;:::i;:::-;7861:133;;;;:::o;8000:468::-;8065:6;8073;8122:2;8110:9;8101:7;8097:23;8093:32;8090:119;;;8128:79;;:::i;:::-;8090:119;8248:1;8273:53;8318:7;8309:6;8298:9;8294:22;8273:53;:::i;:::-;8263:63;;8219:117;8375:2;8401:50;8443:7;8434:6;8423:9;8419:22;8401:50;:::i;:::-;8391:60;;8346:115;8000:468;;;;;:::o;8474:118::-;8561:24;8579:5;8561:24;:::i;:::-;8556:3;8549:37;8474:118;;:::o;8598:222::-;8691:4;8729:2;8718:9;8714:18;8706:26;;8742:71;8810:1;8799:9;8795:17;8786:6;8742:71;:::i;:::-;8598:222;;;;:::o;8826:329::-;8885:6;8934:2;8922:9;8913:7;8909:23;8905:32;8902:119;;;8940:79;;:::i;:::-;8902:119;9060:1;9085:53;9130:7;9121:6;9110:9;9106:22;9085:53;:::i;:::-;9075:63;;9031:117;8826:329;;;;:::o;9161:619::-;9238:6;9246;9254;9303:2;9291:9;9282:7;9278:23;9274:32;9271:119;;;9309:79;;:::i;:::-;9271:119;9429:1;9454:53;9499:7;9490:6;9479:9;9475:22;9454:53;:::i;:::-;9444:63;;9400:117;9556:2;9582:53;9627:7;9618:6;9607:9;9603:22;9582:53;:::i;:::-;9572:63;;9527:118;9684:2;9710:53;9755:7;9746:6;9735:9;9731:22;9710:53;:::i;:::-;9700:63;;9655:118;9161:619;;;;;:::o;9786:180::-;9834:77;9831:1;9824:88;9931:4;9928:1;9921:15;9955:4;9952:1;9945:15;9972:281;10055:27;10077:4;10055:27;:::i;:::-;10047:6;10043:40;10185:6;10173:10;10170:22;10149:18;10137:10;10134:34;10131:62;10128:88;;;10196:18;;:::i;:::-;10128:88;10236:10;10232:2;10225:22;10015:238;9972:281;;:::o;10259:129::-;10293:6;10320:20;;:::i;:::-;10310:30;;10349:33;10377:4;10369:6;10349:33;:::i;:::-;10259:129;;;:::o;10394:311::-;10471:4;10561:18;10553:6;10550:30;10547:56;;;10583:18;;:::i;:::-;10547:56;10633:4;10625:6;10621:17;10613:25;;10693:4;10687;10683:15;10675:23;;10394:311;;;:::o;10728:710::-;10824:5;10849:81;10865:64;10922:6;10865:64;:::i;:::-;10849:81;:::i;:::-;10840:90;;10950:5;10979:6;10972:5;10965:21;11013:4;11006:5;11002:16;10995:23;;11066:4;11058:6;11054:17;11046:6;11042:30;11095:3;11087:6;11084:15;11081:122;;;11114:79;;:::i;:::-;11081:122;11229:6;11212:220;11246:6;11241:3;11238:15;11212:220;;;11321:3;11350:37;11383:3;11371:10;11350:37;:::i;:::-;11345:3;11338:50;11417:4;11412:3;11408:14;11401:21;;11288:144;11272:4;11267:3;11263:14;11256:21;;11212:220;;;11216:21;10830:608;;10728:710;;;;;:::o;11461:370::-;11532:5;11581:3;11574:4;11566:6;11562:17;11558:27;11548:122;;11589:79;;:::i;:::-;11548:122;11706:6;11693:20;11731:94;11821:3;11813:6;11806:4;11798:6;11794:17;11731:94;:::i;:::-;11722:103;;11538:293;11461:370;;;;:::o;11837:539::-;11921:6;11970:2;11958:9;11949:7;11945:23;11941:32;11938:119;;;11976:79;;:::i;:::-;11938:119;12124:1;12113:9;12109:17;12096:31;12154:18;12146:6;12143:30;12140:117;;;12176:79;;:::i;:::-;12140:117;12281:78;12351:7;12342:6;12331:9;12327:22;12281:78;:::i;:::-;12271:88;;12067:302;11837:539;;;;:::o;12382:1057::-;12486:6;12494;12502;12510;12518;12526;12575:3;12563:9;12554:7;12550:23;12546:33;12543:120;;;12582:79;;:::i;:::-;12543:120;12702:1;12727:53;12772:7;12763:6;12752:9;12748:22;12727:53;:::i;:::-;12717:63;;12673:117;12829:2;12855:53;12900:7;12891:6;12880:9;12876:22;12855:53;:::i;:::-;12845:63;;12800:118;12957:2;12983:53;13028:7;13019:6;13008:9;13004:22;12983:53;:::i;:::-;12973:63;;12928:118;13085:2;13111:53;13156:7;13147:6;13136:9;13132:22;13111:53;:::i;:::-;13101:63;;13056:118;13213:3;13240:53;13285:7;13276:6;13265:9;13261:22;13240:53;:::i;:::-;13230:63;;13184:119;13342:3;13369:53;13414:7;13405:6;13394:9;13390:22;13369:53;:::i;:::-;13359:63;;13313:119;12382:1057;;;;;;;;:::o;13445:323::-;13501:6;13550:2;13538:9;13529:7;13525:23;13521:32;13518:119;;;13556:79;;:::i;:::-;13518:119;13676:1;13701:50;13743:7;13734:6;13723:9;13719:22;13701:50;:::i;:::-;13691:60;;13647:114;13445:323;;;;:::o;13791:568::-;13864:8;13874:6;13924:3;13917:4;13909:6;13905:17;13901:27;13891:122;;13932:79;;:::i;:::-;13891:122;14045:6;14032:20;14022:30;;14075:18;14067:6;14064:30;14061:117;;;14097:79;;:::i;:::-;14061:117;14211:4;14203:6;14199:17;14187:29;;14265:3;14257:4;14249:6;14245:17;14235:8;14231:32;14228:41;14225:128;;;14272:79;;:::i;:::-;14225:128;13791:568;;;;;:::o;14365:934::-;14487:6;14495;14503;14511;14560:2;14548:9;14539:7;14535:23;14531:32;14528:119;;;14566:79;;:::i;:::-;14528:119;14714:1;14703:9;14699:17;14686:31;14744:18;14736:6;14733:30;14730:117;;;14766:79;;:::i;:::-;14730:117;14879:80;14951:7;14942:6;14931:9;14927:22;14879:80;:::i;:::-;14861:98;;;;14657:312;15036:2;15025:9;15021:18;15008:32;15067:18;15059:6;15056:30;15053:117;;;15089:79;;:::i;:::-;15053:117;15202:80;15274:7;15265:6;15254:9;15250:22;15202:80;:::i;:::-;15184:98;;;;14979:313;14365:934;;;;;;;:::o;15305:474::-;15373:6;15381;15430:2;15418:9;15409:7;15405:23;15401:32;15398:119;;;15436:79;;:::i;:::-;15398:119;15556:1;15581:53;15626:7;15617:6;15606:9;15602:22;15581:53;:::i;:::-;15571:63;;15527:117;15683:2;15709:53;15754:7;15745:6;15734:9;15730:22;15709:53;:::i;:::-;15699:63;;15654:118;15305:474;;;;;:::o;15785:182::-;15925:34;15921:1;15913:6;15909:14;15902:58;15785:182;:::o;15973:366::-;16115:3;16136:67;16200:2;16195:3;16136:67;:::i;:::-;16129:74;;16212:93;16301:3;16212:93;:::i;:::-;16330:2;16325:3;16321:12;16314:19;;15973:366;;;:::o;16345:419::-;16511:4;16549:2;16538:9;16534:18;16526:26;;16598:9;16592:4;16588:20;16584:1;16573:9;16569:17;16562:47;16626:131;16752:4;16626:131;:::i;:::-;16618:139;;16345:419;;;:::o;16770:180::-;16818:77;16815:1;16808:88;16915:4;16912:1;16905:15;16939:4;16936:1;16929:15;16956:320;17000:6;17037:1;17031:4;17027:12;17017:22;;17084:1;17078:4;17074:12;17105:18;17095:81;;17161:4;17153:6;17149:17;17139:27;;17095:81;17223:2;17215:6;17212:14;17192:18;17189:38;17186:84;;;17242:18;;:::i;:::-;17186:84;17007:269;16956:320;;;:::o;17282:229::-;17422:34;17418:1;17410:6;17406:14;17399:58;17491:12;17486:2;17478:6;17474:15;17467:37;17282:229;:::o;17517:366::-;17659:3;17680:67;17744:2;17739:3;17680:67;:::i;:::-;17673:74;;17756:93;17845:3;17756:93;:::i;:::-;17874:2;17869:3;17865:12;17858:19;;17517:366;;;:::o;17889:419::-;18055:4;18093:2;18082:9;18078:18;18070:26;;18142:9;18136:4;18132:20;18128:1;18117:9;18113:17;18106:47;18170:131;18296:4;18170:131;:::i;:::-;18162:139;;17889:419;;;:::o;18314:231::-;18454:34;18450:1;18442:6;18438:14;18431:58;18523:14;18518:2;18510:6;18506:15;18499:39;18314:231;:::o;18551:366::-;18693:3;18714:67;18778:2;18773:3;18714:67;:::i;:::-;18707:74;;18790:93;18879:3;18790:93;:::i;:::-;18908:2;18903:3;18899:12;18892:19;;18551:366;;;:::o;18923:419::-;19089:4;19127:2;19116:9;19112:18;19104:26;;19176:9;19170:4;19166:20;19162:1;19151:9;19147:17;19140:47;19204:131;19330:4;19204:131;:::i;:::-;19196:139;;18923:419;;;:::o;19348:181::-;19488:33;19484:1;19476:6;19472:14;19465:57;19348:181;:::o;19535:366::-;19677:3;19698:67;19762:2;19757:3;19698:67;:::i;:::-;19691:74;;19774:93;19863:3;19774:93;:::i;:::-;19892:2;19887:3;19883:12;19876:19;;19535:366;;;:::o;19907:419::-;20073:4;20111:2;20100:9;20096:18;20088:26;;20160:9;20154:4;20150:20;20146:1;20135:9;20131:17;20124:47;20188:131;20314:4;20188:131;:::i;:::-;20180:139;;19907:419;;;:::o;20332:180::-;20380:77;20377:1;20370:88;20477:4;20474:1;20467:15;20501:4;20498:1;20491:15;20518:348;20558:7;20581:20;20599:1;20581:20;:::i;:::-;20576:25;;20615:20;20633:1;20615:20;:::i;:::-;20610:25;;20803:1;20735:66;20731:74;20728:1;20725:81;20720:1;20713:9;20706:17;20702:105;20699:131;;;20810:18;;:::i;:::-;20699:131;20858:1;20855;20851:9;20840:20;;20518:348;;;;:::o;20872:179::-;21012:31;21008:1;21000:6;20996:14;20989:55;20872:179;:::o;21057:366::-;21199:3;21220:67;21284:2;21279:3;21220:67;:::i;:::-;21213:74;;21296:93;21385:3;21296:93;:::i;:::-;21414:2;21409:3;21405:12;21398:19;;21057:366;;;:::o;21429:419::-;21595:4;21633:2;21622:9;21618:18;21610:26;;21682:9;21676:4;21672:20;21668:1;21657:9;21653:17;21646:47;21710:131;21836:4;21710:131;:::i;:::-;21702:139;;21429:419;;;:::o;21854:173::-;21994:25;21990:1;21982:6;21978:14;21971:49;21854:173;:::o;22033:366::-;22175:3;22196:67;22260:2;22255:3;22196:67;:::i;:::-;22189:74;;22272:93;22361:3;22272:93;:::i;:::-;22390:2;22385:3;22381:12;22374:19;;22033:366;;;:::o;22405:419::-;22571:4;22609:2;22598:9;22594:18;22586:26;;22658:9;22652:4;22648:20;22644:1;22633:9;22629:17;22622:47;22686:131;22812:4;22686:131;:::i;:::-;22678:139;;22405:419;;;:::o;22830:180::-;22878:77;22875:1;22868:88;22975:4;22972:1;22965:15;22999:4;22996:1;22989:15;23016:305;23056:3;23075:20;23093:1;23075:20;:::i;:::-;23070:25;;23109:20;23127:1;23109:20;:::i;:::-;23104:25;;23263:1;23195:66;23191:74;23188:1;23185:81;23182:107;;;23269:18;;:::i;:::-;23182:107;23313:1;23310;23306:9;23299:16;;23016:305;;;;:::o;23327:225::-;23467:34;23463:1;23455:6;23451:14;23444:58;23536:8;23531:2;23523:6;23519:15;23512:33;23327:225;:::o;23558:366::-;23700:3;23721:67;23785:2;23780:3;23721:67;:::i;:::-;23714:74;;23797:93;23886:3;23797:93;:::i;:::-;23915:2;23910:3;23906:12;23899:19;;23558:366;;;:::o;23930:419::-;24096:4;24134:2;24123:9;24119:18;24111:26;;24183:9;24177:4;24173:20;24169:1;24158:9;24154:17;24147:47;24211:131;24337:4;24211:131;:::i;:::-;24203:139;;23930:419;;;:::o;24355:233::-;24394:3;24417:24;24435:5;24417:24;:::i;:::-;24408:33;;24463:66;24456:5;24453:77;24450:103;;;24533:18;;:::i;:::-;24450:103;24580:1;24573:5;24569:13;24562:20;;24355:233;;;:::o;24594:223::-;24734:34;24730:1;24722:6;24718:14;24711:58;24803:6;24798:2;24790:6;24786:15;24779:31;24594:223;:::o;24823:366::-;24965:3;24986:67;25050:2;25045:3;24986:67;:::i;:::-;24979:74;;25062:93;25151:3;25062:93;:::i;:::-;25180:2;25175:3;25171:12;25164:19;;24823:366;;;:::o;25195:419::-;25361:4;25399:2;25388:9;25384:18;25376:26;;25448:9;25442:4;25438:20;25434:1;25423:9;25419:17;25412:47;25476:131;25602:4;25476:131;:::i;:::-;25468:139;;25195:419;;;:::o;25620:221::-;25760:34;25756:1;25748:6;25744:14;25737:58;25829:4;25824:2;25816:6;25812:15;25805:29;25620:221;:::o;25847:366::-;25989:3;26010:67;26074:2;26069:3;26010:67;:::i;:::-;26003:74;;26086:93;26175:3;26086:93;:::i;:::-;26204:2;26199:3;26195:12;26188:19;;25847:366;;;:::o;26219:419::-;26385:4;26423:2;26412:9;26408:18;26400:26;;26472:9;26466:4;26462:20;26458:1;26447:9;26443:17;26436:47;26500:131;26626:4;26500:131;:::i;:::-;26492:139;;26219:419;;;:::o;26644:224::-;26784:34;26780:1;26772:6;26768:14;26761:58;26853:7;26848:2;26840:6;26836:15;26829:32;26644:224;:::o;26874:366::-;27016:3;27037:67;27101:2;27096:3;27037:67;:::i;:::-;27030:74;;27113:93;27202:3;27113:93;:::i;:::-;27231:2;27226:3;27222:12;27215:19;;26874:366;;;:::o;27246:419::-;27412:4;27450:2;27439:9;27435:18;27427:26;;27499:9;27493:4;27489:20;27485:1;27474:9;27470:17;27463:47;27527:131;27653:4;27527:131;:::i;:::-;27519:139;;27246:419;;;:::o;27671:222::-;27811:34;27807:1;27799:6;27795:14;27788:58;27880:5;27875:2;27867:6;27863:15;27856:30;27671:222;:::o;27899:366::-;28041:3;28062:67;28126:2;28121:3;28062:67;:::i;:::-;28055:74;;28138:93;28227:3;28138:93;:::i;:::-;28256:2;28251:3;28247:12;28240:19;;27899:366;;;:::o;28271:419::-;28437:4;28475:2;28464:9;28460:18;28452:26;;28524:9;28518:4;28514:20;28510:1;28499:9;28495:17;28488:47;28552:131;28678:4;28552:131;:::i;:::-;28544:139;;28271:419;;;:::o;28696:228::-;28836:34;28832:1;28824:6;28820:14;28813:58;28905:11;28900:2;28892:6;28888:15;28881:36;28696:228;:::o;28930:366::-;29072:3;29093:67;29157:2;29152:3;29093:67;:::i;:::-;29086:74;;29169:93;29258:3;29169:93;:::i;:::-;29287:2;29282:3;29278:12;29271:19;;28930:366;;;:::o;29302:419::-;29468:4;29506:2;29495:9;29491:18;29483:26;;29555:9;29549:4;29545:20;29541:1;29530:9;29526:17;29519:47;29583:131;29709:4;29583:131;:::i;:::-;29575:139;;29302:419;;;:::o;29727:227::-;29867:34;29863:1;29855:6;29851:14;29844:58;29936:10;29931:2;29923:6;29919:15;29912:35;29727:227;:::o;29960:366::-;30102:3;30123:67;30187:2;30182:3;30123:67;:::i;:::-;30116:74;;30199:93;30288:3;30199:93;:::i;:::-;30317:2;30312:3;30308:12;30301:19;;29960:366;;;:::o;30332:419::-;30498:4;30536:2;30525:9;30521:18;30513:26;;30585:9;30579:4;30575:20;30571:1;30560:9;30556:17;30549:47;30613:131;30739:4;30613:131;:::i;:::-;30605:139;;30332:419;;;:::o;30757:234::-;30897:34;30893:1;30885:6;30881:14;30874:58;30966:17;30961:2;30953:6;30949:15;30942:42;30757:234;:::o;30997:366::-;31139:3;31160:67;31224:2;31219:3;31160:67;:::i;:::-;31153:74;;31236:93;31325:3;31236:93;:::i;:::-;31354:2;31349:3;31345:12;31338:19;;30997:366;;;:::o;31369:419::-;31535:4;31573:2;31562:9;31558:18;31550:26;;31622:9;31616:4;31612:20;31608:1;31597:9;31593:17;31586:47;31650:131;31776:4;31650:131;:::i;:::-;31642:139;;31369:419;;;:::o;31794:180::-;31842:77;31839:1;31832:88;31939:4;31936:1;31929:15;31963:4;31960:1;31953:15;31980:185;32020:1;32037:20;32055:1;32037:20;:::i;:::-;32032:25;;32071:20;32089:1;32071:20;:::i;:::-;32066:25;;32110:1;32100:35;;32115:18;;:::i;:::-;32100:35;32157:1;32154;32150:9;32145:14;;31980:185;;;;:::o;32171:191::-;32211:4;32231:20;32249:1;32231:20;:::i;:::-;32226:25;;32265:20;32283:1;32265:20;:::i;:::-;32260:25;;32304:1;32301;32298:8;32295:34;;;32309:18;;:::i;:::-;32295:34;32354:1;32351;32347:9;32339:17;;32171:191;;;;:::o;32368:177::-;32508:29;32504:1;32496:6;32492:14;32485:53;32368:177;:::o;32551:366::-;32693:3;32714:67;32778:2;32773:3;32714:67;:::i;:::-;32707:74;;32790:93;32879:3;32790:93;:::i;:::-;32908:2;32903:3;32899:12;32892:19;;32551:366;;;:::o;32923:419::-;33089:4;33127:2;33116:9;33112:18;33104:26;;33176:9;33170:4;33166:20;33162:1;33151:9;33147:17;33140:47;33204:131;33330:4;33204:131;:::i;:::-;33196:139;;32923:419;;;:::o;33348:220::-;33488:34;33484:1;33476:6;33472:14;33465:58;33557:3;33552:2;33544:6;33540:15;33533:28;33348:220;:::o;33574:366::-;33716:3;33737:67;33801:2;33796:3;33737:67;:::i;:::-;33730:74;;33813:93;33902:3;33813:93;:::i;:::-;33931:2;33926:3;33922:12;33915:19;;33574:366;;;:::o;33946:419::-;34112:4;34150:2;34139:9;34135:18;34127:26;;34199:9;34193:4;34189:20;34185:1;34174:9;34170:17;34163:47;34227:131;34353:4;34227:131;:::i;:::-;34219:139;;33946:419;;;:::o;34371:442::-;34520:4;34558:2;34547:9;34543:18;34535:26;;34571:71;34639:1;34628:9;34624:17;34615:6;34571:71;:::i;:::-;34652:72;34720:2;34709:9;34705:18;34696:6;34652:72;:::i;:::-;34734;34802:2;34791:9;34787:18;34778:6;34734:72;:::i;:::-;34371:442;;;;;;:::o;34819:143::-;34876:5;34907:6;34901:13;34892:22;;34923:33;34950:5;34923:33;:::i;:::-;34819:143;;;;:::o;34968:351::-;35038:6;35087:2;35075:9;35066:7;35062:23;35058:32;35055:119;;;35093:79;;:::i;:::-;35055:119;35213:1;35238:64;35294:7;35285:6;35274:9;35270:22;35238:64;:::i;:::-;35228:74;;35184:128;34968:351;;;;:::o;35325:85::-;35370:7;35399:5;35388:16;;35325:85;;;:::o;35416:158::-;35474:9;35507:61;35525:42;35534:32;35560:5;35534:32;:::i;:::-;35525:42;:::i;:::-;35507:61;:::i;:::-;35494:74;;35416:158;;;:::o;35580:147::-;35675:45;35714:5;35675:45;:::i;:::-;35670:3;35663:58;35580:147;;:::o;35733:114::-;35800:6;35834:5;35828:12;35818:22;;35733:114;;;:::o;35853:184::-;35952:11;35986:6;35981:3;35974:19;36026:4;36021:3;36017:14;36002:29;;35853:184;;;;:::o;36043:132::-;36110:4;36133:3;36125:11;;36163:4;36158:3;36154:14;36146:22;;36043:132;;;:::o;36181:108::-;36258:24;36276:5;36258:24;:::i;:::-;36253:3;36246:37;36181:108;;:::o;36295:179::-;36364:10;36385:46;36427:3;36419:6;36385:46;:::i;:::-;36463:4;36458:3;36454:14;36440:28;;36295:179;;;;:::o;36480:113::-;36550:4;36582;36577:3;36573:14;36565:22;;36480:113;;;:::o;36629:732::-;36748:3;36777:54;36825:5;36777:54;:::i;:::-;36847:86;36926:6;36921:3;36847:86;:::i;:::-;36840:93;;36957:56;37007:5;36957:56;:::i;:::-;37036:7;37067:1;37052:284;37077:6;37074:1;37071:13;37052:284;;;37153:6;37147:13;37180:63;37239:3;37224:13;37180:63;:::i;:::-;37173:70;;37266:60;37319:6;37266:60;:::i;:::-;37256:70;;37112:224;37099:1;37096;37092:9;37087:14;;37052:284;;;37056:14;37352:3;37345:10;;36753:608;;;36629:732;;;;:::o;37367:831::-;37630:4;37668:3;37657:9;37653:19;37645:27;;37682:71;37750:1;37739:9;37735:17;37726:6;37682:71;:::i;:::-;37763:80;37839:2;37828:9;37824:18;37815:6;37763:80;:::i;:::-;37890:9;37884:4;37880:20;37875:2;37864:9;37860:18;37853:48;37918:108;38021:4;38012:6;37918:108;:::i;:::-;37910:116;;38036:72;38104:2;38093:9;38089:18;38080:6;38036:72;:::i;:::-;38118:73;38186:3;38175:9;38171:19;38162:6;38118:73;:::i;:::-;37367:831;;;;;;;;:::o;38204:807::-;38453:4;38491:3;38480:9;38476:19;38468:27;;38505:71;38573:1;38562:9;38558:17;38549:6;38505:71;:::i;:::-;38586:72;38654:2;38643:9;38639:18;38630:6;38586:72;:::i;:::-;38668:80;38744:2;38733:9;38729:18;38720:6;38668:80;:::i;:::-;38758;38834:2;38823:9;38819:18;38810:6;38758:80;:::i;:::-;38848:73;38916:3;38905:9;38901:19;38892:6;38848:73;:::i;:::-;38931;38999:3;38988:9;38984:19;38975:6;38931:73;:::i;:::-;38204:807;;;;;;;;;:::o;39017:143::-;39074:5;39105:6;39099:13;39090:22;;39121:33;39148:5;39121:33;:::i;:::-;39017:143;;;;:::o;39166:663::-;39254:6;39262;39270;39319:2;39307:9;39298:7;39294:23;39290:32;39287:119;;;39325:79;;:::i;:::-;39287:119;39445:1;39470:64;39526:7;39517:6;39506:9;39502:22;39470:64;:::i;:::-;39460:74;;39416:128;39583:2;39609:64;39665:7;39656:6;39645:9;39641:22;39609:64;:::i;:::-;39599:74;;39554:129;39722:2;39748:64;39804:7;39795:6;39784:9;39780:22;39748:64;:::i;:::-;39738:74;;39693:129;39166:663;;;;;:::o
Swarm Source
ipfs://613e39d4cc9972a9ac985f57499e507ab68e889ca3b7c061cf4d1130e353e7f9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.