Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Bonding C... | 12772306 | 1308 days ago | IN | 0 ETH | 0.01472721 | ||||
Create Bonding C... | 12335380 | 1375 days ago | IN | 0 ETH | 0.21820897 | ||||
Create Bonding C... | 12335361 | 1375 days ago | IN | 0 ETH | 0.17600562 | ||||
Create Bonding C... | 12335214 | 1375 days ago | IN | 0 ETH | 0.19837179 | ||||
Create Bonding C... | 12224979 | 1392 days ago | IN | 0 ETH | 0.25652634 | ||||
Create Bonding C... | 12224881 | 1392 days ago | IN | 0 ETH | 0.20732596 | ||||
Create Bonding C... | 12063441 | 1417 days ago | IN | 0 ETH | 0.39653064 | ||||
Transfer | 12063243 | 1417 days ago | IN | 0.1 ETH | 0.004263 |
Latest 7 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12772306 | 1308 days ago | Contract Creation | 0 ETH | |||
12335380 | 1375 days ago | Contract Creation | 0 ETH | |||
12335361 | 1375 days ago | Contract Creation | 0 ETH | |||
12335214 | 1375 days ago | Contract Creation | 0 ETH | |||
12224979 | 1392 days ago | Contract Creation | 0 ETH | |||
12224881 | 1392 days ago | Contract Creation | 0 ETH | |||
12063441 | 1417 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
BondingCurveFactory
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.7.0; import { BondingCurve } from "./BondingCurve.sol"; import { IERC20 } from "./IERC20.sol"; contract BondingCurveFactory { address public feeTo; BondingCurve[] public allBondingToken; /** * @dev Constructor for the factory contract * @param _feeTo The receiving address for fees that is generated from withdraw */ constructor(address _feeTo) { require(_feeTo != address(0), "Address must not be address(0)"); feeTo = _feeTo; } function bondingTokenCount() public view returns (uint256) { return allBondingToken.length; } /** * @dev Create new bonding curve token * @param _tokenToSell The address for the token to sell * @param _token The address for the trading token * @param _start The start time of token sale * @param _end The end time of token sale * @param _redeemInTime Whether the user can redeem immediately after the sale, instead of waiting for the end time. * @param _maximumBalance the maximum number of tokens an account can hold * @param _cap The amount of to raise * @param _team The address for the token creator team * @param _curve curve lib * @param _params The params list for curve */ function createBondingCurveToken(IERC20 _tokenToSell, IERC20 _token, uint256 _start, uint256 _end, bool _redeemInTime, uint256 _maximumBalance, uint256 _cap, address _team, address _curve, uint256[] memory _params) external { BondingCurve newBondingCurve = new BondingCurve(_tokenToSell, _token, _start, _end, _redeemInTime, _maximumBalance, _cap, _team, _curve, _params); bool success = _tokenToSell.transferFrom(msg.sender, address(newBondingCurve), _cap); require(success, "Transfer failed"); newBondingCurve.initialize(this); allBondingToken.push(newBondingCurve); } } // 3570785
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.7.0; import { IERC20 } from "./IERC20.sol"; import { BondingCurveFactory } from "./BondingCurveFactory.sol"; library AddressUtils { function isContract(address addr) internal view returns (bool) { uint256 size; // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(addr) } return size > 0; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } } interface ICurve { function isCurve() external returns (bool); } contract BondingCurve is IERC20 { using AddressUtils for address; using SafeMath for uint256; // keccak256("ERC20.decimals") bytes32 private constant DECIMALS_SLOT = 0x9af4a8efdef7082fbe0a356fe9ce920abbe3461c19ff1888bb79ec1fbee0a564; // keccak256("curve.parameters") bytes32 private constant PARAMETERS_SLOT = 0x9bb186d4e76241ac6fcfb26f9c0c67a7a4288892aa856bb2ef40fc277c0bbbe2; // keccak256(keccak256("curve.parameters")) bytes32 private constant PARAMETERS_SLOT_HASH = 0x22e3a4713640ec908fad4277bc5c59c3802aee5469f8a18fa0b552bf09d2299b; // bytes4(keccak256("integral(uint256,uint256)") bytes4 private constant INTEGRAL_ABI = 0xc3882fef; // bytes4(keccak256("valueOf(uint256)") bytes4 private constant VALUE_OF_ABI = 0xcadf338f; BondingCurveFactory public factory; uint256 public supplied = 0; address public founder; // the address of the founder IERC20 public tokenToSell; // the token to offer IERC20 public token; // the token to receive address public curve; bool public initialized; // if token transfer is ready uint256 public start; // start time for sale uint256 public end; // deadline for sale. After the sale is completed, it will be set to 0 to indicate that contract has ended. bool public redeemInTime; uint256 public maximumBalance; // the maximum number of tokens an account can hold, 0 means no limit. // ERC20 params uint256 public override totalSupply; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; bool private rentrancyLock; bool public founderExit; event Buy(address indexed user, uint256 amount, uint256 prict); event Sell(address indexed user, uint256 amount, uint256 prict); /** * @dev Constructor for the bonding curve * @param _tokenToSell The address for the token to sell * @param _token The address for the trading token * @param _start The start time of token sale * @param _end The end time of token sale * @param _redeemInTime Whether the user can redeem immediately after the sale, instead of waiting for the end time. * @param _maximumBalance the maximum number of tokens an account can hold * @param _totalSupply The amount of to raise * @param _founder The address for the token creator founder * @param _curve curve lib * @param _params The params list for curve */ constructor(IERC20 _tokenToSell, IERC20 _token, uint256 _start, uint256 _end, bool _redeemInTime, uint256 _maximumBalance, uint256 _totalSupply, address _founder, address _curve, uint256[] memory _params) { require(_founder != address(0), "Founder's address must not be address(0)"); require(_start < _end); require(address(_tokenToSell).isContract()); require(address(_token).isContract()); require(ICurve(_curve).isCurve()); tokenToSell = _tokenToSell; token = _token; curve = _curve; totalSupply = _totalSupply; founder = _founder; end = _end; start = _start; redeemInTime = _redeemInTime; maximumBalance = _maximumBalance; uint256 l = _params.length; uint256 d = _tokenToSell.decimals(); assembly { sstore(PARAMETERS_SLOT, l) sstore(DECIMALS_SLOT, d) } for (uint256 i = 0; i < l; i++) { uint256 v = _params[i]; assembly { sstore(add(PARAMETERS_SLOT_HASH, i), v) } } } /** * @dev Prevents a contract from calling itself, directly or indirectly. */ modifier nonReentrant() { require(!rentrancyLock); rentrancyLock = true; _; rentrancyLock = false; } /** * @dev Modifier for checking the token sale is ended */ modifier afterEnded() { bool ended = block.timestamp > end || (redeemInTime && supplied >= totalSupply); require(ended, "the token sale has not ended"); _; } /** * @dev Modifier for checking the token sale is active */ modifier active() { require(initialized, "the contract has not initialized"); require(block.timestamp > start, "the token sale hasn't started"); require(block.timestamp < end, "the token sale has ended"); require(supplied < totalSupply, "the token sale has ended"); _; } /** * @dev Initialize checks whether the token has received */ function initialize(BondingCurveFactory _factory) external { require(tokenToSell.balanceOf(address(this)) == totalSupply, "token has not received"); factory = _factory; initialized = true; } function parameters() external view returns (uint256[] memory params) { uint256 l; assembly { l := sload(PARAMETERS_SLOT) } params = new uint256[](l); for (uint256 i = 0; i < l; i++) { uint256 v; assembly { v := sload(add(PARAMETERS_SLOT_HASH, i)) } params[i] = v; } } function priceNow() external view returns (uint256) { return priceAt(supplied); } function costFor(uint256 amount) external view returns (uint256) { return totalPriceBetween(supplied, supplied.add(amount)); } function returnFor(uint256 amount) external view returns (uint256) { return totalPriceBetween(supplied.sub(amount), supplied); } function priceAt(uint256 position) public view returns (uint256 price) { (bool success, bytes memory data) = address(this).staticcall(abi.encodePacked(VALUE_OF_ABI, position)); require(success); require(data.length == 32); assembly { price := mload(add(data, 32)) } } function totalPriceBetween(uint256 left, uint256 right) public view returns (uint256 price) { (bool success, bytes memory result) = address(this).staticcall(abi.encodePacked(INTEGRAL_ABI, left, right)); require(success); require(result.length == 32); assembly { price := mload(add(result, 32)) } } /** * @dev Buy token with bonding curve * @param amount The amount of token to mint */ function buy(uint256 amount) external nonReentrant active { uint256 newSupplied = supplied.add(amount); if (newSupplied > totalSupply) { amount = totalSupply - supplied; newSupplied = totalSupply; } uint256 totalCost = totalPriceBetween(supplied, newSupplied); _mint(msg.sender, amount); bool success = token.transferFrom(msg.sender, address(this), totalCost); require(success); emit Buy(msg.sender, amount, totalCost); } /** * @dev Sell token with bonding curve * @param amount The amount of token to burn */ function sell(uint256 amount) external nonReentrant active { uint256 newSupplied = supplied.sub(amount); uint256 totalReturn = totalPriceBetween(newSupplied, supplied); uint256 afterTax = 99 * totalReturn / 100; _burn(msg.sender, amount); bool success = token.transfer(msg.sender, afterTax); require(success); emit Sell(msg.sender, amount, afterTax); } /** * @dev Withdraw function allows the founder to withdraw all funds to their founder address */ function withdrawFund() external afterEnded { uint256 tokenReceived = token.balanceOf(address(this)); uint256 tax = 3 * tokenReceived / 100; bool success = token.transfer(factory.feeTo(), tax); require(success); success = token.transfer(founder, tokenReceived - tax); require(success); } /** * @dev Withdraw function allows the founder to withdraw rest to-sell-token. */ function withdrawToken() external afterEnded { require(!founderExit); bool success = tokenToSell.transfer(founder, totalSupply - supplied); require(success); founderExit = true; } /** * @dev The function to redeem bToken to the original token */ function redeem() external afterEnded { uint256 amountToRedeem = balanceOf(msg.sender); _balances[msg.sender] = _balances[msg.sender].sub(amountToRedeem); emit Transfer(msg.sender, address(0), amountToRedeem); bool success = tokenToSell.transfer(msg.sender, amountToRedeem); require(success); } // ERC20 methods /** * @dev Returns the name of the token. */ function name() public view override returns (string memory) { return string(abi.encodePacked("b", tokenToSell.name())); } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view override returns (string memory) { return string(abi.encodePacked("b", tokenToSell.symbol())); } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function decimals() public view override returns (uint256) { uint256 d; assembly { d := sload(DECIMALS_SLOT) } return d; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { require(msg.sender != recipient, "Cannot transfer to own account"); _balances[msg.sender] = _balances[msg.sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); require(maximumBalance == 0 || _balances[recipient] <= maximumBalance); emit Transfer(msg.sender, recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { require(sender != recipient, "Cannot transfer to own account"); _balances[sender] = _balances[sender].sub(amount); _allowed[sender][msg.sender] = _allowed[sender][msg.sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); require(maximumBalance == 0 || _balances[recipient] <= maximumBalance); emit Transfer(sender, recipient, amount); return true; } function approve(address spender, uint256 amount) public override returns (bool) { require(_allowed[msg.sender][spender] == 0 || amount == 0); _allowed[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowed[owner][spender]; } function _mint(address account, uint256 amount) internal virtual { require (account != address(0)); supplied = supplied.add(amount); _balances[account] = _balances[account].add(amount); require(maximumBalance == 0 || _balances[account] <= maximumBalance); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require (account != address(0)); _balances[account] = _balances[account].sub(amount); supplied = supplied.sub(amount); emit Transfer(account, address(0), amount); } fallback() external { require(msg.sender == address(this)); (bool success, bytes memory data) = curve.delegatecall(msg.data); assembly { switch success case 0 { revert(add(data, 32), returndatasize()) } default { return(add(data, 32), returndatasize()) } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); function decimals() external view returns (uint256); /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view returns (string memory); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allBondingToken","outputs":[{"internalType":"contract BondingCurve","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bondingTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tokenToSell","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"},{"internalType":"bool","name":"_redeemInTime","type":"bool"},{"internalType":"uint256","name":"_maximumBalance","type":"uint256"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"address","name":"_team","type":"address"},{"internalType":"address","name":"_curve","type":"address"},{"internalType":"uint256[]","name":"_params","type":"uint256[]"}],"name":"createBondingCurveToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051613e0c380380613e0c8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f41646472657373206d757374206e6f742062652061646472657373283029000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050613cd5806101376000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063017e7e58146100515780633f4236531461008557806357b3082c146101f25780639801dc9d1461024a575b600080fd5b610059610268565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f0600480360361014081101561009c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035151590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561016d57600080fd5b82018360208201111561017f57600080fd5b803590602001918460208302840111640100000000831117156101a157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061028c565b005b61021e6004803603602081101561020857600080fd5b81019080803590602001909291905050506105da565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610252610619565b6040518082815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008a8a8a8a8a8a8a8a8a8a6040516102a490610626565b808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200188815260200187151581526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610374578082015181840152602081019050610359565b505050509050019b505050505050505050505050604051809103906000f0801580156103a4573d6000803e3d6000fd5b50905060008b73ffffffffffffffffffffffffffffffffffffffff166323b872dd3384896040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b81019080805190602001909291905050509050806104e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663c4d66de8306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561055157600080fd5b505af1158015610565573d6000803e3d6000fd5b505050506001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050505050505050565b600181815481106105ea57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600180549050905090565b61366c806106348339019056fe608060405260006001553480156200001657600080fd5b506040516200366c3803806200366c83398181016040526101408110156200003d57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080516040519392919084640100000000821115620000b857600080fd5b83820191506020820185811115620000cf57600080fd5b8251866020820283011164010000000082111715620000ed57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200012657808201518184015260208101905062000109565b50505050905001604052505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180620036446028913960400191505060405180910390fd5b868810620001c857600080fd5b620001f48a73ffffffffffffffffffffffffffffffffffffffff166200053e60201b62002d641760201c565b620001fe57600080fd5b6200022a8973ffffffffffffffffffffffffffffffffffffffff166200053e60201b62002d641760201c565b6200023457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166327abb1d86040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d6020811015620002a957600080fd5b8101908080519060200190929190505050620002c457600080fd5b89600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a8190555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866007819055508760068190555085600860006101000a81548160ff0219169083151502179055508460098190555060008151905060008b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200044d57600080fd5b505afa15801562000462573d6000803e3d6000fd5b505050506040513d60208110156200047957600080fd5b81019080805190602001909291905050509050817f9bb186d4e76241ac6fcfb26f9c0c67a7a4288892aa856bb2ef40fc277c0bbbe255807f9af4a8efdef7082fbe0a356fe9ce920abbe3461c19ff1888bb79ec1fbee0a5645560005b828110156200052b576000848281518110620004ed57fe5b6020026020010151905080827f22e3a4713640ec908fad4277bc5c59c3802aee5469f8a18fa0b552bf09d2299b0155508080600101915050620004d5565b5050505050505050505050505062000551565b600080823b905060008111915050919050565b6130e380620005616000396000f3fe608060405234801561001057600080fd5b50600436106101ff5760003560e01c80639dab20541161011a578063c4d66de8116100ad578063e07fa3c11161007c578063e07fa3c1146109c8578063e4849b32146109d2578063efbe1c1c14610a00578063fc0c546a14610a1e578063feaa7f2914610a5257610200565b8063c4d66de8146108d4578063ca628c7814610918578063d96a094a14610922578063dd62ed3e1461095057610200565b8063b31dfc8f116100e9578063b31dfc8f14610836578063be040fb014610878578063be9a655514610882578063c45a0155146108a057610200565b80639dab205414610724578063a7cb817c14610766578063a9059cbb146107b2578063ae2f146e1461081657610200565b80636cd07154116101925780637b1da1bd116101615780637b1da1bd146105e05780638660c2b014610622578063890357301461064257806395d89b41146106a157610200565b80636cd07154146105025780636e4228311461053657806370a08231146105545780637165485d146105ac57610200565b806323b872dd116101ce57806323b872dd1461040e57806328e29c1c14610492578063313ce567146104b05780634d853ee5146104ce57610200565b806306fdde03146102e9578063095ea7b31461036c578063158ef93e146103d057806318160ddd146103f057610200565b5b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461023857600080fd5b60006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600036604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146102c8576040519150601f19603f3d011682016040523d82523d6000602084013e6102cd565b606091505b509150915081600081146102e2573d60208301f35b3d60208301fd5b6102f1610a70565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610331578082015181840152602081019050610316565b50505050905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103b86004803603604081101561038257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c6a565b60405180821515815260200191505060405180910390f35b6103d8610def565b60405180821515815260200191505060405180910390f35b6103f8610e02565b6040518082815260200191505060405180910390f35b61047a6004803603606081101561042457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e08565b60405180821515815260200191505060405180910390f35b61049a6111b0565b6040518082815260200191505060405180910390f35b6104b86111b6565b6040518082815260200191505060405180910390f35b6104d66111e4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61050a61120a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61053e611230565b6040518082815260200191505060405180910390f35b6105966004803603602081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611236565b6040518082815260200191505060405180910390f35b6105b461127f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61060c600480360360208110156105f657600080fd5b81019080803590602001909291905050506112a5565b6040518082815260200191505060405180910390f35b61062a6112ce565b60405180821515815260200191505060405180910390f35b61064a6112e1565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561068d578082015181840152602081019050610672565b505050509050019250505060405180910390f35b6106a96113b1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106e95780820151818401526020810190506106ce565b50505050905090810190601f1680156107165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107506004803603602081101561073a57600080fd5b81019080803590602001909291905050506115ab565b6040518082815260200191505060405180910390f35b61079c6004803603604081101561077c57600080fd5b8101908080359060200190929190803590602001909291905050506116d8565b6040518082815260200191505060405180910390f35b6107fe600480360360408110156107c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061180e565b60405180821515815260200191505060405180910390f35b61081e611aa6565b60405180821515815260200191505060405180910390f35b6108626004803603602081101561084c57600080fd5b8101908080359060200190929190505050611ab9565b6040518082815260200191505060405180910390f35b610880611ae2565b005b61088a611d6e565b6040518082815260200191505060405180910390f35b6108a8611d74565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610916600480360360208110156108ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d98565b005b610920611f30565b005b61094e6004803603602081101561093857600080fd5b8101908080359060200190929190505050612110565b005b6109b26004803603604081101561096657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124eb565b6040518082815260200191505060405180910390f35b6109d0612572565b005b6109fe600480360360208110156109e857600080fd5b810190808035906020019092919050505061296f565b005b610a08612d26565b6040518082815260200191505060405180910390f35b610a26612d2c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a5a612d52565b6040518082815260200191505060405180910390f35b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015610ada57600080fd5b505afa158015610aee573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610b1857600080fd5b8101908080516040519392919084640100000000821115610b3857600080fd5b83820191506020820185811115610b4e57600080fd5b8251866001820283011164010000000082111715610b6b57600080fd5b8083526020830192505050908051906020019080838360005b83811015610b9f578082015181840152602081019050610b84565b50505050905090810190601f168015610bcc5780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f620000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b60208310610c315780518252602082019150602081019050602083039250610c0e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052905090565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480610cf65750600082145b610cff57600080fd5b81600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600560149054906101000a900460ff1681565b600a5481565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f74207472616e7366657220746f206f776e206163636f756e74000081525060200191505060405180910390fd5b610efe82600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fd082600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110a282600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8e90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060095414806111375750600954600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b61114057600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60095481565b6000807f9af4a8efdef7082fbe0a356fe9ce920abbe3461c19ff1888bb79ec1fbee0a5645490508091505090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112c76112bf83600154612d7790919063ffffffff16565b6001546116d8565b9050919050565b600d60019054906101000a900460ff1681565b606060007f9bb186d4e76241ac6fcfb26f9c0c67a7a4288892aa856bb2ef40fc277c0bbbe25490508067ffffffffffffffff8111801561132057600080fd5b5060405190808252806020026020018201604052801561134f5781602001602082028036833780820191505090505b50915060005b818110156113ac576000817f22e3a4713640ec908fad4277bc5c59c3802aee5469f8a18fa0b552bf09d2299b015490508084838151811061139257fe5b602002602001018181525050508080600101915050611355565b505090565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561141b57600080fd5b505afa15801561142f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561145957600080fd5b810190808051604051939291908464010000000082111561147957600080fd5b8382019150602082018581111561148f57600080fd5b82518660018202830111640100000000821117156114ac57600080fd5b8083526020830192505050908051906020019080838360005b838110156114e05780820151818401526020810190506114c5565b50505050905090810190601f16801561150d5780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f620000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b60208310611572578051825260208201915060208101905060208303925061154f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052905090565b60008060603073ffffffffffffffffffffffffffffffffffffffff1663cadf338f60e01b8560405160200180837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106116485780518252602082019150602081019050602083039250611625565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146116a8576040519150601f19603f3d011682016040523d82523d6000602084013e6116ad565b606091505b5091509150816116bc57600080fd5b60208151146116ca57600080fd5b602081015192505050919050565b60008060603073ffffffffffffffffffffffffffffffffffffffff1663c3882fef60e01b868660405160200180847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040183815260200182815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831061177d578051825260208201915060208101905060208303925061175a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b5091509150816117f157600080fd5b60208151146117ff57600080fd5b60208101519250505092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156118b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f74207472616e7366657220746f206f776e206163636f756e74000081525060200191505060405180910390fd5b61190482600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061199982600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8e90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006009541480611a2e5750600954600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b611a3757600080fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600860009054906101000a900460ff1681565b6000611adb600154611ad684600154612d8e90919063ffffffff16565b6116d8565b9050919050565b6000600754421180611b105750600860009054906101000a900460ff168015611b0f5750600a5460015410155b5b905080611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f74686520746f6b656e2073616c6520686173206e6f7420656e6465640000000081525060200191505060405180910390fd5b6000611b9033611236565b9050611be481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d2257600080fd5b505af1158015611d36573d6000803e3d6000fd5b505050506040513d6020811015611d4c57600080fd5b8101908080519060200190929190505050905080611d6957600080fd5b505050565b60065481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a54600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e2457600080fd5b505afa158015611e38573d6000803e3d6000fd5b505050506040513d6020811015611e4e57600080fd5b810190808051906020019092919050505014611ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f746f6b656e20686173206e6f742072656365697665640000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560146101000a81548160ff02191690831515021790555050565b6000600754421180611f5e5750600860009054906101000a900460ff168015611f5d5750600a5460015410155b5b905080611fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f74686520746f6b656e2073616c6520686173206e6f7420656e6465640000000081525060200191505060405180910390fd5b600d60019054906101000a900460ff1615611fed57600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600a54036040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156120aa57600080fd5b505af11580156120be573d6000803e3d6000fd5b505050506040513d60208110156120d457600080fd5b81019080805190602001909291905050509050806120f157600080fd5b6001600d60016101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900460ff161561212a57600080fd5b6001600d60006101000a81548160ff021916908315150217905550600560149054906101000a900460ff166121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f74686520636f6e747261637420686173206e6f7420696e697469616c697a656481525060200191505060405180910390fd5b600654421161223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f74686520746f6b656e2073616c65206861736e2774207374617274656400000081525060200191505060405180910390fd5b60075442106122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b600a546001541061232e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b600061234582600154612d8e90919063ffffffff16565b9050600a5481111561236057600154600a54039150600a5490505b600061236e600154836116d8565b905061237a3384612daa565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561242d57600080fd5b505af1158015612441573d6000803e3d6000fd5b505050506040513d602081101561245757600080fd5b810190808051906020019092919050505090508061247457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed8584604051808381526020018281526020019250505060405180910390a25050506000600d60006101000a81548160ff02191690831515021790555050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006007544211806125a05750600860009054906101000a900460ff16801561259f5750600a5460015410155b5b905080612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f74686520746f6b656e2073616c6520686173206e6f7420656e6465640000000081525060200191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126a057600080fd5b505afa1580156126b4573d6000803e3d6000fd5b505050506040513d60208110156126ca57600080fd5b810190808051906020019092919050505090506000606482600302816126ec57fe5b0490506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561279557600080fd5b505afa1580156127a9573d6000803e3d6000fd5b505050506040513d60208110156127bf57600080fd5b8101908080519060200190929190505050846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561282457600080fd5b505af1158015612838573d6000803e3d6000fd5b505050506040513d602081101561284e57600080fd5b810190808051906020019092919050505090508061286b57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168486036040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050506040513d602081101561294c57600080fd5b810190808051906020019092919050505090508061296957600080fd5b50505050565b600d60009054906101000a900460ff161561298957600080fd5b6001600d60006101000a81548160ff021916908315150217905550600560149054906101000a900460ff16612a26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f74686520636f6e747261637420686173206e6f7420696e697469616c697a656481525060200191505060405180910390fd5b6006544211612a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f74686520746f6b656e2073616c65206861736e2774207374617274656400000081525060200191505060405180910390fd5b6007544210612b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b600a5460015410612b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b6000612ba482600154612d7790919063ffffffff16565b90506000612bb4826001546116d8565b9050600060648260630281612bc557fe5b049050612bd23385612f59565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c6757600080fd5b505af1158015612c7b573d6000803e3d6000fd5b505050506040513d6020811015612c9157600080fd5b8101908080519060200190929190505050905080612cae57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a8684604051808381526020018281526020019250505060405180910390a2505050506000600d60006101000a81548160ff02191690831515021790555050565b60075481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612d5f6001546115ab565b905090565b600080823b905060008111915050919050565b600082821115612d8357fe5b818303905092915050565b600080828401905083811015612da057fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612de457600080fd5b612df981600154612d8e90919063ffffffff16565b600181905550612e5181600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8e90919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006009541480612ee65750600954600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b612eef57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9357600080fd5b612fe581600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303d81600154612d7790919063ffffffff16565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fea26469706673582212200f27805b16e8e043a01a31ea9fea36fc6e9ee54025c400741b0cd7e186785cd464736f6c63430007040033466f756e64657227732061646472657373206d757374206e6f742062652061646472657373283029a2646970667358221220baeb6553cc89af4e138abebfeea2374ff1c8d4728a7caa3c1ee3bc69eea4b8ce64736f6c634300070400330000000000000000000000007614ebee52f4733e0ed864429d41516af28560a6
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063017e7e58146100515780633f4236531461008557806357b3082c146101f25780639801dc9d1461024a575b600080fd5b610059610268565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101f0600480360361014081101561009c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035151590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561016d57600080fd5b82018360208201111561017f57600080fd5b803590602001918460208302840111640100000000831117156101a157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061028c565b005b61021e6004803603602081101561020857600080fd5b81019080803590602001909291905050506105da565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610252610619565b6040518082815260200191505060405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008a8a8a8a8a8a8a8a8a8a6040516102a490610626565b808b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200188815260200187151581526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610374578082015181840152602081019050610359565b505050509050019b505050505050505050505050604051809103906000f0801580156103a4573d6000803e3d6000fd5b50905060008b73ffffffffffffffffffffffffffffffffffffffff166323b872dd3384896040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b81019080805190602001909291905050509050806104e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663c4d66de8306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561055157600080fd5b505af1158015610565573d6000803e3d6000fd5b505050506001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050505050505050565b600181815481106105ea57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600180549050905090565b61366c806106348339019056fe608060405260006001553480156200001657600080fd5b506040516200366c3803806200366c83398181016040526101408110156200003d57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080516040519392919084640100000000821115620000b857600080fd5b83820191506020820185811115620000cf57600080fd5b8251866020820283011164010000000082111715620000ed57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200012657808201518184015260208101905062000109565b50505050905001604052505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620001bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180620036446028913960400191505060405180910390fd5b868810620001c857600080fd5b620001f48a73ffffffffffffffffffffffffffffffffffffffff166200053e60201b62002d641760201c565b620001fe57600080fd5b6200022a8973ffffffffffffffffffffffffffffffffffffffff166200053e60201b62002d641760201c565b6200023457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166327abb1d86040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d6020811015620002a957600080fd5b8101908080519060200190929190505050620002c457600080fd5b89600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a8190555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550866007819055508760068190555085600860006101000a81548160ff0219169083151502179055508460098190555060008151905060008b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200044d57600080fd5b505afa15801562000462573d6000803e3d6000fd5b505050506040513d60208110156200047957600080fd5b81019080805190602001909291905050509050817f9bb186d4e76241ac6fcfb26f9c0c67a7a4288892aa856bb2ef40fc277c0bbbe255807f9af4a8efdef7082fbe0a356fe9ce920abbe3461c19ff1888bb79ec1fbee0a5645560005b828110156200052b576000848281518110620004ed57fe5b6020026020010151905080827f22e3a4713640ec908fad4277bc5c59c3802aee5469f8a18fa0b552bf09d2299b0155508080600101915050620004d5565b5050505050505050505050505062000551565b600080823b905060008111915050919050565b6130e380620005616000396000f3fe608060405234801561001057600080fd5b50600436106101ff5760003560e01c80639dab20541161011a578063c4d66de8116100ad578063e07fa3c11161007c578063e07fa3c1146109c8578063e4849b32146109d2578063efbe1c1c14610a00578063fc0c546a14610a1e578063feaa7f2914610a5257610200565b8063c4d66de8146108d4578063ca628c7814610918578063d96a094a14610922578063dd62ed3e1461095057610200565b8063b31dfc8f116100e9578063b31dfc8f14610836578063be040fb014610878578063be9a655514610882578063c45a0155146108a057610200565b80639dab205414610724578063a7cb817c14610766578063a9059cbb146107b2578063ae2f146e1461081657610200565b80636cd07154116101925780637b1da1bd116101615780637b1da1bd146105e05780638660c2b014610622578063890357301461064257806395d89b41146106a157610200565b80636cd07154146105025780636e4228311461053657806370a08231146105545780637165485d146105ac57610200565b806323b872dd116101ce57806323b872dd1461040e57806328e29c1c14610492578063313ce567146104b05780634d853ee5146104ce57610200565b806306fdde03146102e9578063095ea7b31461036c578063158ef93e146103d057806318160ddd146103f057610200565b5b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461023857600080fd5b60006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600036604051808383808284378083019250505092505050600060405180830381855af49150503d80600081146102c8576040519150601f19603f3d011682016040523d82523d6000602084013e6102cd565b606091505b509150915081600081146102e2573d60208301f35b3d60208301fd5b6102f1610a70565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610331578082015181840152602081019050610316565b50505050905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103b86004803603604081101561038257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c6a565b60405180821515815260200191505060405180910390f35b6103d8610def565b60405180821515815260200191505060405180910390f35b6103f8610e02565b6040518082815260200191505060405180910390f35b61047a6004803603606081101561042457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e08565b60405180821515815260200191505060405180910390f35b61049a6111b0565b6040518082815260200191505060405180910390f35b6104b86111b6565b6040518082815260200191505060405180910390f35b6104d66111e4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61050a61120a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61053e611230565b6040518082815260200191505060405180910390f35b6105966004803603602081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611236565b6040518082815260200191505060405180910390f35b6105b461127f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61060c600480360360208110156105f657600080fd5b81019080803590602001909291905050506112a5565b6040518082815260200191505060405180910390f35b61062a6112ce565b60405180821515815260200191505060405180910390f35b61064a6112e1565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561068d578082015181840152602081019050610672565b505050509050019250505060405180910390f35b6106a96113b1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106e95780820151818401526020810190506106ce565b50505050905090810190601f1680156107165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107506004803603602081101561073a57600080fd5b81019080803590602001909291905050506115ab565b6040518082815260200191505060405180910390f35b61079c6004803603604081101561077c57600080fd5b8101908080359060200190929190803590602001909291905050506116d8565b6040518082815260200191505060405180910390f35b6107fe600480360360408110156107c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061180e565b60405180821515815260200191505060405180910390f35b61081e611aa6565b60405180821515815260200191505060405180910390f35b6108626004803603602081101561084c57600080fd5b8101908080359060200190929190505050611ab9565b6040518082815260200191505060405180910390f35b610880611ae2565b005b61088a611d6e565b6040518082815260200191505060405180910390f35b6108a8611d74565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610916600480360360208110156108ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d98565b005b610920611f30565b005b61094e6004803603602081101561093857600080fd5b8101908080359060200190929190505050612110565b005b6109b26004803603604081101561096657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124eb565b6040518082815260200191505060405180910390f35b6109d0612572565b005b6109fe600480360360208110156109e857600080fd5b810190808035906020019092919050505061296f565b005b610a08612d26565b6040518082815260200191505060405180910390f35b610a26612d2c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a5a612d52565b6040518082815260200191505060405180910390f35b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015610ada57600080fd5b505afa158015610aee573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610b1857600080fd5b8101908080516040519392919084640100000000821115610b3857600080fd5b83820191506020820185811115610b4e57600080fd5b8251866001820283011164010000000082111715610b6b57600080fd5b8083526020830192505050908051906020019080838360005b83811015610b9f578082015181840152602081019050610b84565b50505050905090810190601f168015610bcc5780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f620000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b60208310610c315780518252602082019150602081019050602083039250610c0e565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052905090565b600080600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480610cf65750600082145b610cff57600080fd5b81600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600560149054906101000a900460ff1681565b600a5481565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f74207472616e7366657220746f206f776e206163636f756e74000081525060200191505060405180910390fd5b610efe82600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fd082600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110a282600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8e90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060095414806111375750600954600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b61114057600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60095481565b6000807f9af4a8efdef7082fbe0a356fe9ce920abbe3461c19ff1888bb79ec1fbee0a5645490508091505090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112c76112bf83600154612d7790919063ffffffff16565b6001546116d8565b9050919050565b600d60019054906101000a900460ff1681565b606060007f9bb186d4e76241ac6fcfb26f9c0c67a7a4288892aa856bb2ef40fc277c0bbbe25490508067ffffffffffffffff8111801561132057600080fd5b5060405190808252806020026020018201604052801561134f5781602001602082028036833780820191505090505b50915060005b818110156113ac576000817f22e3a4713640ec908fad4277bc5c59c3802aee5469f8a18fa0b552bf09d2299b015490508084838151811061139257fe5b602002602001018181525050508080600101915050611355565b505090565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561141b57600080fd5b505afa15801561142f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561145957600080fd5b810190808051604051939291908464010000000082111561147957600080fd5b8382019150602082018581111561148f57600080fd5b82518660018202830111640100000000821117156114ac57600080fd5b8083526020830192505050908051906020019080838360005b838110156114e05780820151818401526020810190506114c5565b50505050905090810190601f16801561150d5780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f620000000000000000000000000000000000000000000000000000000000000081525060010182805190602001908083835b60208310611572578051825260208201915060208101905060208303925061154f565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052905090565b60008060603073ffffffffffffffffffffffffffffffffffffffff1663cadf338f60e01b8560405160200180837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106116485780518252602082019150602081019050602083039250611625565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146116a8576040519150601f19603f3d011682016040523d82523d6000602084013e6116ad565b606091505b5091509150816116bc57600080fd5b60208151146116ca57600080fd5b602081015192505050919050565b60008060603073ffffffffffffffffffffffffffffffffffffffff1663c3882fef60e01b868660405160200180847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040183815260200182815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831061177d578051825260208201915060208101905060208303925061175a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146117dd576040519150601f19603f3d011682016040523d82523d6000602084013e6117e2565b606091505b5091509150816117f157600080fd5b60208151146117ff57600080fd5b60208101519250505092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156118b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f74207472616e7366657220746f206f776e206163636f756e74000081525060200191505060405180910390fd5b61190482600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061199982600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8e90919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006009541480611a2e5750600954600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b611a3757600080fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600860009054906101000a900460ff1681565b6000611adb600154611ad684600154612d8e90919063ffffffff16565b6116d8565b9050919050565b6000600754421180611b105750600860009054906101000a900460ff168015611b0f5750600a5460015410155b5b905080611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f74686520746f6b656e2073616c6520686173206e6f7420656e6465640000000081525060200191505060405180910390fd5b6000611b9033611236565b9050611be481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d2257600080fd5b505af1158015611d36573d6000803e3d6000fd5b505050506040513d6020811015611d4c57600080fd5b8101908080519060200190929190505050905080611d6957600080fd5b505050565b60065481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a54600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e2457600080fd5b505afa158015611e38573d6000803e3d6000fd5b505050506040513d6020811015611e4e57600080fd5b810190808051906020019092919050505014611ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f746f6b656e20686173206e6f742072656365697665640000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560146101000a81548160ff02191690831515021790555050565b6000600754421180611f5e5750600860009054906101000a900460ff168015611f5d5750600a5460015410155b5b905080611fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f74686520746f6b656e2073616c6520686173206e6f7420656e6465640000000081525060200191505060405180910390fd5b600d60019054906101000a900460ff1615611fed57600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600a54036040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156120aa57600080fd5b505af11580156120be573d6000803e3d6000fd5b505050506040513d60208110156120d457600080fd5b81019080805190602001909291905050509050806120f157600080fd5b6001600d60016101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900460ff161561212a57600080fd5b6001600d60006101000a81548160ff021916908315150217905550600560149054906101000a900460ff166121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f74686520636f6e747261637420686173206e6f7420696e697469616c697a656481525060200191505060405180910390fd5b600654421161223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f74686520746f6b656e2073616c65206861736e2774207374617274656400000081525060200191505060405180910390fd5b60075442106122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b600a546001541061232e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b600061234582600154612d8e90919063ffffffff16565b9050600a5481111561236057600154600a54039150600a5490505b600061236e600154836116d8565b905061237a3384612daa565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561242d57600080fd5b505af1158015612441573d6000803e3d6000fd5b505050506040513d602081101561245757600080fd5b810190808051906020019092919050505090508061247457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed8584604051808381526020018281526020019250505060405180910390a25050506000600d60006101000a81548160ff02191690831515021790555050565b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006007544211806125a05750600860009054906101000a900460ff16801561259f5750600a5460015410155b5b905080612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f74686520746f6b656e2073616c6520686173206e6f7420656e6465640000000081525060200191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126a057600080fd5b505afa1580156126b4573d6000803e3d6000fd5b505050506040513d60208110156126ca57600080fd5b810190808051906020019092919050505090506000606482600302816126ec57fe5b0490506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561279557600080fd5b505afa1580156127a9573d6000803e3d6000fd5b505050506040513d60208110156127bf57600080fd5b8101908080519060200190929190505050846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561282457600080fd5b505af1158015612838573d6000803e3d6000fd5b505050506040513d602081101561284e57600080fd5b810190808051906020019092919050505090508061286b57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168486036040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050506040513d602081101561294c57600080fd5b810190808051906020019092919050505090508061296957600080fd5b50505050565b600d60009054906101000a900460ff161561298957600080fd5b6001600d60006101000a81548160ff021916908315150217905550600560149054906101000a900460ff16612a26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f74686520636f6e747261637420686173206e6f7420696e697469616c697a656481525060200191505060405180910390fd5b6006544211612a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f74686520746f6b656e2073616c65206861736e2774207374617274656400000081525060200191505060405180910390fd5b6007544210612b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b600a5460015410612b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f74686520746f6b656e2073616c652068617320656e646564000000000000000081525060200191505060405180910390fd5b6000612ba482600154612d7790919063ffffffff16565b90506000612bb4826001546116d8565b9050600060648260630281612bc557fe5b049050612bd23385612f59565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c6757600080fd5b505af1158015612c7b573d6000803e3d6000fd5b505050506040513d6020811015612c9157600080fd5b8101908080519060200190929190505050905080612cae57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a8684604051808381526020018281526020019250505060405180910390a2505050506000600d60006101000a81548160ff02191690831515021790555050565b60075481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612d5f6001546115ab565b905090565b600080823b905060008111915050919050565b600082821115612d8357fe5b818303905092915050565b600080828401905083811015612da057fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612de457600080fd5b612df981600154612d8e90919063ffffffff16565b600181905550612e5181600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d8e90919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006009541480612ee65750600954600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b612eef57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9357600080fd5b612fe581600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7790919063ffffffff16565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303d81600154612d7790919063ffffffff16565b600181905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505056fea26469706673582212200f27805b16e8e043a01a31ea9fea36fc6e9ee54025c400741b0cd7e186785cd464736f6c63430007040033466f756e64657227732061646472657373206d757374206e6f742062652061646472657373283029a2646970667358221220baeb6553cc89af4e138abebfeea2374ff1c8d4728a7caa3c1ee3bc69eea4b8ce64736f6c63430007040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007614ebee52f4733e0ed864429d41516af28560a6
-----Decoded View---------------
Arg [0] : _feeTo (address): 0x7614EBEe52f4733e0ED864429D41516Af28560A6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007614ebee52f4733e0ed864429d41516af28560a6
Deployed Bytecode Sourcemap
155:1689:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;188:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1250:592;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;212:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;521:99;;;:::i;:::-;;;;;;;;;;;;;;;;;;;188:20;;;;;;;;;;;;:::o;1250:592::-;1480:28;1528:12;1542:6;1550;1558:4;1564:13;1579:15;1596:4;1602:5;1609:6;1617:7;1511:114;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1480:145;;1631:12;1646;:25;;;1672:10;1692:15;1710:4;1646:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1631:84;;1729:7;1721:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1762:15;:26;;;1789:4;1762:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1800:15;1821;1800:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1250:592;;;;;;;;;;;;:::o;212:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;521:99::-;571:7;593:15;:22;;;;586:29;;521:99;:::o;-1:-1:-1:-;;;;;;;;:::o
Swarm Source
ipfs://baeb6553cc89af4e138abebfeea2374ff1c8d4728a7caa3c1ee3bc69eea4b8ce
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.