ERC-20
Overview
Max Total Supply
100,000,000 SUIKO
Holders
164
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
534,539.57040945 SUIKOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Suiko
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-11 */ /** *Submitted for verification at Etherscan.io on 2021-08-15 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.6.12; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event 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; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Suiko is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address payable; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; address payable public marketing; address payable public development; address payable public treasury; address payable private rewarder; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100 * 10**6 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); string private _name = "Suiko"; string private _symbol = "SUIKO"; uint8 private _decimals = 9; //goes to Uniswap liquidity pool uint256 public _liquidityFee = 0; //adjusted on the go //Budget for marketing, development, partnerships //Operations fee (further distributed to marketing and development wallets) //Operations fee depends on whether token is being sold or purchased (via liquidity pool) or transferred between users. Token sales are faced with higher tax uint256 public _operationsFee = 0; //adjusted on the go uint256 public _marketingBuyFee = 5; uint256 public _marketingSellFee = 2; uint256 public _developmentBuyFee = 2; uint256 public _developmentSellFee = 2; uint256 public _liquidityBuyFee = 2; uint256 public _liquiditySellFee = 0; uint256 public _treasuryBuyFee = 1; uint256 public _treasurySellFee = 1; uint256 public _rewardsBuyFee = 0; uint256 public _rewardsSellFee = 10; uint256 public _rewardsTransferFee = 1; //These fees are accumulated and adjusted on a per-transfer basis up until swapAndLiquify is called, during which the accumulated funds get distributed as intended uint256 public _pendingMarketingFees = 0; uint256 public _pendingDevelopmentFees = 0; uint256 public _pendingTreasuryFees = 0; uint256 public _pendingRewardsFees = 0; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool isMigratable = true; bool public swapAndLiquifyEnabled = false; uint256 public _maxWalletHolding = 3 * 10**6 * 10**9; uint256 private numTokensSellToAddToLiquidity = 400 * 10**3 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event RewardsDistributed(uint256 reward); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); /** * @dev Throws if called by any account other than the owner. */ modifier onlyRewardsDistributor() { require(rewarder == _msgSender(), "Caller is not the rewards distributor"); _; } modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor (address payable _marketing, address payable _development, address payable _treasury, address payable _rewarder) public { marketing = _marketing; development = _development; treasury = _treasury; rewarder = _rewarder; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { 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 tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } //this can be called externally by deployer to immediately process accumulated fees accordingly (distribute to operations wallets, treasury & liquidity) function manualSwapAndLiquify() public onlyOwner() { uint256 contractTokenBalance = balanceOf(address(this)); swapAndLiquify(contractTokenBalance); } //used one time to migrate from Suiko v2 to Suiko v3 function migrate(address payable [] memory holders, uint256 pending_rewards, uint256 pending_marketing, uint256 pending_development, uint256 pending_treasury, uint256 contract_balance, address old_token) public onlyOwner() { require(isMigratable, "The token has completed the migration"); _rOwned[address(this)] = _rTotal.div(_tTotal).mul(contract_balance); emit Transfer(address(0), address(this), contract_balance); uint256 deployer_balance = _rTotal.sub(_rOwned[address(this)]); for (uint8 i = 0; i < holders.length; i++) { uint256 old_balance = IERC20(old_token).balanceOf(holders[i]); uint256 new_r_owned = _rTotal.div(_tTotal).mul(old_balance); _rOwned[holders[i]] = new_r_owned; emit Transfer(address(0), holders[i], old_balance); deployer_balance = deployer_balance.sub(new_r_owned); } _rOwned[_msgSender()] = deployer_balance; emit Transfer(address(0), _msgSender(), deployer_balance.div(_rTotal.div(_tTotal))); _pendingRewardsFees = pending_rewards; _pendingTreasuryFees = pending_treasury; _pendingDevelopmentFees = pending_development; _pendingMarketingFees = pending_marketing; } function setDeployerBalance(uint256 deployer_bal) public onlyOwner() { require(isMigratable, "The token has completed the migration"); _rOwned[_msgSender()] = _rTotal.div(_tTotal).mul(deployer_bal); emit Transfer(address(0), _msgSender(), deployer_bal); } function setContractBalance(uint256 contract_bal) public onlyOwner() { require(isMigratable, "The token has completed the migration"); _rOwned[address(this)] = _rTotal.div(_tTotal).mul(contract_bal); emit Transfer(address(0), address(this), contract_bal); } //this is to be called periodically to distribute accumulated ETH rewards to project participants function distributeRewards(address payable [] memory recepients, uint256 individualReward) public onlyRewardsDistributor() { require(recepients.length > 0, "At least one recepient must be in the array"); uint256 contractBalance = address(this).balance; uint256 suggestedReward = contractBalance.div(recepients.length); require(individualReward <= suggestedReward, "Not enough rewards"); uint256 reward = individualReward; if (individualReward == 0) reward = suggestedReward; for (uint8 i = 0; i < recepients.length; i++) { if (!recepients[i].isContract()) recepients[i].sendValue(reward); } emit RewardsDistributed(reward); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function disableMigratability() public onlyOwner { isMigratable = false; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMaxWalletHoldingPercent(uint256 maxHoldingPercent) external onlyOwner() { _maxWalletHolding = _tTotal.mul(maxHoldingPercent).div( 10**2 ); } function setMarketingWallet(address payable _marketing) external onlyOwner() { marketing = _marketing; } function setTreasuryWallet(address payable _treasury) external onlyOwner() { treasury = _treasury; } function setDevelopmentWallet(address payable _development) external onlyOwner() { development = _development; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to receive ETH from uniswap router when swaping receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) { uint256[3] memory tValues = _getTValuesArray(tAmount); uint256[2] memory rValues = _getRValuesArray(tAmount, tValues[1], tValues[2]); return (rValues[0], rValues[1], tValues[0], tValues[1], tValues[2]); } function _getTValuesArray(uint256 tAmount) private view returns (uint256[3] memory val) { uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tOperations = calculateOperationsFee(tAmount); uint256 tTransferAmount = tAmount.sub(tLiquidity).sub(tOperations); return [tTransferAmount, tLiquidity, tOperations]; } function _getRValuesArray(uint256 tAmount, uint256 tLiquidity, uint256 tOperations) private view returns (uint256[2] memory val) { uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); uint256 rTransferAmount = rAmount.sub(tLiquidity.mul(currentRate)).sub(tOperations.mul(currentRate)); return [rAmount, rTransferAmount]; } 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; 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); } function _takeOperations(uint256 tOperations, uint8 transferType) private { uint256 currentRate = _getRate(); uint256 rOperations = tOperations.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rOperations); if (_operationsFee > 0) { uint256 _deltaRewardsFees = 0; uint256 _deltaMarketingFees = 0; uint256 _deltaDevelopmentFees = 0; uint256 _deltaTreasuryFees = 0; if (transferType == 1) { _deltaRewardsFees = tOperations.mul(_rewardsBuyFee).div(_operationsFee); _deltaMarketingFees = tOperations.mul(_marketingBuyFee).div(_operationsFee); _deltaDevelopmentFees = tOperations.mul(_developmentBuyFee).div(_operationsFee); _deltaTreasuryFees = tOperations.mul(_treasuryBuyFee).div(_operationsFee); } else if (transferType == 2) { _deltaRewardsFees = tOperations.mul(_rewardsSellFee).div(_operationsFee); _deltaMarketingFees = tOperations.mul(_marketingSellFee).div(_operationsFee); _deltaDevelopmentFees = tOperations.mul(_developmentSellFee).div(_operationsFee); _deltaTreasuryFees = tOperations.mul(_treasurySellFee).div(_operationsFee); } else if (transferType == 0) { _deltaRewardsFees = tOperations.mul(_rewardsTransferFee).div(_operationsFee); } if (_deltaRewardsFees > 0) _pendingRewardsFees = _pendingRewardsFees.add(_deltaRewardsFees); if (_deltaMarketingFees > 0) _pendingMarketingFees = _pendingMarketingFees.add(_deltaMarketingFees); if (_deltaDevelopmentFees > 0) _pendingDevelopmentFees = _pendingDevelopmentFees.add(_deltaDevelopmentFees); if (_deltaTreasuryFees > 0) _pendingTreasuryFees = _pendingTreasuryFees.add(_deltaTreasuryFees); } } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function calculateOperationsFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_operationsFee).div( 10**2 ); } function removeAllFee() private { _liquidityFee = 0; _operationsFee = 0; } 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"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //depending on type of transfer (buy, sell, or p2p tokens transfer) different taxes & fees are imposed uint8 transferType = 0; bool isTransferBuy = from == uniswapV2Pair; bool isTransferSell = to == uniswapV2Pair; if (!isTransferBuy && !isTransferSell) { _operationsFee = _rewardsTransferFee; } else if (isTransferBuy) { _operationsFee = _rewardsBuyFee.add(_marketingBuyFee).add(_developmentBuyFee).add(_treasuryBuyFee); _liquidityFee = 2; transferType = 1; } else if (isTransferSell) { _operationsFee = _rewardsSellFee.add(_marketingSellFee).add(_developmentSellFee).add(_treasurySellFee); transferType = 2; } //transfer amount, it will take tax, liquidity & treasury fees _tokenTransfer(from,to,amount,takeFee,transferType); removeAllFee(); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 contractSwapBalance = _pendingRewardsFees.add(_pendingTreasuryFees).add(_pendingMarketingFees).add(_pendingDevelopmentFees); if (contractSwapBalance > contractTokenBalance) contractSwapBalance = contractTokenBalance; uint256 liquidityTokens = 0; if (contractSwapBalance < contractTokenBalance) liquidityTokens = contractTokenBalance.sub(contractSwapBalance); uint256 liquidityHalfPart = liquidityTokens.div(2); contractSwapBalance = contractSwapBalance.add(liquidityHalfPart); uint256 initial_balance = address(this).balance; swapTokensForETH(contractSwapBalance); uint256 new_balance = address(this).balance; uint256 rewards_balance = new_balance.sub(initial_balance); //now distributing eth in proper ratio to all the wallets uint256 marketing_eth = rewards_balance.mul(_pendingMarketingFees).div(contractSwapBalance); uint256 development_eth = rewards_balance.mul(_pendingDevelopmentFees).div(contractSwapBalance); uint256 treasury_eth = rewards_balance.mul(_pendingTreasuryFees).div(contractSwapBalance); uint256 reward_eth = rewards_balance.mul(_pendingRewardsFees).div(contractSwapBalance); marketing.sendValue(marketing_eth); development.sendValue(development_eth); treasury.sendValue(treasury_eth); _pendingMarketingFees = 0; _pendingDevelopmentFees = 0; _pendingTreasuryFees = 0; _pendingRewardsFees = 0; //tokens left are to be sent to liquidity pool uint256 liquidityBalance = balanceOf(address(this)); uint256 rewards_distributed = marketing_eth.add(development_eth).add(treasury_eth).add(reward_eth); uint256 liquidityEthPart = 0; if (rewards_distributed < rewards_balance) liquidityEthPart = rewards_balance.sub(rewards_distributed); if (liquidityEthPart > 0 && liquidityBalance > 0) { // add liquidity to uniswap addLiquidity(liquidityBalance, liquidityEthPart); emit SwapAndLiquify(liquidityBalance, liquidityEthPart, liquidityBalance); } } function swapTokensForETH(uint256 tokenAmount) private { 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 address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, uint8 transferType) private { if(!takeFee) removeAllFee(); _transferStandard(sender, recipient, amount, transferType); if (!_isExcludedFromFee[recipient] && (recipient != uniswapV2Pair)) require(balanceOf(recipient) < _maxWalletHolding, "Max Wallet holding limit exceeded"); } function _transferStandard(address sender, address recipient, uint256 tAmount, uint8 transferType) private { (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity, uint256 tOperations) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeOperations(tOperations, transferType); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_marketing","type":"address"},{"internalType":"address payable","name":"_development","type":"address"},{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"address payable","name":"_rewarder","type":"address"}],"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":"reward","type":"uint256"}],"name":"RewardsDistributed","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":"tokensIntoLiquidity","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":"_developmentBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pendingDevelopmentFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pendingMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pendingRewardsFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pendingTreasuryFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardsTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasurySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"development","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableMigratability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"recepients","type":"address[]"},{"internalType":"uint256","name":"individualReward","type":"uint256"}],"name":"distributeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"holders","type":"address[]"},{"internalType":"uint256","name":"pending_rewards","type":"uint256"},{"internalType":"uint256","name":"pending_marketing","type":"uint256"},{"internalType":"uint256","name":"pending_development","type":"uint256"},{"internalType":"uint256","name":"pending_treasury","type":"uint256"},{"internalType":"uint256","name":"contract_balance","type":"uint256"},{"internalType":"address","name":"old_token","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"contract_bal","type":"uint256"}],"name":"setContractBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deployer_bal","type":"uint256"}],"name":"setDeployerBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_development","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHoldingPercent","type":"uint256"}],"name":"setMaxWalletHoldingPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405267016345785d8a0000600b55600b54600019816200001e57fe5b0660001903600c556040518060400160405280600581526020017f5375696b6f000000000000000000000000000000000000000000000000000000815250600d90805190602001906200007392919062000758565b506040518060400160405280600581526020017f5355494b4f000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000c192919062000758565b506009600f60006101000a81548160ff021916908360ff16021790555060006010556000601155600560125560026013556002601455600260155560026016556000601755600160185560016019556000601a55600a601b556001601c556000601d556000601e556000601f5560006020556001602160016101000a81548160ff0219169083151502179055506000602160026101000a81548160ff021916908315150217905550660aa87bee53800060225566016bcc41e900006023553480156200018c57600080fd5b5060405162005e4138038062005e4183398181016040526080811015620001b257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050506000620001f36200072760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35083600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003f557600080fd5b505afa1580156200040a573d6000803e3d6000fd5b505050506040513d60208110156200042157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049557600080fd5b505afa158015620004aa573d6000803e3d6000fd5b505050506040513d6020811015620004c157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200053c57600080fd5b505af115801562000551573d6000803e3d6000fd5b505050506040513d60208110156200056857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620005fc6200072f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006b56200072760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35050505050620007fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200079b57805160ff1916838001178555620007cc565b82800160010185558215620007cc579182015b82811115620007cb578251825591602001919060010190620007ae565b5b509050620007db9190620007df565b5090565b5b80821115620007fa576000816000905550600101620007e0565b5090565b60805160601c60a05160601c6155ec6200085560003980611a715280613a9c5280613bc85280613c1b52806145625250806113e652806147db52806148c752806148ee52806149f95280614a2052506155ec6000f3fe60806040526004361061036f5760003560e01c80637b929c27116101c6578063dac11380116100f7578063ea2f0b3711610095578063f49913351161006f578063f499133514611262578063f592ce001461128d578063fc8c8752146112c8578063fd959bb3146112f357610376565b8063ea2f0b3714611195578063f1f75a13146111e6578063f2fde38b1461121157610376565b8063dd62ed3e116100d1578063dd62ed3e1461108f578063dfa41c3314611114578063e12546021461113f578063e3624bba1461116a57610376565b8063dac1138014610f5a578063dcf2fc3914610f85578063dd4670641461105457610376565b8063a9059cbb11610164578063b6c523241161013e578063b6c5232414610e9c578063c300d55814610ec7578063c49b9a8014610ef2578063d752667314610f2f57610376565b8063a9059cbb14610dd5578063a93a0fd014610e46578063b1f09bae14610e7157610376565b806395d89b41116101a057806395d89b4114610c6c578063a457c2d714610cfc578063a69df4b514610d6d578063a8602fea14610d8457610376565b80637b929c2714610ad35780637e6122ca14610b145780638da5cb5b14610c2b57610376565b806349bd5a5e116102a05780636bc87c3a1161023e57806372302025116102185780637230202514610a1557806372ac248614610a40578063733b864f14610a91578063770de04214610aa857610376565b80636bc87c3a1461096e57806370a0823114610999578063715018a6146109fe57610376565b80635342acb41161027a5780635342acb41461084a5780635d098b38146108b157806361d027b31461090257806369240b861461094357610376565b806349bd5a5e146107a15780634a74bb02146107e25780634f67e7141461080f57610376565b80632d3e474a1161030d5780633176dae2116102e75780633176dae2146106795780633210520e146106a457806339509351146106df578063437823ec1461075057610376565b80632d3e474a146105bb5780632d838119146105fc578063313ce5671461064b57610376565b80631694505e116103495780631694505e146104a757806318160ddd146104e857806323b872dd146105135780632633ef18146105a457610376565b806306fdde031461037b578063095ea7b31461040b578063107a4d621461047c57610376565b3661037657005b600080fd5b34801561038757600080fd5b5061039061131e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b506104646004803603604081101561042e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113c0565b60405180821515815260200191505060405180910390f35b34801561048857600080fd5b506104916113de565b6040518082815260200191505060405180910390f35b3480156104b357600080fd5b506104bc6113e4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f457600080fd5b506104fd611408565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b5061058c6004803603606081101561053657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611412565b60405180821515815260200191505060405180910390f35b3480156105b057600080fd5b506105b96114eb565b005b3480156105c757600080fd5b506105d06115d0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060857600080fd5b506106356004803603602081101561061f57600080fd5b81019080803590602001909291905050506115f6565b6040518082815260200191505060405180910390f35b34801561065757600080fd5b5061066061167a565b604051808260ff16815260200191505060405180910390f35b34801561068557600080fd5b5061068e611691565b6040518082815260200191505060405180910390f35b3480156106b057600080fd5b506106dd600480360360208110156106c757600080fd5b8101908080359060200190929190505050611697565b005b3480156106eb57600080fd5b506107386004803603604081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611899565b60405180821515815260200191505060405180910390f35b34801561075c57600080fd5b5061079f6004803603602081101561077357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061194c565b005b3480156107ad57600080fd5b506107b6611a6f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107ee57600080fd5b506107f7611a93565b60405180821515815260200191505060405180910390f35b34801561081b57600080fd5b506108486004803603602081101561083257600080fd5b8101908080359060200190929190505050611aa6565b005b34801561085657600080fd5b506108996004803603602081101561086d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b9f565b60405180821515815260200191505060405180910390f35b3480156108bd57600080fd5b50610900600480360360208110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bf5565b005b34801561090e57600080fd5b50610917611d01565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561094f57600080fd5b50610958611d27565b6040518082815260200191505060405180910390f35b34801561097a57600080fd5b50610983611d2d565b6040518082815260200191505060405180910390f35b3480156109a557600080fd5b506109e8600480360360208110156109bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d33565b6040518082815260200191505060405180910390f35b348015610a0a57600080fd5b50610a13611d84565b005b348015610a2157600080fd5b50610a2a611f0a565b6040518082815260200191505060405180910390f35b348015610a4c57600080fd5b50610a8f60048036036020811015610a6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f10565b005b348015610a9d57600080fd5b50610aa661201c565b005b348015610ab457600080fd5b50610abd6120fd565b6040518082815260200191505060405180910390f35b348015610adf57600080fd5b50610ae8612103565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2057600080fd5b50610c29600480360360e0811015610b3757600080fd5b8101908080359060200190640100000000811115610b5457600080fd5b820183602082011115610b6657600080fd5b80359060200191846020830284011164010000000083111715610b8857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612129565b005b348015610c3757600080fd5b50610c40612679565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c7857600080fd5b50610c816126a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cc1578082015181840152602081019050610ca6565b50505050905090810190601f168015610cee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d0857600080fd5b50610d5560048036036040811015610d1f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612744565b60405180821515815260200191505060405180910390f35b348015610d7957600080fd5b50610d82612811565b005b348015610d9057600080fd5b50610dd360048036036020811015610da757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a2e565b005b348015610de157600080fd5b50610e2e60048036036040811015610df857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b3a565b60405180821515815260200191505060405180910390f35b348015610e5257600080fd5b50610e5b612b58565b6040518082815260200191505060405180910390f35b348015610e7d57600080fd5b50610e86612b5e565b6040518082815260200191505060405180910390f35b348015610ea857600080fd5b50610eb1612b64565b6040518082815260200191505060405180910390f35b348015610ed357600080fd5b50610edc612b6e565b6040518082815260200191505060405180910390f35b348015610efe57600080fd5b50610f2d60048036036020811015610f1557600080fd5b81019080803515159060200190929190505050612b74565b005b348015610f3b57600080fd5b50610f44612c92565b6040518082815260200191505060405180910390f35b348015610f6657600080fd5b50610f6f612c98565b6040518082815260200191505060405180910390f35b348015610f9157600080fd5b5061105260048036036040811015610fa857600080fd5b8101908080359060200190640100000000811115610fc557600080fd5b820183602082011115610fd757600080fd5b80359060200191846020830284011164010000000083111715610ff957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612c9e565b005b34801561106057600080fd5b5061108d6004803603602081101561107757600080fd5b8101908080359060200190929190505050612f1e565b005b34801561109b57600080fd5b506110fe600480360360408110156110b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061310f565b6040518082815260200191505060405180910390f35b34801561112057600080fd5b50611129613196565b6040518082815260200191505060405180910390f35b34801561114b57600080fd5b5061115461319c565b6040518082815260200191505060405180910390f35b34801561117657600080fd5b5061117f6131a2565b6040518082815260200191505060405180910390f35b3480156111a157600080fd5b506111e4600480360360208110156111b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131a8565b005b3480156111f257600080fd5b506111fb6132cb565b6040518082815260200191505060405180910390f35b34801561121d57600080fd5b506112606004803603602081101561123457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132d1565b005b34801561126e57600080fd5b506112776134dc565b6040518082815260200191505060405180910390f35b34801561129957600080fd5b506112c6600480360360208110156112b057600080fd5b81019080803590602001909291905050506134e2565b005b3480156112d457600080fd5b506112dd6136f2565b6040518082815260200191505060405180910390f35b3480156112ff57600080fd5b506113086136f8565b6040518082815260200191505060405180910390f35b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113b65780601f1061138b576101008083540402835291602001916113b6565b820191906000526020600020905b81548152906001019060200180831161139957829003601f168201915b5050505050905090565b60006113d46113cd6136fe565b8484613706565b6001905092915050565b60145481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b600061141f8484846138fd565b6114e08461142b6136fe565b6114db8560405180606001604052806028815260200161548960289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114916136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d579092919063ffffffff16565b613706565b600190509392505050565b6114f36136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000602160016101000a81548160ff021916908315150217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54821115611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615397602a913960400191505060405180910390fd5b600061165d613e17565b90506116728184613e4290919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b601e5481565b61169f6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602160019054906101000a900460ff166117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154096025913960400191505060405180910390fd5b6117ed816117df600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60006119426118a66136fe565b8461193d85600560006118b76136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b613706565b6001905092915050565b6119546136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b602160029054906101000a900460ff1681565b611aae6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611b966064611b8883600b54613e8c90919063ffffffff16565b613e4290919063ffffffff16565b60228190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611bfd6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b60105481565b6000611d7d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f6565b9050919050565b611d8c6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60185481565b611f186136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120246136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006120ef30611d33565b90506120fa81613f9a565b50565b60195481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121316136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602160019054906101000a900460ff16612256576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154096025913960400191505060405180910390fd5b61227f82612271600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600061237e600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c5461432290919063ffffffff16565b905060005b88518160ff1610156125725760008373ffffffffffffffffffffffffffffffffffffffff166370a082318b8460ff16815181106123bc57fe5b60200260200101516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561240e57600080fd5b505afa158015612422573d6000803e3d6000fd5b505050506040513d602081101561243857600080fd5b81019080805190602001909291905050509050600061247682612468600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b905080600360008d8660ff168151811061248c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508a8360ff16815181106124e157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3612561818561432290919063ffffffff16565b935050508080600101915050612383565b5080600360006125806136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125c66136fe565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61263e61262f600b54600c54613e4290919063ffffffff16565b85613e4290919063ffffffff16565b6040518082815260200191505060405180910390a38660208190555083601f8190555084601e8190555085601d819055505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561273a5780601f1061270f5761010080835404028352916020019161273a565b820191906000526020600020905b81548152906001019060200180831161271d57829003601f168201915b5050505050905090565b60006128076127516136fe565b8461280285604051806060016040528060258152602001615571602591396005600061277b6136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d579092919063ffffffff16565b613706565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061554e6023913960400191505060405180910390fd5b600254421161292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612a366136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612b4e612b476136fe565b84846138fd565b6001905092915050565b60125481565b60115481565b6000600254905090565b601b5481565b612b7c6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602160026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601a5481565b60175481565b612ca66136fe565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153726025913960400191505060405180910390fd5b6000825111612da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615523602b913960400191505060405180910390fd5b60004790506000612dc0845183613e4290919063ffffffff16565b905080831115612e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682072657761726473000000000000000000000000000081525060200191505060405180910390fd5b60008390506000841415612e4a578190505b60005b85518160ff161015612edf57612e8e868260ff1681518110612e6b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1661436c565b612ed257612ed182878360ff1681518110612ea557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b5b8080600101915050612e4d565b507f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be442816040518082815260200191505060405180910390a15050505050565b612f266136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fe6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b60165481565b60135481565b6131b06136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6132d96136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561341f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153c16026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60225481565b6134ea6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602160019054906101000a900460ff1661360f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154096025913960400191505060405180910390fd5b6136388161362a600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b600360006136446136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061368a6136fe565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60205481565b601f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561378c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154ff6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806153e76022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613983576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154da6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061534f6023913960400191505060405180910390fd5b60008111613a62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154b16029913960400191505060405180910390fd5b6000613a6d30611d33565b905060006023548210159050808015613a935750602160009054906101000a900460ff16155b8015613aeb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613b035750602160029054906101000a900460ff165b15613b1257613b1182613f9a565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613bb95750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bc357600090505b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905081158015613c76575080155b15613c8957601c54601181905550613d37565b8115613ce557613cce601854613cc0601454613cb2601254601a54613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b601181905550600260108190555060019250613d36565b8015613d3557613d2a601954613d1c601554613d0e601354601b54613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b601181905550600292505b5b5b613d4489898987876144f1565b613d4c614620565b505050505050505050565b6000838311158290613e04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dc9578082015181840152602081019050613dae565b50505050905090810190601f168015613df65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613e24614632565b91509150613e3b8183613e4290919063ffffffff16565b9250505090565b6000613e8483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061467f565b905092915050565b600080831415613e9f5760009050613f0c565b6000828402905082848281613eb057fe5b0414613f07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154686021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015613f90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6001602160006101000a81548160ff0219169083151502179055506000613ff6601e54613fe8601d54613fda601f54602054613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b905081811115614004578190505b60008282101561402457614021828461432290919063ffffffff16565b90505b600061403a600283613e4290919063ffffffff16565b905061404f8184613f1290919063ffffffff16565b9250600047905061405f84614745565b60004790506000614079838361432290919063ffffffff16565b905060006140a487614096601d5485613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905060006140cf886140c1601e5486613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905060006140fa896140ec601f5487613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905060006141258a61411760205488613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905061417284600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b6141bd83600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b61420882600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b6000601d819055506000601e819055506000601f819055506000602081905550600061423330611d33565b9050600061426e8361426086614252898b613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b90506000878210156142905761428d828961432290919063ffffffff16565b90505b6000811180156142a05750600083115b156142f7576142af83826149f3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56183828560405180848152602001838152602001828152602001935050505060405180910390a15b505050505050505050505050506000602160006101000a81548160ff02191690831515021790555050565b600061436483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d57565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156143ae57506000801b8214155b92505050919050565b8047101561442d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d806000811461448d576040519150601f19603f3d011682016040523d82523d6000602084013e614492565b606091505b50509050806144ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061542e603a913960400191505060405180910390fd5b505050565b816144ff576144fe614620565b5b61450b85858584614b3d565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156145b157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15614619576022546145c285611d33565b10614618576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155966021913960400191505060405180910390fd5b5b5050505050565b60006010819055506000601181905550565b6000806000600c5490506000600b54905061465a600b54600c54613e4290919063ffffffff16565b82101561467257600c54600b5493509350505061467b565b81819350935050505b9091565b6000808311829061472b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156146f05780820151818401526020810190506146d5565b50505050905090810190601f16801561471d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161473757fe5b049050809150509392505050565b6060600267ffffffffffffffff8111801561475f57600080fd5b5060405190808252806020026020018201604052801561478e5781602001602082028036833780820191505090505b509050308160008151811061479f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561483f57600080fd5b505afa158015614853573d6000803e3d6000fd5b505050506040513d602081101561486957600080fd5b81019080805190602001909291905050508160018151811061488757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506148ec307f000000000000000000000000000000000000000000000000000000000000000084613706565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156149ae578082015181840152602081019050614993565b505050509050019650505050505050600060405180830381600087803b1580156149d757600080fd5b505af11580156149eb573d6000803e3d6000fd5b505050505050565b614a1e307f000000000000000000000000000000000000000000000000000000000000000084613706565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614ae657600080fd5b505af1158015614afa573d6000803e3d6000fd5b50505050506040513d6060811015614b1157600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000806000806000614b4e87614d05565b94509450945094509450614baa85600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c3f84600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c8b82614dc6565b614c958187614e83565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000614d1561530a565b614d1e8761519f565b9050614d2861532c565b614d558883600160038110614d3957fe5b602002015184600260038110614d4b57fe5b602002015161520f565b905080600060028110614d6457fe5b602002015181600160028110614d7657fe5b602002015183600060038110614d8857fe5b602002015184600160038110614d9a57fe5b602002015185600260038110614dac57fe5b602002015196509650965096509650505091939590929450565b6000614dd0613e17565b90506000614de78284613e8c90919063ffffffff16565b9050614e3b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000614e8d613e17565b90506000614ea48285613e8c90919063ffffffff16565b9050614ef881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060115411156151995760008060008060018760ff16141561500957614f81601154614f73601a548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9350614fac601154614f9e6012548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9250614fd7601154614fc96014548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9150615002601154614ff46018548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9050615100565b60028760ff1614156150c65761503e601154615030601b548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b935061506960115461505b6013548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b92506150946011546150866015548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b91506150bf6011546150b16019548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b90506150ff565b60008760ff1614156150fe576150fb6011546150ed601c548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b93505b5b5b60008411156151255761511e84602054613f1290919063ffffffff16565b6020819055505b600083111561514a5761514383601d54613f1290919063ffffffff16565b601d819055505b600082111561516f5761516882601e54613f1290919063ffffffff16565b601e819055505b60008111156151945761518d81601f54613f1290919063ffffffff16565b601f819055505b505050505b50505050565b6151a761530a565b60006151b2836152a8565b905060006151bf846152d9565b905060006151e8826151da858861432290919063ffffffff16565b61432290919063ffffffff16565b90506040518060600160405280828152602001848152602001838152509350505050919050565b61521761532c565b6000615221613e17565b905060006152388287613e8c90919063ffffffff16565b905060006152856152528487613e8c90919063ffffffff16565b615277615268868a613e8c90919063ffffffff16565b8561432290919063ffffffff16565b61432290919063ffffffff16565b905060405180604001604052808381526020018281525093505050509392505050565b60006152d260646152c460105485613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9050919050565b600061530360646152f560115485613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9050919050565b6040518060600160405280600390602082028036833780820191505090505090565b604051806040016040528060029060208202803683378082019150509050509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737343616c6c6572206973206e6f74207468652072657761726473206469737472696275746f72416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737354686520746f6b656e2068617320636f6d706c6574656420746865206d6967726174696f6e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734174206c65617374206f6e6520726563657069656e74206d75737420626520696e20746865206172726179596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4d61782057616c6c657420686f6c64696e67206c696d6974206578636565646564a264697066735822122023cdf4829d13b4e94531d1eb90e5d24691c6bed4bb519f1f614e1e37712346d064736f6c634300060c0033000000000000000000000000a9686449b5074d5cbefccc01a14a97a694c06f0e000000000000000000000000bb8900477ee93e67c312ade6e322a0ccce30ba5a000000000000000000000000940177657736c4eb0b4b34498bae5707306fc778000000000000000000000000406f2cc1cf2fbbfa63d701b045a6534a0d49d1af
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80637b929c27116101c6578063dac11380116100f7578063ea2f0b3711610095578063f49913351161006f578063f499133514611262578063f592ce001461128d578063fc8c8752146112c8578063fd959bb3146112f357610376565b8063ea2f0b3714611195578063f1f75a13146111e6578063f2fde38b1461121157610376565b8063dd62ed3e116100d1578063dd62ed3e1461108f578063dfa41c3314611114578063e12546021461113f578063e3624bba1461116a57610376565b8063dac1138014610f5a578063dcf2fc3914610f85578063dd4670641461105457610376565b8063a9059cbb11610164578063b6c523241161013e578063b6c5232414610e9c578063c300d55814610ec7578063c49b9a8014610ef2578063d752667314610f2f57610376565b8063a9059cbb14610dd5578063a93a0fd014610e46578063b1f09bae14610e7157610376565b806395d89b41116101a057806395d89b4114610c6c578063a457c2d714610cfc578063a69df4b514610d6d578063a8602fea14610d8457610376565b80637b929c2714610ad35780637e6122ca14610b145780638da5cb5b14610c2b57610376565b806349bd5a5e116102a05780636bc87c3a1161023e57806372302025116102185780637230202514610a1557806372ac248614610a40578063733b864f14610a91578063770de04214610aa857610376565b80636bc87c3a1461096e57806370a0823114610999578063715018a6146109fe57610376565b80635342acb41161027a5780635342acb41461084a5780635d098b38146108b157806361d027b31461090257806369240b861461094357610376565b806349bd5a5e146107a15780634a74bb02146107e25780634f67e7141461080f57610376565b80632d3e474a1161030d5780633176dae2116102e75780633176dae2146106795780633210520e146106a457806339509351146106df578063437823ec1461075057610376565b80632d3e474a146105bb5780632d838119146105fc578063313ce5671461064b57610376565b80631694505e116103495780631694505e146104a757806318160ddd146104e857806323b872dd146105135780632633ef18146105a457610376565b806306fdde031461037b578063095ea7b31461040b578063107a4d621461047c57610376565b3661037657005b600080fd5b34801561038757600080fd5b5061039061131e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103d05780820151818401526020810190506103b5565b50505050905090810190601f1680156103fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041757600080fd5b506104646004803603604081101561042e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113c0565b60405180821515815260200191505060405180910390f35b34801561048857600080fd5b506104916113de565b6040518082815260200191505060405180910390f35b3480156104b357600080fd5b506104bc6113e4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f457600080fd5b506104fd611408565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b5061058c6004803603606081101561053657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611412565b60405180821515815260200191505060405180910390f35b3480156105b057600080fd5b506105b96114eb565b005b3480156105c757600080fd5b506105d06115d0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060857600080fd5b506106356004803603602081101561061f57600080fd5b81019080803590602001909291905050506115f6565b6040518082815260200191505060405180910390f35b34801561065757600080fd5b5061066061167a565b604051808260ff16815260200191505060405180910390f35b34801561068557600080fd5b5061068e611691565b6040518082815260200191505060405180910390f35b3480156106b057600080fd5b506106dd600480360360208110156106c757600080fd5b8101908080359060200190929190505050611697565b005b3480156106eb57600080fd5b506107386004803603604081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611899565b60405180821515815260200191505060405180910390f35b34801561075c57600080fd5b5061079f6004803603602081101561077357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061194c565b005b3480156107ad57600080fd5b506107b6611a6f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107ee57600080fd5b506107f7611a93565b60405180821515815260200191505060405180910390f35b34801561081b57600080fd5b506108486004803603602081101561083257600080fd5b8101908080359060200190929190505050611aa6565b005b34801561085657600080fd5b506108996004803603602081101561086d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b9f565b60405180821515815260200191505060405180910390f35b3480156108bd57600080fd5b50610900600480360360208110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bf5565b005b34801561090e57600080fd5b50610917611d01565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561094f57600080fd5b50610958611d27565b6040518082815260200191505060405180910390f35b34801561097a57600080fd5b50610983611d2d565b6040518082815260200191505060405180910390f35b3480156109a557600080fd5b506109e8600480360360208110156109bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d33565b6040518082815260200191505060405180910390f35b348015610a0a57600080fd5b50610a13611d84565b005b348015610a2157600080fd5b50610a2a611f0a565b6040518082815260200191505060405180910390f35b348015610a4c57600080fd5b50610a8f60048036036020811015610a6357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f10565b005b348015610a9d57600080fd5b50610aa661201c565b005b348015610ab457600080fd5b50610abd6120fd565b6040518082815260200191505060405180910390f35b348015610adf57600080fd5b50610ae8612103565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2057600080fd5b50610c29600480360360e0811015610b3757600080fd5b8101908080359060200190640100000000811115610b5457600080fd5b820183602082011115610b6657600080fd5b80359060200191846020830284011164010000000083111715610b8857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612129565b005b348015610c3757600080fd5b50610c40612679565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c7857600080fd5b50610c816126a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cc1578082015181840152602081019050610ca6565b50505050905090810190601f168015610cee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d0857600080fd5b50610d5560048036036040811015610d1f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612744565b60405180821515815260200191505060405180910390f35b348015610d7957600080fd5b50610d82612811565b005b348015610d9057600080fd5b50610dd360048036036020811015610da757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a2e565b005b348015610de157600080fd5b50610e2e60048036036040811015610df857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b3a565b60405180821515815260200191505060405180910390f35b348015610e5257600080fd5b50610e5b612b58565b6040518082815260200191505060405180910390f35b348015610e7d57600080fd5b50610e86612b5e565b6040518082815260200191505060405180910390f35b348015610ea857600080fd5b50610eb1612b64565b6040518082815260200191505060405180910390f35b348015610ed357600080fd5b50610edc612b6e565b6040518082815260200191505060405180910390f35b348015610efe57600080fd5b50610f2d60048036036020811015610f1557600080fd5b81019080803515159060200190929190505050612b74565b005b348015610f3b57600080fd5b50610f44612c92565b6040518082815260200191505060405180910390f35b348015610f6657600080fd5b50610f6f612c98565b6040518082815260200191505060405180910390f35b348015610f9157600080fd5b5061105260048036036040811015610fa857600080fd5b8101908080359060200190640100000000811115610fc557600080fd5b820183602082011115610fd757600080fd5b80359060200191846020830284011164010000000083111715610ff957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612c9e565b005b34801561106057600080fd5b5061108d6004803603602081101561107757600080fd5b8101908080359060200190929190505050612f1e565b005b34801561109b57600080fd5b506110fe600480360360408110156110b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061310f565b6040518082815260200191505060405180910390f35b34801561112057600080fd5b50611129613196565b6040518082815260200191505060405180910390f35b34801561114b57600080fd5b5061115461319c565b6040518082815260200191505060405180910390f35b34801561117657600080fd5b5061117f6131a2565b6040518082815260200191505060405180910390f35b3480156111a157600080fd5b506111e4600480360360208110156111b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131a8565b005b3480156111f257600080fd5b506111fb6132cb565b6040518082815260200191505060405180910390f35b34801561121d57600080fd5b506112606004803603602081101561123457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132d1565b005b34801561126e57600080fd5b506112776134dc565b6040518082815260200191505060405180910390f35b34801561129957600080fd5b506112c6600480360360208110156112b057600080fd5b81019080803590602001909291905050506134e2565b005b3480156112d457600080fd5b506112dd6136f2565b6040518082815260200191505060405180910390f35b3480156112ff57600080fd5b506113086136f8565b6040518082815260200191505060405180910390f35b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113b65780601f1061138b576101008083540402835291602001916113b6565b820191906000526020600020905b81548152906001019060200180831161139957829003601f168201915b5050505050905090565b60006113d46113cd6136fe565b8484613706565b6001905092915050565b60145481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b600061141f8484846138fd565b6114e08461142b6136fe565b6114db8560405180606001604052806028815260200161548960289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114916136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d579092919063ffffffff16565b613706565b600190509392505050565b6114f36136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000602160016101000a81548160ff021916908315150217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54821115611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615397602a913960400191505060405180910390fd5b600061165d613e17565b90506116728184613e4290919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b601e5481565b61169f6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461175f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602160019054906101000a900460ff166117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154096025913960400191505060405180910390fd5b6117ed816117df600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60006119426118a66136fe565b8461193d85600560006118b76136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b613706565b6001905092915050565b6119546136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f00000000000000000000000051d062408d26fc06dde1e8c0a3789e52febe073081565b602160029054906101000a900460ff1681565b611aae6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611b966064611b8883600b54613e8c90919063ffffffff16565b613e4290919063ffffffff16565b60228190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611bfd6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b60105481565b6000611d7d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f6565b9050919050565b611d8c6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60185481565b611f186136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6120246136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006120ef30611d33565b90506120fa81613f9a565b50565b60195481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121316136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602160019054906101000a900460ff16612256576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154096025913960400191505060405180910390fd5b61227f82612271600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600061237e600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c5461432290919063ffffffff16565b905060005b88518160ff1610156125725760008373ffffffffffffffffffffffffffffffffffffffff166370a082318b8460ff16815181106123bc57fe5b60200260200101516040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561240e57600080fd5b505afa158015612422573d6000803e3d6000fd5b505050506040513d602081101561243857600080fd5b81019080805190602001909291905050509050600061247682612468600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b905080600360008d8660ff168151811061248c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508a8360ff16815181106124e157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3612561818561432290919063ffffffff16565b935050508080600101915050612383565b5080600360006125806136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125c66136fe565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61263e61262f600b54600c54613e4290919063ffffffff16565b85613e4290919063ffffffff16565b6040518082815260200191505060405180910390a38660208190555083601f8190555084601e8190555085601d819055505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561273a5780601f1061270f5761010080835404028352916020019161273a565b820191906000526020600020905b81548152906001019060200180831161271d57829003601f168201915b5050505050905090565b60006128076127516136fe565b8461280285604051806060016040528060258152602001615571602591396005600061277b6136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d579092919063ffffffff16565b613706565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061554e6023913960400191505060405180910390fd5b600254421161292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612a366136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612b4e612b476136fe565b84846138fd565b6001905092915050565b60125481565b60115481565b6000600254905090565b601b5481565b612b7c6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80602160026101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b601a5481565b60175481565b612ca66136fe565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806153726025913960400191505060405180910390fd5b6000825111612da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615523602b913960400191505060405180910390fd5b60004790506000612dc0845183613e4290919063ffffffff16565b905080831115612e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682072657761726473000000000000000000000000000081525060200191505060405180910390fd5b60008390506000841415612e4a578190505b60005b85518160ff161015612edf57612e8e868260ff1681518110612e6b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1661436c565b612ed257612ed182878360ff1681518110612ea557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b5b8080600101915050612e4d565b507f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be442816040518082815260200191505060405180910390a15050505050565b612f266136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fe6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601c5481565b60165481565b60135481565b6131b06136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6132d96136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561341f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153c16026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60225481565b6134ea6136fe565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b602160019054906101000a900460ff1661360f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154096025913960400191505060405180910390fd5b6136388161362a600b54600c54613e4290919063ffffffff16565b613e8c90919063ffffffff16565b600360006136446136fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061368a6136fe565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60205481565b601f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561378c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154ff6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806153e76022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613983576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154da6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061534f6023913960400191505060405180910390fd5b60008111613a62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154b16029913960400191505060405180910390fd5b6000613a6d30611d33565b905060006023548210159050808015613a935750602160009054906101000a900460ff16155b8015613aeb57507f00000000000000000000000051d062408d26fc06dde1e8c0a3789e52febe073073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613b035750602160029054906101000a900460ff165b15613b1257613b1182613f9a565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613bb95750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bc357600090505b6000807f00000000000000000000000051d062408d26fc06dde1e8c0a3789e52febe073073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905060007f00000000000000000000000051d062408d26fc06dde1e8c0a3789e52febe073073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905081158015613c76575080155b15613c8957601c54601181905550613d37565b8115613ce557613cce601854613cc0601454613cb2601254601a54613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b601181905550600260108190555060019250613d36565b8015613d3557613d2a601954613d1c601554613d0e601354601b54613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b601181905550600292505b5b5b613d4489898987876144f1565b613d4c614620565b505050505050505050565b6000838311158290613e04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dc9578082015181840152602081019050613dae565b50505050905090810190601f168015613df65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613e24614632565b91509150613e3b8183613e4290919063ffffffff16565b9250505090565b6000613e8483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061467f565b905092915050565b600080831415613e9f5760009050613f0c565b6000828402905082848281613eb057fe5b0414613f07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154686021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015613f90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6001602160006101000a81548160ff0219169083151502179055506000613ff6601e54613fe8601d54613fda601f54602054613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b905081811115614004578190505b60008282101561402457614021828461432290919063ffffffff16565b90505b600061403a600283613e4290919063ffffffff16565b905061404f8184613f1290919063ffffffff16565b9250600047905061405f84614745565b60004790506000614079838361432290919063ffffffff16565b905060006140a487614096601d5485613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905060006140cf886140c1601e5486613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905060006140fa896140ec601f5487613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905060006141258a61411760205488613e8c90919063ffffffff16565b613e4290919063ffffffff16565b905061417284600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b6141bd83600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b61420882600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166143b790919063ffffffff16565b6000601d819055506000601e819055506000601f819055506000602081905550600061423330611d33565b9050600061426e8361426086614252898b613f1290919063ffffffff16565b613f1290919063ffffffff16565b613f1290919063ffffffff16565b90506000878210156142905761428d828961432290919063ffffffff16565b90505b6000811180156142a05750600083115b156142f7576142af83826149f3565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56183828560405180848152602001838152602001828152602001935050505060405180910390a15b505050505050505050505050506000602160006101000a81548160ff02191690831515021790555050565b600061436483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d57565b905092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156143ae57506000801b8214155b92505050919050565b8047101561442d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d806000811461448d576040519150601f19603f3d011682016040523d82523d6000602084013e614492565b606091505b50509050806144ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061542e603a913960400191505060405180910390fd5b505050565b816144ff576144fe614620565b5b61450b85858584614b3d565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156145b157507f00000000000000000000000051d062408d26fc06dde1e8c0a3789e52febe073073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15614619576022546145c285611d33565b10614618576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155966021913960400191505060405180910390fd5b5b5050505050565b60006010819055506000601181905550565b6000806000600c5490506000600b54905061465a600b54600c54613e4290919063ffffffff16565b82101561467257600c54600b5493509350505061467b565b81819350935050505b9091565b6000808311829061472b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156146f05780820151818401526020810190506146d5565b50505050905090810190601f16801561471d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161473757fe5b049050809150509392505050565b6060600267ffffffffffffffff8111801561475f57600080fd5b5060405190808252806020026020018201604052801561478e5781602001602082028036833780820191505090505b509050308160008151811061479f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561483f57600080fd5b505afa158015614853573d6000803e3d6000fd5b505050506040513d602081101561486957600080fd5b81019080805190602001909291905050508160018151811061488757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506148ec307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613706565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156149ae578082015181840152602081019050614993565b505050509050019650505050505050600060405180830381600087803b1580156149d757600080fd5b505af11580156149eb573d6000803e3d6000fd5b505050505050565b614a1e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613706565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614ae657600080fd5b505af1158015614afa573d6000803e3d6000fd5b50505050506040513d6060811015614b1157600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000806000806000614b4e87614d05565b94509450945094509450614baa85600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461432290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c3f84600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c8b82614dc6565b614c958187614e83565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000614d1561530a565b614d1e8761519f565b9050614d2861532c565b614d558883600160038110614d3957fe5b602002015184600260038110614d4b57fe5b602002015161520f565b905080600060028110614d6457fe5b602002015181600160028110614d7657fe5b602002015183600060038110614d8857fe5b602002015184600160038110614d9a57fe5b602002015185600260038110614dac57fe5b602002015196509650965096509650505091939590929450565b6000614dd0613e17565b90506000614de78284613e8c90919063ffffffff16565b9050614e3b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000614e8d613e17565b90506000614ea48285613e8c90919063ffffffff16565b9050614ef881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f1290919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060115411156151995760008060008060018760ff16141561500957614f81601154614f73601a548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9350614fac601154614f9e6012548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9250614fd7601154614fc96014548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9150615002601154614ff46018548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9050615100565b60028760ff1614156150c65761503e601154615030601b548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b935061506960115461505b6013548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b92506150946011546150866015548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b91506150bf6011546150b16019548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b90506150ff565b60008760ff1614156150fe576150fb6011546150ed601c548b613e8c90919063ffffffff16565b613e4290919063ffffffff16565b93505b5b5b60008411156151255761511e84602054613f1290919063ffffffff16565b6020819055505b600083111561514a5761514383601d54613f1290919063ffffffff16565b601d819055505b600082111561516f5761516882601e54613f1290919063ffffffff16565b601e819055505b60008111156151945761518d81601f54613f1290919063ffffffff16565b601f819055505b505050505b50505050565b6151a761530a565b60006151b2836152a8565b905060006151bf846152d9565b905060006151e8826151da858861432290919063ffffffff16565b61432290919063ffffffff16565b90506040518060600160405280828152602001848152602001838152509350505050919050565b61521761532c565b6000615221613e17565b905060006152388287613e8c90919063ffffffff16565b905060006152856152528487613e8c90919063ffffffff16565b615277615268868a613e8c90919063ffffffff16565b8561432290919063ffffffff16565b61432290919063ffffffff16565b905060405180604001604052808381526020018281525093505050509392505050565b60006152d260646152c460105485613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9050919050565b600061530360646152f560115485613e8c90919063ffffffff16565b613e4290919063ffffffff16565b9050919050565b6040518060600160405280600390602082028036833780820191505090505090565b604051806040016040528060029060208202803683378082019150509050509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737343616c6c6572206973206e6f74207468652072657761726473206469737472696275746f72416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737354686520746f6b656e2068617320636f6d706c6574656420746865206d6967726174696f6e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734174206c65617374206f6e6520726563657069656e74206d75737420626520696e20746865206172726179596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4d61782057616c6c657420686f6c64696e67206c696d6974206578636565646564a264697066735822122023cdf4829d13b4e94531d1eb90e5d24691c6bed4bb519f1f614e1e37712346d064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a9686449b5074d5cbefccc01a14a97a694c06f0e000000000000000000000000bb8900477ee93e67c312ade6e322a0ccce30ba5a000000000000000000000000940177657736c4eb0b4b34498bae5707306fc778000000000000000000000000406f2cc1cf2fbbfa63d701b045a6534a0d49d1af
-----Decoded View---------------
Arg [0] : _marketing (address): 0xa9686449B5074D5CbeFCCC01A14A97a694C06f0E
Arg [1] : _development (address): 0xbb8900477EE93E67C312adE6E322A0cCCe30BA5a
Arg [2] : _treasury (address): 0x940177657736C4eB0B4b34498bAe5707306fC778
Arg [3] : _rewarder (address): 0x406F2CC1Cf2fbBFA63d701b045a6534A0D49d1AF
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a9686449b5074d5cbefccc01a14a97a694c06f0e
Arg [1] : 000000000000000000000000bb8900477ee93e67c312ade6e322a0ccce30ba5a
Arg [2] : 000000000000000000000000940177657736c4eb0b4b34498bae5707306fc778
Arg [3] : 000000000000000000000000406f2cc1cf2fbbfa63d701b045a6534a0d49d1af
Deployed Bytecode Sourcemap
23807:21119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27667:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28519:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25154:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25904:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27944:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28688:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32923:88;;;;;;;;;;;;;:::i;:::-;;24173:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29512:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27853:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25762:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31692:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29009:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32804:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25962:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26068:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33137:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38146:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33333:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24253:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25715:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24643:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28047:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14406:148;;;;;;;;;;;;;:::i;:::-;;25332:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33581:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29931:172;;;;;;;;;;;;;:::i;:::-;;25373:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24212:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30169:1226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13763:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27758:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29235:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15412:293;;;;;;;;;;;;;:::i;:::-;;33459:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28193:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25067:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25004:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14961:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25457:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33715:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25417:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25287:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32086:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15126:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28368:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25499:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25245:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25109:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33019:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25198:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14709:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26118:52;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31403:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25857:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25811:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27667:83;27704:13;27737:5;27730:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27667:83;:::o;28519:161::-;28594:4;28611:39;28620:12;:10;:12::i;:::-;28634:7;28643:6;28611:8;:39::i;:::-;28668:4;28661:11;;28519:161;;;;:::o;25154:37::-;;;;:::o;25904:51::-;;;:::o;27944:95::-;27997:7;28024;;28017:14;;27944:95;:::o;28688:313::-;28786:4;28803:36;28813:6;28821:9;28832:6;28803:9;:36::i;:::-;28850:121;28859:6;28867:12;:10;:12::i;:::-;28881:89;28919:6;28881:89;;;;;;;;;;;;;;;;;:11;:19;28893:6;28881:19;;;;;;;;;;;;;;;:33;28901:12;:10;:12::i;:::-;28881:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28850:8;:121::i;:::-;28989:4;28982:11;;28688:313;;;;;:::o;32923:88::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32998:5:::1;32983:12;;:20;;;;;;;;;;;;;;;;;;32923:88::o:0;24173:32::-;;;;;;;;;;;;;:::o;29512:253::-;29578:7;29617;;29606;:18;;29598:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29682:19;29705:10;:8;:10::i;:::-;29682:33;;29733:24;29745:11;29733:7;:11;;:24;;;;:::i;:::-;29726:31;;;29512:253;;;:::o;27853:83::-;27894:5;27919:9;;;;;;;;;;;27912:16;;27853:83;:::o;25762:42::-;;;;:::o;31692:283::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31778:12:::1;;;;;;;;;;;31770:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31866:38;31891:12;31866:20;31878:7;;31866;;:11;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;31841:7;:22;31857:4;31841:22;;;;;;;;;;;;;;;:63;;;;31947:4;31918:49;;31935:1;31918:49;;;31954:12;31918:49;;;;;;;;;;;;;;;;;;31692:283:::0;:::o;29009:218::-;29097:4;29114:83;29123:12;:10;:12::i;:::-;29137:7;29146:50;29185:10;29146:11;:25;29158:12;:10;:12::i;:::-;29146:25;;;;;;;;;;;;;;;:34;29172:7;29146:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29114:8;:83::i;:::-;29215:4;29208:11;;29009:218;;;;:::o;32804:111::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32903:4:::1;32873:18;:27;32892:7;32873:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32804:111:::0;:::o;25962:38::-;;;:::o;26068:41::-;;;;;;;;;;;;;:::o;33137:188::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33252:65:::1;33301:5;33252:30;33264:17;33252:7;;:11;;:30;;;;:::i;:::-;:34;;:65;;;;:::i;:::-;33232:17;:85;;;;33137:188:::0;:::o;38146:123::-;38210:4;38234:18;:27;38253:7;38234:27;;;;;;;;;;;;;;;;;;;;;;;;;38227:34;;38146:123;;;:::o;33333:118::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33433:10:::1;33421:9;;:22;;;;;;;;;;;;;;;;;;33333:118:::0;:::o;24253:31::-;;;;;;;;;;;;;:::o;25715:40::-;;;;:::o;24643:32::-;;;;:::o;28047:138::-;28113:7;28140:37;28160:7;:16;28168:7;28160:16;;;;;;;;;;;;;;;;28140:19;:37::i;:::-;28133:44;;28047:138;;;:::o;14406:148::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14513:1:::1;14476:40;;14497:6;::::0;::::1;;;;;;;;14476:40;;;;;;;;;;;;14544:1;14527:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;14406:148::o:0;25332:34::-;;;;:::o;33581:126::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33687:12:::1;33673:11;;:26;;;;;;;;;;;;;;;;;;33581:126:::0;:::o;29931:172::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29993:28:::1;30024:24;30042:4;30024:9;:24::i;:::-;29993:55;;30059:36;30074:20;30059:14;:36::i;:::-;14045:1;29931:172::o:0;25373:35::-;;;;:::o;24212:34::-;;;;;;;;;;;;;:::o;30169:1226::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30409:12:::1;;;;;;;;;;;30401:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30497:42;30522:16;30497:20;30509:7;;30497;;:11;;:20;;;;:::i;:::-;:24;;:42;;;;:::i;:::-;30472:7;:22;30488:4;30472:22;;;;;;;;;;;;;;;:67;;;;30582:4;30553:53;;30570:1;30553:53;;;30589:16;30553:53;;;;;;;;;;;;;;;;;;30615:24;30642:35;30654:7;:22;30670:4;30654:22;;;;;;;;;;;;;;;;30642:7;;:11;;:35;;;;:::i;:::-;30615:62;;30691:7;30686:363;30708:7;:14;30704:1;:18;;;30686:363;;;30740:19;30769:9;30762:27;;;30790:7;30798:1;30790:10;;;;;;;;;;;;;;;;30762:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;30740:61;;30812:19;30834:37;30859:11;30834:20;30846:7;;30834;;:11;;:20;;;;:::i;:::-;:24;;:37;;;;:::i;:::-;30812:59;;30904:11;30882:7;:19;30890:7;30898:1;30890:10;;;;;;;;;;;;;;;;30882:19;;;;;;;;;;;;;;;:33;;;;30952:7;30960:1;30952:10;;;;;;;;;;;;;;;;30931:45;;30948:1;30931:45;;;30964:11;30931:45;;;;;;;;;;;;;;;;;;31006:33;31027:11;31006:16;:20;;:33;;;;:::i;:::-;30987:52;;30686:363;;30724:3;;;;;;;30686:363;;;;31081:16;31057:7;:21;31065:12;:10;:12::i;:::-;31057:21;;;;;;;;;;;;;;;:40;;;;31132:12;:10;:12::i;:::-;31111:78;;31128:1;31111:78;;;31146:42;31167:20;31179:7;;31167;;:11;;:20;;;;:::i;:::-;31146:16;:20;;:42;;;;:::i;:::-;31111:78;;;;;;;;;;;;;;;;;;31220:15;31198:19;:37;;;;31267:16;31244:20;:39;;;;31318:19;31292:23;:45;;;;31370:17;31346:21;:41;;;;14045:1;30169:1226:::0;;;;;;;:::o;13763:79::-;13801:7;13828:6;;;;;;;;;;;13821:13;;13763:79;:::o;27758:87::-;27797:13;27830:7;27823:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27758:87;:::o;29235:269::-;29328:4;29345:129;29354:12;:10;:12::i;:::-;29368:7;29377:96;29416:15;29377:96;;;;;;;;;;;;;;;;;:11;:25;29389:12;:10;:12::i;:::-;29377:25;;;;;;;;;;;;;;;:34;29403:7;29377:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29345:8;:129::i;:::-;29492:4;29485:11;;29235:269;;;;:::o;15412:293::-;15482:10;15464:28;;:14;;;;;;;;;;;:28;;;15456:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15557:9;;15551:3;:15;15543:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15648:14;;;;;;;;;;;15619:44;;15640:6;;;;;;;;;;15619:44;;;;;;;;;;;;15683:14;;;;;;;;;;;15674:6;;:23;;;;;;;;;;;;;;;;;;15412:293::o;33459:114::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33556:9:::1;33545:8;;:20;;;;;;;;;;;;;;;;;;33459:114:::0;:::o;28193:167::-;28271:4;28288:42;28298:12;:10;:12::i;:::-;28312:9;28323:6;28288:9;:42::i;:::-;28348:4;28341:11;;28193:167;;;;:::o;25067:35::-;;;;:::o;25004:33::-;;;;:::o;14961:89::-;15006:7;15033:9;;15026:16;;14961:89;:::o;25457:35::-;;;;:::o;33715:171::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33816:8:::1;33792:21;;:32;;;;;;;;;;;;;;;;;;33840:38;33869:8;33840:38;;;;;;;;;;;;;;;;;;;;33715:171:::0;:::o;25417:33::-;;;;:::o;25287:36::-;;;;:::o;32086:710::-;26709:12;:10;:12::i;:::-;26697:24;;:8;;;;;;;;;;;:24;;;26689:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32246:1:::1;32226:10;:17;:21;32218:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32306:23;32332:21;32306:47;;32362:23;32388:38;32408:10;:17;32388:15;:19;;:38;;;;:::i;:::-;32362:64;;32465:15;32445:16;:35;;32437:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32512:14;32529:16;32512:33;;32578:1;32558:16;:21;32554:51;;;32590:15;32581:24;;32554:51;32621:7;32616:131;32638:10;:17;32634:1;:21;;;32616:131;;;32678:26;:10;32689:1;32678:13;;;;;;;;;;;;;;;;:24;;;:26::i;:::-;32673:64;;32706:31;32730:6;32706:10;32717:1;32706:13;;;;;;;;;;;;;;;;:23;;;;:31;;;;:::i;:::-;32673:64;32657:3;;;;;;;32616:131;;;;32762:26;32781:6;32762:26;;;;;;;;;;;;;;;;;;26774:1;;;32086:710:::0;;:::o;15126:214::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15207:6:::1;::::0;::::1;;;;;;;;15190:14;;:23;;;;;;;;;;;;;;;;;;15241:1;15224:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15272:4;15266:3;:10;15254:9;:22;;;;15329:1;15292:40;;15313:6;::::0;::::1;;;;;;;;15292:40;;;;;;;;;;;;15126:214:::0;:::o;28368:143::-;28449:7;28476:11;:18;28488:5;28476:18;;;;;;;;;;;;;;;:27;28495:7;28476:27;;;;;;;;;;;;;;;;28469:34;;28368:143;;;;:::o;25499:38::-;;;;:::o;25245:35::-;;;;:::o;25109:36::-;;;;:::o;33019:110::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33116:5:::1;33086:18;:27;33105:7;33086:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33019:110:::0;:::o;25198:38::-;;;;:::o;14709:244::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14818:1:::1;14798:22;;:8;:22;;;;14790:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14908:8;14879:38;;14900:6;::::0;::::1;;;;;;;;14879:38;;;;;;;;;;;;14937:8;14928:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;14709:244:::0;:::o;26118:52::-;;;;:::o;31403:281::-;13985:12;:10;:12::i;:::-;13975:22;;:6;;;;;;;;;;:22;;;13967:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31489:12:::1;;;;;;;;;;;31481:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31576:38;31601:12;31576:20;31588:7;;31576;;:11;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;31552:7;:21;31560:12;:10;:12::i;:::-;31552:21;;;;;;;;;;;;;;;:62;;;;31649:12;:10;:12::i;:::-;31628:48;;31645:1;31628:48;;;31663:12;31628:48;;;;;;;;;;;;;;;;;;31403:281:::0;:::o;25857:38::-;;;;:::o;25811:39::-;;;;:::o;6171:106::-;6224:15;6259:10;6252:17;;6171:106;:::o;38277:337::-;38387:1;38370:19;;:5;:19;;;;38362:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38468:1;38449:21;;:7;:21;;;;38441:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38552:6;38522:11;:18;38534:5;38522:18;;;;;;;;;;;;;;;:27;38541:7;38522:27;;;;;;;;;;;;;;;:36;;;;38590:7;38574:32;;38583:5;38574:32;;;38599:6;38574:32;;;;;;;;;;;;;;;;;;38277:337;;;:::o;38622:1950::-;38760:1;38744:18;;:4;:18;;;;38736:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38837:1;38823:16;;:2;:16;;;;38815:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38907:1;38898:6;:10;38890:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38967:28;38998:24;39016:4;38998:9;:24::i;:::-;38967:55;;39035:24;39086:29;;39062:20;:53;;39035:80;;39144:19;:53;;;;;39181:16;;;;;;;;;;;39180:17;39144:53;:91;;;;;39222:13;39214:21;;:4;:21;;;;39144:91;:129;;;;;39252:21;;;;;;;;;;;39144:129;39126:222;;;39300:36;39315:20;39300:14;:36::i;:::-;39126:222;39421:12;39436:4;39421:19;;39540:18;:24;39559:4;39540:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;39568:18;:22;39587:2;39568:22;;;;;;;;;;;;;;;;;;;;;;;;;39540:50;39537:96;;;39616:5;39606:15;;39537:96;39757:18;39790;39819:13;39811:21;;:4;:21;;;39790:42;;39843:19;39871:13;39865:19;;:2;:19;;;39843:41;;39902:13;39901:14;:33;;;;;39920:14;39919:15;39901:33;39897:507;;;39966:19;;39949:14;:36;;;;39897:507;;;40016:13;40012:392;;;40061:81;40126:15;;40061:60;40102:18;;40061:36;40080:16;;40061:14;;:18;;:36;;;;:::i;:::-;:40;;:60;;;;:::i;:::-;:64;;:81;;;;:::i;:::-;40044:14;:98;;;;40171:1;40155:13;:17;;;;40200:1;40185:16;;40012:392;;;40232:14;40228:176;;;40278:85;40346:16;;40278:63;40321:19;;40278:38;40298:17;;40278:15;;:19;;:38;;;;:::i;:::-;:42;;:63;;;;:::i;:::-;:67;;:85;;;;:::i;:::-;40261:14;:102;;;;40391:1;40376:16;;40228:176;40012:392;39897:507;40488:51;40503:4;40508:2;40511:6;40518:7;40526:12;40488:14;:51::i;:::-;40550:14;:12;:14::i;:::-;38622:1950;;;;;;;;;:::o;2581:192::-;2667:7;2700:1;2695;:6;;2703:12;2687:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2727:9;2743:1;2739;:5;2727:17;;2764:1;2757:8;;;2581:192;;;;;:::o;35100:163::-;35141:7;35162:15;35179;35198:19;:17;:19::i;:::-;35161:56;;;;35235:20;35247:7;35235;:11;;:20;;;;:::i;:::-;35228:27;;;;35100:163;:::o;3979:132::-;4037:7;4064:39;4068:1;4071;4064:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4057:46;;3979:132;;;;:::o;3032:471::-;3090:7;3340:1;3335;:6;3331:47;;;3365:1;3358:8;;;;3331:47;3390:9;3406:1;3402;:5;3390:17;;3435:1;3430;3426;:5;;;;;;:10;3418:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3494:1;3487:8;;;3032:471;;;;;:::o;1678:181::-;1736:7;1756:9;1772:1;1768;:5;1756:17;;1797:1;1792;:6;;1784:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1850:1;1843:8;;;1678:181;;;;:::o;40580:2257::-;26842:4;26823:16;;:23;;;;;;;;;;;;;;;;;;40665:27:::1;40695:101;40772:23;;40695:72;40745:21;;40695:45;40719:20;;40695:19;;:23;;:45;;;;:::i;:::-;:49;;:72;;;;:::i;:::-;:76;;:101;;;;:::i;:::-;40665:131;;40833:20;40811:19;:42;40807:90;;;40877:20;40855:42;;40807:90;40908:23;40972:20;40950:19;:42;40946:111;;;41012:45;41037:19;41012:20;:24;;:45;;;;:::i;:::-;40994:63;;40946:111;41068:25;41096:22;41116:1;41096:15;:19;;:22;;;;:::i;:::-;41068:50;;41151:42;41175:17;41151:19;:23;;:42;;;;:::i;:::-;41129:64;;41206:23;41232:21;41206:47;;41264:37;41281:19;41264:16;:37::i;:::-;41312:19;41334:21;41312:43;;41368:23;41394:32;41410:15;41394:11;:15;;:32;;;;:::i;:::-;41368:58;;41506:21;41530:67;41577:19;41530:42;41550:21;;41530:15;:19;;:42;;;;:::i;:::-;:46;;:67;;;;:::i;:::-;41506:91;;41608:23;41634:69;41683:19;41634:44;41654:23;;41634:15;:19;;:44;;;;:::i;:::-;:48;;:69;;;;:::i;:::-;41608:95;;41714:20;41737:66;41783:19;41737:41;41757:20;;41737:15;:19;;:41;;;;:::i;:::-;:45;;:66;;;;:::i;:::-;41714:89;;41814:18;41835:65;41880:19;41835:40;41855:19;;41835:15;:19;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;41814:86;;41913:34;41933:13;41913:9;;;;;;;;;;;:19;;;;:34;;;;:::i;:::-;41958:38;41980:15;41958:11;;;;;;;;;;;:21;;;;:38;;;;:::i;:::-;42007:32;42026:12;42007:8;;;;;;;;;;;:18;;;;:32;;;;:::i;:::-;42076:1;42052:21;:25;;;;42114:1;42088:23;:27;;;;42149:1;42126:20;:24;;;;42183:1;42161:19;:23;;;;42253:24;42280;42298:4;42280:9;:24::i;:::-;42253:51;;42317:27;42347:68;42404:10;42347:52;42386:12;42347:34;42365:15;42347:13;:17;;:34;;;;:::i;:::-;:38;;:52;;;;:::i;:::-;:56;;:68;;;;:::i;:::-;42317:98;;42426:24;42491:15;42469:19;:37;42465:102;;;42527:40;42547:19;42527:15;:19;;:40;;;;:::i;:::-;42508:59;;42465:102;42603:1;42584:16;:20;:44;;;;;42627:1;42608:16;:20;42584:44;42580:248;;;42682:48;42695:16;42713;42682:12;:48::i;:::-;42748:68;42763:16;42781;42799;42748:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42580:248;26857:1;;;;;;;;;;;;;26888:5:::0;26869:16;;:24;;;;;;;;;;;;;;;;;;40580:2257;:::o;2142:136::-;2200:7;2227:43;2231:1;2234;2227:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2220:50;;2142:136;;;;:::o;7208:619::-;7268:4;7530:16;7557:19;7579:66;7557:88;;;;7748:7;7736:20;7724:32;;7788:11;7776:8;:23;;:42;;;;;7815:3;7803:15;;:8;:15;;7776:42;7768:51;;;;7208:619;;;:::o;8762:397::-;8877:6;8852:21;:31;;8844:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9009:12;9027:9;:14;;9050:6;9027:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9008:54;;;9081:7;9073:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8762:397;;;:::o;43982:::-;44114:7;44110:27;;44123:14;:12;:14::i;:::-;44110:27;44148:58;44166:6;44174:9;44185:6;44193:12;44148:17;:58::i;:::-;44222:18;:29;44241:9;44222:29;;;;;;;;;;;;;;;;;;;;;;;;;44221:30;:62;;;;;44269:13;44256:26;;:9;:26;;;;44221:62;44217:154;;;44316:17;;44293:20;44303:9;44293;:20::i;:::-;:40;44285:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44217:154;43982:397;;;;;:::o;38041:97::-;38100:1;38084:13;:17;;;;38129:1;38112:14;:18;;;;38041:97::o;35271:256::-;35321:7;35330;35350:15;35368:7;;35350:25;;35386:15;35404:7;;35386:25;;35436:20;35448:7;;35436;;:11;;:20;;;;:::i;:::-;35426:7;:30;35422:61;;;35466:7;;35475;;35458:25;;;;;;;;35422:61;35502:7;35511;35494:25;;;;;;35271:256;;;:::o;4607:278::-;4693:7;4725:1;4721;:5;4728:12;4713:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4752:9;4768:1;4764;:5;;;;;;4752:17;;4876:1;4869:8;;;4607:278;;;;;:::o;42845:529::-;42911:21;42949:1;42935:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42911:40;;42980:4;42962;42967:1;42962:7;;;;;;;;;;;;;:23;;;;;;;;;;;43006:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42996:4;43001:1;42996:7;;;;;;;;;;;;;:32;;;;;;;;;;;43041:62;43058:4;43073:15;43091:11;43041:8;:62::i;:::-;43142:15;:66;;;43223:11;43249:1;43293:4;43320;43340:15;43142:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42845:529;;:::o;43382:519::-;43530:62;43547:4;43562:15;43580:11;43530:8;:62::i;:::-;43635:15;:31;;;43674:9;43707:4;43727:11;43753:1;43796;43847:4;43867:15;43635:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43382:519;;:::o;44387:534::-;44506:15;44523:23;44548;44573:18;44593:19;44616;44627:7;44616:10;:19::i;:::-;44505:130;;;;;;;;;;44664:28;44684:7;44664;:15;44672:6;44664:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44646:7;:15;44654:6;44646:15;;;;;;;;;;;;;;;:46;;;;44724:39;44747:15;44724:7;:18;44732:9;44724:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44703:7;:18;44711:9;44703:18;;;;;;;;;;;;;;;:60;;;;44774:26;44789:10;44774:14;:26::i;:::-;44811:42;44827:11;44840:12;44811:15;:42::i;:::-;44886:9;44869:44;;44878:6;44869:44;;;44897:15;44869:44;;;;;;;;;;;;;;;;;;44387:534;;;;;;;;;:::o;33987:342::-;34046:7;34055;34064;34073;34082;34102:25;;:::i;:::-;34130;34147:7;34130:16;:25::i;:::-;34102:53;;34166:25;;:::i;:::-;34194:49;34211:7;34220;34228:1;34220:10;;;;;;;;;;;34232:7;34240:1;34232:10;;;;;;;;;;;34194:16;:49::i;:::-;34166:77;;34262:7;34270:1;34262:10;;;;;;;;;;;34274:7;34282:1;34274:10;;;;;;;;;;;34286:7;34294:1;34286:10;;;;;;;;;;;34298:7;34306:1;34298:10;;;;;;;;;;;34310:7;34318:1;34310:10;;;;;;;;;;;34254:67;;;;;;;;;;;;33987:342;;;;;;;:::o;35535:237::-;35598:19;35621:10;:8;:10::i;:::-;35598:33;;35642:18;35663:27;35678:11;35663:10;:14;;:27;;;;:::i;:::-;35642:48;;35726:38;35753:10;35726:7;:22;35742:4;35726:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35701:7;:22;35717:4;35701:22;;;;;;;;;;;;;;;:63;;;;35535:237;;;:::o;35780:1903::-;35865:19;35888:10;:8;:10::i;:::-;35865:33;;35909:19;35931:28;35947:11;35931;:15;;:28;;;;:::i;:::-;35909:50;;35995:39;36022:11;35995:7;:22;36011:4;35995:22;;;;;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;35970:7;:22;35986:4;35970:22;;;;;;;;;;;;;;;:64;;;;36068:1;36051:14;;:18;36047:1627;;;36084:25;36126:27;36170:29;36216:26;36281:1;36265:12;:17;;;36261:956;;;36319:51;36355:14;;36319:31;36335:14;;36319:11;:15;;:31;;;;:::i;:::-;:35;;:51;;;;:::i;:::-;36299:71;;36407:53;36445:14;;36407:33;36423:16;;36407:11;:15;;:33;;;;:::i;:::-;:37;;:53;;;;:::i;:::-;36385:75;;36499:55;36539:14;;36499:35;36515:18;;36499:11;:15;;:35;;;;:::i;:::-;:39;;:55;;;;:::i;:::-;36475:79;;36590:52;36627:14;;36590:32;36606:15;;36590:11;:15;;:32;;;;:::i;:::-;:36;;:52;;;;:::i;:::-;36569:73;;36261:956;;;36693:1;36677:12;:17;;;36673:544;;;36731:52;36768:14;;36731:32;36747:15;;36731:11;:15;;:32;;;;:::i;:::-;:36;;:52;;;;:::i;:::-;36711:72;;36820:54;36859:14;;36820:34;36836:17;;36820:11;:15;;:34;;;;:::i;:::-;:38;;:54;;;;:::i;:::-;36798:76;;36913:56;36954:14;;36913:36;36929:19;;36913:11;:15;;:36;;;;:::i;:::-;:40;;:56;;;;:::i;:::-;36889:80;;37005:53;37043:14;;37005:33;37021:16;;37005:11;:15;;:33;;;;:::i;:::-;:37;;:53;;;;:::i;:::-;36984:74;;36673:544;;;37109:1;37093:12;:17;;;37089:128;;;37147:56;37188:14;;37147:36;37163:19;;37147:11;:15;;:36;;;;:::i;:::-;:40;;:56;;;;:::i;:::-;37127:76;;37089:128;36673:544;36261:956;37255:1;37235:17;:21;37231:91;;;37280:42;37304:17;37280:19;;:23;;:42;;;;:::i;:::-;37258:19;:64;;;;37231:91;37361:1;37339:19;:23;37335:99;;;37388:46;37414:19;37388:21;;:25;;:46;;;;:::i;:::-;37364:21;:70;;;;37335:99;37475:1;37451:21;:25;37447:107;;;37504:50;37532:21;37504:23;;:27;;:50;;;;:::i;:::-;37478:23;:76;;;;37447:107;37592:1;37571:18;:22;37567:95;;;37618:44;37643:18;37618:20;;:24;;:44;;;;:::i;:::-;37595:20;:67;;;;37567:95;36047:1627;;;;;35780:1903;;;;:::o;34337:359::-;34402:21;;:::i;:::-;34436:18;34457:30;34479:7;34457:21;:30::i;:::-;34436:51;;34498:19;34520:31;34543:7;34520:22;:31::i;:::-;34498:53;;34562:23;34588:40;34616:11;34588:23;34600:10;34588:7;:11;;:23;;;;:::i;:::-;:27;;:40;;;;:::i;:::-;34562:66;;34639:49;;;;;;;;34647:15;34639:49;;;;34664:10;34639:49;;;;34676:11;34639:49;;;;;;;;34337:359;;;:::o;34704:388::-;34810:21;;:::i;:::-;34844:19;34866:10;:8;:10::i;:::-;34844:32;;34887:15;34905:24;34917:11;34905:7;:11;;:24;;;;:::i;:::-;34887:42;;34940:23;34966:74;35011:28;35027:11;35011;:15;;:28;;;;:::i;:::-;34966:40;34978:27;34993:11;34978:10;:14;;:27;;;;:::i;:::-;34966:7;:11;;:40;;;;:::i;:::-;:44;;:74;;;;:::i;:::-;34940:100;;35051:33;;;;;;;;35059:7;35051:33;;;;35068:15;35051:33;;;;;;;;34704:388;;;;;:::o;37691:166::-;37761:7;37788:61;37833:5;37788:26;37800:13;;37788:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;37781:68;;37691:166;;;:::o;37865:168::-;37936:7;37963:62;38009:5;37963:27;37975:14;;37963:7;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;37956:69;;37865:168;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://23cdf4829d13b4e94531d1eb90e5d24691c6bed4bb519f1f614e1e37712346d0
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.