DEX.AG: Proxy Contract has migrated to a new address.
More Info
Private Name Tags
ContractCreator
Multi Chain
Multichain Addresses
2 addresses found via
Latest 25 from a total of 5,845 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Trade | 10881981 | 1107 days 16 hrs ago | IN | 0 ETH | 0.083418 | ||||
Trade | 9670230 | 1294 days 22 hrs ago | IN | 0 ETH | 0.00510204 | ||||
Trade | 9670150 | 1294 days 22 hrs ago | IN | 0 ETH | 0.00744505 | ||||
Trade | 9670117 | 1294 days 22 hrs ago | IN | 0 ETH | 0.00616988 | ||||
Trade | 9670085 | 1294 days 23 hrs ago | IN | 0 ETH | 0.0074449 | ||||
Trade | 9670066 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00733035 | ||||
Trade | 9670045 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00607411 | ||||
Trade | 9670033 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00745424 | ||||
Trade | 9670011 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00607411 | ||||
Trade | 9669976 | 1294 days 23 hrs ago | IN | 0 ETH | 0.0074449 | ||||
Trade | 9669957 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00733055 | ||||
Trade | 9669952 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00607398 | ||||
Trade | 9669949 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00607584 | ||||
Trade | 9669947 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00607569 | ||||
Trade | 9669942 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00701052 | ||||
Trade | 9669937 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00531486 | ||||
Trade | 9669902 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00531498 | ||||
Trade | 9669895 | 1294 days 23 hrs ago | IN | 0 ETH | 0.00607426 | ||||
Trade | 9669887 | 1294 days 23 hrs ago | IN | 0 ETH | 0.0058848 | ||||
Trade | 9669788 | 1295 days 7 mins ago | IN | 0 ETH | 0.00134234 | ||||
Trade | 9669764 | 1295 days 13 mins ago | IN | 0 ETH | 0.00545394 | ||||
Trade | 9669572 | 1295 days 53 mins ago | IN | 0 ETH | 0.00134234 | ||||
Trade | 9669235 | 1295 days 2 hrs ago | IN | 0 ETH | 0.00134234 | ||||
Trade | 9669046 | 1295 days 2 hrs ago | IN | 0 ETH | 0.00134272 | ||||
Trade | 9668632 | 1295 days 4 hrs ago | IN | 0 ETH | 0.00915371 |
Latest 25 internal transactions (View All)
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
9682972 | 1292 days 23 hrs ago | 2.41180114 ETH | ||||
9682972 | 1292 days 23 hrs ago | 2.41180114 ETH | ||||
9607824 | 1304 days 13 hrs ago | 0.00008954 ETH | ||||
9607824 | 1304 days 13 hrs ago | 0.00008954 ETH | ||||
9607824 | 1304 days 13 hrs ago | 0.00456881 ETH | ||||
9575096 | 1309 days 14 hrs ago | 1.63644721 ETH | ||||
9551648 | 1313 days 4 hrs ago | 0.0575 ETH | ||||
9551532 | 1313 days 5 hrs ago | 0.00777657 ETH | ||||
9528372 | 1316 days 18 hrs ago | 1.42074763 ETH | ||||
9528333 | 1316 days 18 hrs ago | 4.26128324 ETH | ||||
9515209 | 1318 days 19 hrs ago | 1.34678901 ETH | ||||
9495123 | 1321 days 21 hrs ago | 0.1 ETH | ||||
9495123 | 1321 days 21 hrs ago | 0.1 ETH | ||||
9488073 | 1322 days 23 hrs ago | 0.13412363 ETH | ||||
9482239 | 1323 days 20 hrs ago | 0.13644878 ETH | ||||
9482233 | 1323 days 20 hrs ago | 0.13639943 ETH | ||||
9482223 | 1323 days 21 hrs ago | 0.1361483 ETH | ||||
9482199 | 1323 days 21 hrs ago | 0.13761386 ETH | ||||
9482189 | 1323 days 21 hrs ago | 0.1374183 ETH | ||||
9482147 | 1323 days 21 hrs ago | 0.1382763 ETH | ||||
9482026 | 1323 days 21 hrs ago | 0.1380644 ETH | ||||
9471028 | 1325 days 14 hrs ago | 1.05379644 ETH | ||||
9471028 | 1325 days 14 hrs ago | 1.05379644 ETH | ||||
9470295 | 1325 days 17 hrs ago | 1.1 ETH | ||||
9406943 | 1335 days 10 hrs ago | 0.005236 ETH |
Loading...
Loading
Contract Name:
DexTrading
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-10-14 */ pragma solidity ^0.5.10; pragma experimental ABIEncoderV2; /** * @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. * * 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 { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @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(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _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 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); 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-solidity/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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); 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) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see `ERC20Detailed`. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an `Approval` event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // 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 != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } contract IWETH is IERC20 { function withdraw(uint256 amount) external; } contract ApprovalHandler is Ownable { using SafeERC20 for IERC20; function transferFrom(IERC20 erc, address sender, address receiver, uint256 numTokens) external onlyOwner { erc.safeTransferFrom(sender, receiver, numTokens); } } contract DexTrading is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; ApprovalHandler public approvalHandler; event Trade(address indexed from, address indexed to, uint256 toAmount, address indexed trader, address[] exchanges, uint256 tradeType); IWETH public WETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); constructor() public { approvalHandler = new ApprovalHandler(); } function trade( IERC20 from, IERC20 to, uint256 fromAmount, address[] memory exchanges, address[] memory approvals, bytes memory data, uint256[] memory offsets, uint256[] memory etherValues, uint256 limitAmount, uint256 tradeType ) public payable { require(exchanges.length > 0, 'No Exchanges'); // if from is an ERC20, pull tokens from msg.sender if (address(from) != 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { approvalHandler.transferFrom(from, msg.sender, address(this), fromAmount); } // execute trades on dexes executeTrades(from, exchanges, approvals, data, offsets, etherValues); // check how many tokens were received after trade execution uint256 tradeReturn = viewBalance(to, address(this)); require(tradeReturn >= limitAmount, 'Trade returned less than the minimum amount'); // return any unspent funds uint256 leftover = viewBalance(from, address(this)); if (leftover > 0) { sendFunds(from, msg.sender, leftover); } sendFunds(to, msg.sender, tradeReturn); emit Trade(address(from), address(to), tradeReturn, msg.sender, exchanges, tradeType); } function executeTrades( IERC20 from, address[] memory exchanges, address[] memory approvals, bytes memory data, uint256[] memory offsets, uint256[] memory etherValues) internal { for (uint i = 0; i < exchanges.length; i++) { // prevent calling the approvalHandler and check that exchange is a valid contract address require(exchanges[i] != address(approvalHandler) && isContract(exchanges[i]), 'Invalid Address'); if (approvals[i] != address(0)) { // handle approval if the aprovee is not the exchange address approve(from, approvals[i]); } else { // handle approval if the approvee is the exchange address approve(from, exchanges[i]); } // do trade require(external_call(exchanges[i], etherValues[i], offsets[i], offsets[i + 1] - offsets[i], data), 'External Call Failed'); } } // ERC20 Utility Functions function approve(IERC20 erc, address approvee) internal { if ( address(erc) != 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE && erc.allowance(address(this), approvee) == 0 ) { erc.safeApprove(approvee, uint256(-1)); } } function viewBalance(IERC20 erc, address owner) internal view returns(uint256) { if (address(erc) == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { return owner.balance; } else { return erc.balanceOf(owner); } } function sendFunds(IERC20 erc, address payable receiver, uint256 funds) internal { if (address(erc) == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { receiver.transfer(funds); } else { erc.safeTransfer(receiver, funds); } } // Source: https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol // call has been separated into its own function in order to take advantage // of the Solidity's code generator to produce a loop that copies tx.data into memory. function external_call(address destination, uint value, uint dataOffset, uint dataLength, bytes memory data) internal returns (bool) { bool result; assembly { let x := mload(0x40) // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention) let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that result := call( sub(gas, 34710), // 34710 is the value that solidity is currently emitting // It includes callGas (700) + callVeryLow (3, to pay for SUB) + callValueTransferGas (9000) + // callNewAccountGas (25000, in case the destination address does not exist and needs creating) destination, value, add(d, dataOffset), dataLength, // Size of the input (in bytes) - this is what fixes the padding problem x, 0 // Output is ignored, therefore the output size is zero ) } return result; } /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // 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 != 0x0 && codehash != accountHash); } function withdrawWeth() external { uint256 amount = WETH.balanceOf(address(this)); WETH.withdraw(amount); } function () external payable { require(msg.sender != tx.origin); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"toAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"address[]","name":"exchanges","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"tradeType","type":"uint256"}],"name":"Trade","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"approvalHandler","outputs":[{"internalType":"contract ApprovalHandler","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"address[]","name":"exchanges","type":"address[]"},{"internalType":"address[]","name":"approvals","type":"address[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256[]","name":"offsets","type":"uint256[]"},{"internalType":"uint256[]","name":"etherValues","type":"uint256[]"},{"internalType":"uint256","name":"limitAmount","type":"uint256"},{"internalType":"uint256","name":"tradeType","type":"uint256"}],"name":"trade","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawWeth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600280546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905534801561003657600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360405161008c906100ce565b604051809103906000f0801580156100a8573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100db565b610a0480611a1383390190565b611929806100ea6000396000f3fe60806040526004361061007b5760003560e01c80638da5cb5b1161004e5780638da5cb5b146100f25780638f32d59b14610114578063ad5c464814610136578063f2fde38b1461014b5761007b565b80632922a7511461008a5780635a862dcc146100b55780635d46ec34146100ca578063715018a6146100dd575b3332141561008857600080fd5b005b34801561009657600080fd5b5061009f61016b565b6040516100ac9190611677565b60405180910390f35b3480156100c157600080fd5b50610088610187565b6100886100d83660046110e6565b6102ba565b3480156100e957600080fd5b506100886104cc565b3480156100fe57600080fd5b50610107610579565b6040516100ac9190611609565b34801561012057600080fd5b50610129610595565b6040516100ac9190611669565b34801561014257600080fd5b5061009f6105b3565b34801561015757600080fd5b506100886101663660046110aa565b6105cf565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a08231906101de903090600401611617565b60206040518083038186803b1580156101f657600080fd5b505afa15801561020a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061022e9190810190611237565b6002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d9061028590849060040161175a565b600060405180830381600087803b15801561029f57600080fd5b505af11580156102b3573d6000803e3d6000fd5b5050505050565b60008751116102fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116fa565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b16146103be576001546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906315dacbea9061038b908d90339030908e90600401611685565b600060405180830381600087803b1580156103a557600080fd5b505af11580156103b9573d6000803e3d6000fd5b505050505b6103cc8a8888888888610619565b60006103d88a306107f9565b905082811015610414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116ca565b60006104208c306107f9565b90508015610433576104338c33836108f6565b61043e8b33846108f6565b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f7d76860f120f877ecdc289aa48a7ccc6d0782d9fc59f154c29bc262b7f8308cc858d886040516104b693929190611768565b60405180910390a4505050505050505050505050565b6104d4610595565b61050a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061170a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6105d7610595565b61060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061170a565b6106168161099d565b50565b60005b85518110156107f057600154865173ffffffffffffffffffffffffffffffffffffffff9091169087908390811061064f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610692575061069286828151811061068557fe5b6020026020010151610a77565b6106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061171a565b600073ffffffffffffffffffffffffffffffffffffffff168582815181106106ec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16146107315761072c8786838151811061071f57fe5b6020026020010151610ab3565b610741565b6107418787838151811061071f57fe5b6107b286828151811061075057fe5b602002602001015183838151811061076457fe5b602002602001015185848151811061077857fe5b602002602001015186858151811061078c57fe5b60200260200101518786600101815181106107a357fe5b60200260200101510388610bde565b6107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116da565b60010161061c565b50505050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8416141561084b575073ffffffffffffffffffffffffffffffffffffffff8116316108f0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a082319061089d908590600401611609565b60206040518083038186803b1580156108b557600080fd5b505afa1580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108ed9190810190611237565b90505b92915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff841614156109715760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f1935050505015801561096b573d6000803e3d6000fd5b50610998565b61099873ffffffffffffffffffffffffffffffffffffffff8416838363ffffffff610c0616565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116ba565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610aab5750808214155b949350505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831614801590610b8e57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90610b3c9030908590600401611625565b60206040518083038186803b158015610b5457600080fd5b505afa158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b8c9190810190611237565b155b15610bda57610bda73ffffffffffffffffffffffffffffffffffffffff8316827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff610cc316565b5050565b60008060405160208401600082878984018b8d6187965a03f193505050505b95945050505050565b6040516109989084907fa9059cbb0000000000000000000000000000000000000000000000000000000090610c41908690869060240161164e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610de2565b801580610d7157506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063dd62ed3e90610d1f9030908690600401611640565b60206040518083038186803b158015610d3757600080fd5b505afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d6f9190810190611237565b155b610da7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061173a565b6040516109989084907f095ea7b30000000000000000000000000000000000000000000000000000000090610c41908690869060240161164e565b610e018273ffffffffffffffffffffffffffffffffffffffff16610a77565b610e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061174a565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610e6091906115f6565b6000604051808303816000865af19150503d8060008114610e9d576040519150601f19603f3d011682016040523d82523d6000602084013e610ea2565b606091505b509150915081610ede576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116ea565b805115610f2f5780806020019051610ef991908101906110c8565b610f2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061172a565b50505050565b80356108f0816118b7565b600082601f830112610f5157600080fd5b8135610f64610f5f826117be565b611797565b91508181835260208401935060208101905083856020840282011115610f8957600080fd5b60005b83811015610fb55781610f9f8882610f35565b8452506020928301929190910190600101610f8c565b5050505092915050565b600082601f830112610fd057600080fd5b8135610fde610f5f826117be565b9150818183526020840193506020810190508385602084028201111561100357600080fd5b60005b83811015610fb557816110198882611094565b8452506020928301929190910190600101611006565b80516108f0816118cb565b600082601f83011261104b57600080fd5b8135611059610f5f826117df565b9150808252602083016020830185838301111561107557600080fd5b61108083828461187f565b50505092915050565b80356108f0816118d4565b80356108f0816118dd565b80516108f0816118dd565b6000602082840312156110bc57600080fd5b6000610aab8484610f35565b6000602082840312156110da57600080fd5b6000610aab848461102f565b6000806000806000806000806000806101408b8d03121561110657600080fd5b60006111128d8d611089565b9a505060206111238d828e01611089565b99505060406111348d828e01611094565b98505060608b013567ffffffffffffffff81111561115157600080fd5b61115d8d828e01610f40565b97505060808b013567ffffffffffffffff81111561117a57600080fd5b6111868d828e01610f40565b96505060a08b013567ffffffffffffffff8111156111a357600080fd5b6111af8d828e0161103a565b95505060c08b013567ffffffffffffffff8111156111cc57600080fd5b6111d88d828e01610fbf565b94505060e08b013567ffffffffffffffff8111156111f557600080fd5b6112018d828e01610fbf565b9350506101006112138d828e01611094565b9250506101206112258d828e01611094565b9150509295989b9194979a5092959850565b60006020828403121561124957600080fd5b6000610aab848461109f565b60006112618383611278565b505060200190565b61127281611874565b82525050565b6112728161183d565b600061128c8261182b565b611296818561182f565b93506112a183611825565b8060005b838110156112cf5781516112b98882611255565b97506112c483611825565b9250506001016112a5565b509495945050505050565b61127281611848565b60006112ee8261182b565b6112f88185611838565b935061130881856020860161188b565b9290920192915050565b6112728161184d565b600061132860268361182f565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611387602b8361182f565b7f54726164652072657475726e6564206c657373207468616e20746865206d696e81527f696d756d20616d6f756e74000000000000000000000000000000000000000000602082015260400192915050565b60006113e660148361182f565b7f45787465726e616c2043616c6c204661696c6564000000000000000000000000815260200192915050565b600061141f60208361182f565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000611458600c8361182f565b7f4e6f2045786368616e6765730000000000000000000000000000000000000000815260200192915050565b600061149160208361182f565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006114ca600f8361182f565b7f496e76616c696420416464726573730000000000000000000000000000000000815260200192915050565b6000611503602a8361182f565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b600061156260368361182f565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015260400192915050565b60006115c1601f8361182f565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b61127281611871565b600061160282846112e3565b9392505050565b602081016108f08284611278565b602081016108f08284611269565b604081016116338285611269565b6116026020830184611278565b604081016116338285611278565b6040810161165c8285611278565b61160260208301846115ed565b602081016108f082846112da565b602081016108f08284611312565b608081016116938287611312565b6116a06020830186611269565b6116ad6040830185611269565b610bfd60608301846115ed565b602080825281016108f08161131b565b602080825281016108f08161137a565b602080825281016108f0816113d9565b602080825281016108f081611412565b602080825281016108f08161144b565b602080825281016108f081611484565b602080825281016108f0816114bd565b602080825281016108f0816114f6565b602080825281016108f081611555565b602080825281016108f0816115b4565b602081016108f082846115ed565b6060810161177682866115ed565b81810360208301526117888185611281565b9050610aab60408301846115ed565b60405181810167ffffffffffffffff811182821017156117b657600080fd5b604052919050565b600067ffffffffffffffff8211156117d557600080fd5b5060209081020190565b600067ffffffffffffffff8211156117f657600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b90815260200190565b919050565b60006108f082611858565b151590565b60006108f08261183d565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60006108f08261184d565b82818337506000910152565b60005b838110156118a657818101518382015260200161188e565b83811115610f2f5750506000910152565b6118c08161183d565b811461061657600080fd5b6118c081611848565b6118c08161184d565b6118c08161187156fea365627a7a7231582042dea314061f8c9ae8170fcb091591d7983f37bc500ad049b784540277a0d5bc6c6578706572696d656e74616cf564736f6c634300050c004060806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36109ad806100576000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b146100895780638f32d59b146100a7578063f2fde38b146100bc57610067565b806315dacbea1461006c578063715018a614610081575b600080fd5b61007f61007a366004610605565b6100cf565b005b61007f610144565b6100916101f1565b60405161009e9190610832565b60405180910390f35b6100af61020d565b60405161009e9190610868565b61007f6100ca3660046105c9565b61022b565b6100d761020d565b610116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610896565b60405180910390fd5b61013e73ffffffffffffffffffffffffffffffffffffffff851684848463ffffffff61027516565b50505050565b61014c61020d565b610182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610896565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b61023361020d565b610269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610896565b61027281610334565b50565b60405161013e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906102b290879087908790602401610840565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261040e565b73ffffffffffffffffffffffffffffffffffffffff8116610381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610876565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61042d8273ffffffffffffffffffffffffffffffffffffffff1661055b565b610463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d906108b6565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161048c919061081f565b6000604051808303816000865af19150503d80600081146104c9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ce565b606091505b50915091508161050a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d90610886565b80511561013e578080602001905161052591908101906105e7565b61013e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010d906108a6565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061058f5750808214155b949350505050565b80356105a28161093b565b92915050565b80516105a28161094f565b80356105a281610958565b80356105a281610961565b6000602082840312156105db57600080fd5b600061058f8484610597565b6000602082840312156105f957600080fd5b600061058f84846105a8565b6000806000806080858703121561061b57600080fd5b600061062787876105b3565b945050602061063887828801610597565b935050604061064987828801610597565b925050606061065a878288016105be565b91505092959194509250565b61066f816108d8565b82525050565b61066f816108e3565b6000610689826108c6565b61069381856108ca565b93506106a381856020860161090f565b9290920192915050565b60006106ba6026836108cf565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006107196020836108cf565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b60006107526020836108cf565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061078b602a836108cf565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b60006107ea601f836108cf565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b61066f8161090c565b600061082b828461067e565b9392505050565b602081016105a28284610666565b6060810161084e8286610666565b61085b6020830185610666565b61058f6040830184610816565b602081016105a28284610675565b602080825281016105a2816106ad565b602080825281016105a28161070c565b602080825281016105a281610745565b602080825281016105a28161077e565b602080825281016105a2816107dd565b5190565b919050565b90815260200190565b60006105a2826108f3565b151590565b60006105a2826108d8565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60005b8381101561092a578181015183820152602001610912565b8381111561013e5750506000910152565b610944816108d8565b811461027257600080fd5b610944816108e3565b610944816108e8565b6109448161090c56fea365627a7a723158208ef5be6c82d975b29649a42109a391022250684b3409e5487b143086b9fa32ed6c6578706572696d656e74616cf564736f6c634300050c0040
Deployed Bytecode
0x60806040526004361061007b5760003560e01c80638da5cb5b1161004e5780638da5cb5b146100f25780638f32d59b14610114578063ad5c464814610136578063f2fde38b1461014b5761007b565b80632922a7511461008a5780635a862dcc146100b55780635d46ec34146100ca578063715018a6146100dd575b3332141561008857600080fd5b005b34801561009657600080fd5b5061009f61016b565b6040516100ac9190611677565b60405180910390f35b3480156100c157600080fd5b50610088610187565b6100886100d83660046110e6565b6102ba565b3480156100e957600080fd5b506100886104cc565b3480156100fe57600080fd5b50610107610579565b6040516100ac9190611609565b34801561012057600080fd5b50610129610595565b6040516100ac9190611669565b34801561014257600080fd5b5061009f6105b3565b34801561015757600080fd5b506100886101663660046110aa565b6105cf565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6002546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a08231906101de903090600401611617565b60206040518083038186803b1580156101f657600080fd5b505afa15801561020a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061022e9190810190611237565b6002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d9061028590849060040161175a565b600060405180830381600087803b15801561029f57600080fd5b505af11580156102b3573d6000803e3d6000fd5b5050505050565b60008751116102fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116fa565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b16146103be576001546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906315dacbea9061038b908d90339030908e90600401611685565b600060405180830381600087803b1580156103a557600080fd5b505af11580156103b9573d6000803e3d6000fd5b505050505b6103cc8a8888888888610619565b60006103d88a306107f9565b905082811015610414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116ca565b60006104208c306107f9565b90508015610433576104338c33836108f6565b61043e8b33846108f6565b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f7d76860f120f877ecdc289aa48a7ccc6d0782d9fc59f154c29bc262b7f8308cc858d886040516104b693929190611768565b60405180910390a4505050505050505050505050565b6104d4610595565b61050a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061170a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331490565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6105d7610595565b61060d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061170a565b6106168161099d565b50565b60005b85518110156107f057600154865173ffffffffffffffffffffffffffffffffffffffff9091169087908390811061064f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610692575061069286828151811061068557fe5b6020026020010151610a77565b6106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061171a565b600073ffffffffffffffffffffffffffffffffffffffff168582815181106106ec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16146107315761072c8786838151811061071f57fe5b6020026020010151610ab3565b610741565b6107418787838151811061071f57fe5b6107b286828151811061075057fe5b602002602001015183838151811061076457fe5b602002602001015185848151811061077857fe5b602002602001015186858151811061078c57fe5b60200260200101518786600101815181106107a357fe5b60200260200101510388610bde565b6107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116da565b60010161061c565b50505050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8416141561084b575073ffffffffffffffffffffffffffffffffffffffff8116316108f0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a082319061089d908590600401611609565b60206040518083038186803b1580156108b557600080fd5b505afa1580156108c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108ed9190810190611237565b90505b92915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff841614156109715760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f1935050505015801561096b573d6000803e3d6000fd5b50610998565b61099873ffffffffffffffffffffffffffffffffffffffff8416838363ffffffff610c0616565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116ba565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610aab5750808214155b949350505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831614801590610b8e57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90610b3c9030908590600401611625565b60206040518083038186803b158015610b5457600080fd5b505afa158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b8c9190810190611237565b155b15610bda57610bda73ffffffffffffffffffffffffffffffffffffffff8316827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff610cc316565b5050565b60008060405160208401600082878984018b8d6187965a03f193505050505b95945050505050565b6040516109989084907fa9059cbb0000000000000000000000000000000000000000000000000000000090610c41908690869060240161164e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610de2565b801580610d7157506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063dd62ed3e90610d1f9030908690600401611640565b60206040518083038186803b158015610d3757600080fd5b505afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d6f9190810190611237565b155b610da7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061173a565b6040516109989084907f095ea7b30000000000000000000000000000000000000000000000000000000090610c41908690869060240161164e565b610e018273ffffffffffffffffffffffffffffffffffffffff16610a77565b610e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061174a565b600060608373ffffffffffffffffffffffffffffffffffffffff1683604051610e6091906115f6565b6000604051808303816000865af19150503d8060008114610e9d576040519150601f19603f3d011682016040523d82523d6000602084013e610ea2565b606091505b509150915081610ede576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f5906116ea565b805115610f2f5780806020019051610ef991908101906110c8565b610f2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f59061172a565b50505050565b80356108f0816118b7565b600082601f830112610f5157600080fd5b8135610f64610f5f826117be565b611797565b91508181835260208401935060208101905083856020840282011115610f8957600080fd5b60005b83811015610fb55781610f9f8882610f35565b8452506020928301929190910190600101610f8c565b5050505092915050565b600082601f830112610fd057600080fd5b8135610fde610f5f826117be565b9150818183526020840193506020810190508385602084028201111561100357600080fd5b60005b83811015610fb557816110198882611094565b8452506020928301929190910190600101611006565b80516108f0816118cb565b600082601f83011261104b57600080fd5b8135611059610f5f826117df565b9150808252602083016020830185838301111561107557600080fd5b61108083828461187f565b50505092915050565b80356108f0816118d4565b80356108f0816118dd565b80516108f0816118dd565b6000602082840312156110bc57600080fd5b6000610aab8484610f35565b6000602082840312156110da57600080fd5b6000610aab848461102f565b6000806000806000806000806000806101408b8d03121561110657600080fd5b60006111128d8d611089565b9a505060206111238d828e01611089565b99505060406111348d828e01611094565b98505060608b013567ffffffffffffffff81111561115157600080fd5b61115d8d828e01610f40565b97505060808b013567ffffffffffffffff81111561117a57600080fd5b6111868d828e01610f40565b96505060a08b013567ffffffffffffffff8111156111a357600080fd5b6111af8d828e0161103a565b95505060c08b013567ffffffffffffffff8111156111cc57600080fd5b6111d88d828e01610fbf565b94505060e08b013567ffffffffffffffff8111156111f557600080fd5b6112018d828e01610fbf565b9350506101006112138d828e01611094565b9250506101206112258d828e01611094565b9150509295989b9194979a5092959850565b60006020828403121561124957600080fd5b6000610aab848461109f565b60006112618383611278565b505060200190565b61127281611874565b82525050565b6112728161183d565b600061128c8261182b565b611296818561182f565b93506112a183611825565b8060005b838110156112cf5781516112b98882611255565b97506112c483611825565b9250506001016112a5565b509495945050505050565b61127281611848565b60006112ee8261182b565b6112f88185611838565b935061130881856020860161188b565b9290920192915050565b6112728161184d565b600061132860268361182f565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611387602b8361182f565b7f54726164652072657475726e6564206c657373207468616e20746865206d696e81527f696d756d20616d6f756e74000000000000000000000000000000000000000000602082015260400192915050565b60006113e660148361182f565b7f45787465726e616c2043616c6c204661696c6564000000000000000000000000815260200192915050565b600061141f60208361182f565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000611458600c8361182f565b7f4e6f2045786368616e6765730000000000000000000000000000000000000000815260200192915050565b600061149160208361182f565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006114ca600f8361182f565b7f496e76616c696420416464726573730000000000000000000000000000000000815260200192915050565b6000611503602a8361182f565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f74207375636365656400000000000000000000000000000000000000000000602082015260400192915050565b600061156260368361182f565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015260400192915050565b60006115c1601f8361182f565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b61127281611871565b600061160282846112e3565b9392505050565b602081016108f08284611278565b602081016108f08284611269565b604081016116338285611269565b6116026020830184611278565b604081016116338285611278565b6040810161165c8285611278565b61160260208301846115ed565b602081016108f082846112da565b602081016108f08284611312565b608081016116938287611312565b6116a06020830186611269565b6116ad6040830185611269565b610bfd60608301846115ed565b602080825281016108f08161131b565b602080825281016108f08161137a565b602080825281016108f0816113d9565b602080825281016108f081611412565b602080825281016108f08161144b565b602080825281016108f081611484565b602080825281016108f0816114bd565b602080825281016108f0816114f6565b602080825281016108f081611555565b602080825281016108f0816115b4565b602081016108f082846115ed565b6060810161177682866115ed565b81810360208301526117888185611281565b9050610aab60408301846115ed565b60405181810167ffffffffffffffff811182821017156117b657600080fd5b604052919050565b600067ffffffffffffffff8211156117d557600080fd5b5060209081020190565b600067ffffffffffffffff8211156117f657600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b5190565b90815260200190565b919050565b60006108f082611858565b151590565b60006108f08261183d565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b60006108f08261184d565b82818337506000910152565b60005b838110156118a657818101518382015260200161188e565b83811115610f2f5750506000910152565b6118c08161183d565b811461061657600080fd5b6118c081611848565b6118c08161184d565b6118c08161187156fea365627a7a7231582042dea314061f8c9ae8170fcb091591d7983f37bc500ad049b784540277a0d5bc6c6578706572696d656e74616cf564736f6c634300050c0040
Deployed Bytecode Sourcemap
14521:6697:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21183:10;21197:9;21183:23;;21175:32;;;;;;14521:6697;14627:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14627:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;20997:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20997:130:0;;;:::i;14983:1332::-;;;;;;;;;:::i;1693:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1693:140:0;;;:::i;882:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;882:79:0;;;:::i;:::-;;;;;;;;1248:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1248:92:0;;;:::i;:::-;;;;;;;;14818:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14818:69:0;;;:::i;1988:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1988:109:0;;;;;;;;:::i;14627:38::-;;;;;;:::o;20997:130::-;21058:4;;:29;;;;;21041:14;;21058:4;;;:14;;:29;;21081:4;;21058:29;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21058:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21058:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21058:29:0;;;;;;;;;21098:4;;:21;;;;;21041:46;;-1:-1:-1;21098:4:0;;;:13;;:21;;21041:46;;21098:21;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21098:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21098:21:0;;;;20997:130;:::o;14983:1332::-;15363:1;15344:9;:16;:20;15336:45;;;;;;;;;;;;;;;;;;;;;;15476:42;15459:59;;;;15455:165;;15535:15;;:73;;;;;:15;;;;;:28;;:73;;15564:4;;15570:10;;15590:4;;15597:10;;15535:73;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15535:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15535:73:0;;;;15455:165;15668:69;15682:4;15688:9;15699;15710:4;15716:7;15725:11;15668:13;:69::i;:::-;15820:19;15842:30;15854:2;15866:4;15842:11;:30::i;:::-;15820:52;;15906:11;15891;:26;;15883:82;;;;;;;;;;;;;;16015:16;16034:32;16046:4;16060;16034:11;:32::i;:::-;16015:51;-1:-1:-1;16081:12:0;;16077:82;;16110:37;16120:4;16126:10;16138:8;16110:9;:37::i;:::-;16171:38;16181:2;16185:10;16197:11;16171:9;:38::i;:::-;16274:10;16227:80;;16256:2;16227:80;;16241:4;16227:80;;;16261:11;16286:9;16297;16227:80;;;;;;;;;;;;;;;;;14983:1332;;;;;;;;;;;;:::o;1693:140::-;1094:9;:7;:9::i;:::-;1086:54;;;;;;;;;;;;;;1792:1;1776:6;;1755:40;;;1776:6;;;;1755:40;;1792:1;;1755:40;1823:1;1806:19;;;;;;1693:140::o;882:79::-;920:7;947:6;;;882:79;:::o;1248:92::-;1288:4;1326:6;;;1312:10;:20;;1248:92::o;14818:69::-;;;;;;:::o;1988:109::-;1094:9;:7;:9::i;:::-;1086:54;;;;;;;;;;;;;;2061:28;2080:8;2061:18;:28::i;:::-;1988:109;:::o;16323:1070::-;16574:6;16569:813;16590:9;:16;16586:1;:20;16569:813;;;16772:15;;16748:12;;16772:15;;;;;16748:9;;16758:1;;16748:12;;;;;;;;;;;;:40;;;;:68;;;;;16792:24;16803:9;16813:1;16803:12;;;;;;;;;;;;;;16792:10;:24::i;:::-;16740:96;;;;;;;;;;;;;;16883:1;16859:26;;:9;16869:1;16859:12;;;;;;;;;;;;;;:26;;;16855:341;;16993:27;17001:4;17007:9;17017:1;17007:12;;;;;;;;;;;;;;16993:7;:27::i;:::-;16855:341;;;17149:27;17157:4;17163:9;17173:1;17163:12;;;;;;;17149:27;17251:90;17265:9;17275:1;17265:12;;;;;;;;;;;;;;17279:11;17291:1;17279:14;;;;;;;;;;;;;;17295:7;17303:1;17295:10;;;;;;;;;;;;;;17324:7;17332:1;17324:10;;;;;;;;;;;;;;17307:7;17315:1;17319;17315:5;17307:14;;;;;;;;;;;;;;:27;17336:4;17251:13;:90::i;:::-;17243:123;;;;;;;;;;;;;;16608:3;;16569:813;;;;16323:1070;;;;;;:::o;17730:268::-;17800:7;17840:42;17824:58;;;;17820:171;;;-1:-1:-1;17906:13:0;;;;17899:20;;17820:171;17959:20;;;;;:13;;;;;;:20;;17973:5;;17959:20;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17959:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17959:20:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17959:20:0;;;;;;;;;17952:27;;17820:171;17730:268;;;;:::o;18006:280::-;18118:42;18102:58;;;;18098:181;;;18177:24;;:17;;;;:24;;;;;18195:5;;18177:24;;;;18195:5;18177:17;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18177:24:0;18098:181;;;18234:33;:16;;;18251:8;18261:5;18234:33;:16;:33;:::i;:::-;18006:280;;;:::o;2203:229::-;2277:22;;;2269:73;;;;;;;;;;;;;;2379:6;;;2358:38;;;;;;;2379:6;;;2358:38;;;2407:6;:17;;;;;;;;;;;;;;;2203:229::o;20171:818::-;20231:4;20898:20;;20741:66;20938:15;;;;;:42;;;20969:11;20957:8;:23;;20938:42;20930:51;20171:818;-1:-1:-1;;;;20171:818:0:o;17435:287::-;17536:42;17520:58;;;;;;;:118;;-1:-1:-1;17595:38:0;;;;;:13;;;;;;:38;;17617:4;;17624:8;;17595:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17595:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17595:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17595:38:0;;;;;;;;;:43;17520:118;17502:213;;;17665:38;:15;;;17681:8;17699:2;17665:38;:15;:38;:::i;:::-;17435:287;;:::o;18565:1162::-;18692:4;18709:11;18770:4;18764:11;18904:2;18898:4;18894:13;19596:1;19576;19467:10;19437;19434:1;19430:18;19406:5;19376:11;19028:5;19023:3;19019:15;18996:689;18986:699;-1:-1:-1;;;;18565:1162:0;;;;;;;;:::o;11063:176::-;11172:58;;11146:85;;11165:5;;11195:23;;11172:58;;11220:2;;11224:5;;11172:58;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;11172:58:0;;;49:4:-1;25:18;;61:17;;11172:58:0;182:15:-1;11172:58:0;;;;179:29:-1;;;;160:49;;;11146:18:0;:85::i;11459:621::-;11829:10;;;11828:62;;-1:-1:-1;11845:39:0;;;;;:15;;;;;;:39;;11869:4;;11876:7;;11845:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11845:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11845:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11845:39:0;;;;;;;;;:44;11828:62;11820:152;;;;;;;;;;;;;;12009:62;;11983:89;;12002:5;;12032:22;;12009:62;;12056:7;;12065:5;;12009:62;;;;13057:1114;13661:27;13669:5;13661:25;;;:27::i;:::-;13653:71;;;;;;;;;;;;;;13798:12;13812:23;13847:5;13839:19;;13859:4;13839:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13797:67:0;;;;13883:7;13875:52;;;;;;;;;;;;;;13944:17;;:21;13940:224;;14086:10;14075:30;;;;;;;;;;;;;;14067:85;;;;;;;;;;;;;;13057:1114;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;;;354:80;;;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;;;748:50;;-1:-1;821:4;812:14;;;;840;;;;;702:1;695:9;655:206;;;659:14;237:630;;;;;;;;893:707;;1010:3;1003:4;995:6;991:17;987:27;977:2;;1028:1;1025;1018:12;977:2;1065:6;1052:20;1087:80;1102:64;1159:6;1102:64;;1087:80;1078:89;;1184:5;1209:6;1202:5;1195:21;1239:4;1231:6;1227:17;1217:27;;1261:4;1256:3;1252:14;1245:21;;1314:6;1361:3;1353:4;1345:6;1341:17;1336:3;1332:27;1329:36;1326:2;;;1378:1;1375;1368:12;1326:2;1403:1;1388:206;1413:6;1410:1;1407:13;1388:206;;;1471:3;1493:37;1526:3;1514:10;1493:37;;;1481:50;;-1:-1;1554:4;1545:14;;;;1573;;;;;1435:1;1428:9;1388:206;;1608:128;1683:13;;1701:30;1683:13;1701:30;;1744:440;;1845:3;1838:4;1830:6;1826:17;1822:27;1812:2;;1863:1;1860;1853:12;1812:2;1900:6;1887:20;1922:64;1937:48;1978:6;1937:48;;1922:64;1913:73;;2006:6;1999:5;1992:21;2042:4;2034:6;2030:17;2075:4;2068:5;2064:16;2110:3;2101:6;2096:3;2092:16;2089:25;2086:2;;;2127:1;2124;2117:12;2086:2;2137:41;2171:6;2166:3;2161;2137:41;;;1805:379;;;;;;;;2192:158;2273:20;;2298:47;2273:20;2298:47;;2357:130;2424:20;;2449:33;2424:20;2449:33;;2494:134;2572:13;;2590:33;2572:13;2590:33;;2635:241;;2739:2;2727:9;2718:7;2714:23;2710:32;2707:2;;;2755:1;2752;2745:12;2707:2;2790:1;2807:53;2852:7;2832:9;2807:53;;2883:257;;2995:2;2983:9;2974:7;2970:23;2966:32;2963:2;;;3011:1;3008;3001:12;2963:2;3046:1;3063:61;3116:7;3096:9;3063:61;;3147:2077;;;;;;;;;;;3541:3;3529:9;3520:7;3516:23;3512:33;3509:2;;;3558:1;3555;3548:12;3509:2;3593:1;3610:67;3669:7;3649:9;3610:67;;;3600:77;;3572:111;3714:2;3732:67;3791:7;3782:6;3771:9;3767:22;3732:67;;;3722:77;;3693:112;3836:2;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;;;3844:63;;3815:98;3972:2;3961:9;3957:18;3944:32;3996:18;3988:6;3985:30;3982:2;;;4028:1;4025;4018:12;3982:2;4048:78;4118:7;4109:6;4098:9;4094:22;4048:78;;;4038:88;;3923:209;4191:3;4180:9;4176:19;4163:33;4216:18;4208:6;4205:30;4202:2;;;4248:1;4245;4238:12;4202:2;4268:78;4338:7;4329:6;4318:9;4314:22;4268:78;;;4258:88;;4142:210;4411:3;4400:9;4396:19;4383:33;4436:18;4428:6;4425:30;4422:2;;;4468:1;4465;4458:12;4422:2;4488:62;4542:7;4533:6;4522:9;4518:22;4488:62;;;4478:72;;4362:194;4615:3;4604:9;4600:19;4587:33;4640:18;4632:6;4629:30;4626:2;;;4672:1;4669;4662:12;4626:2;4692:78;4762:7;4753:6;4742:9;4738:22;4692:78;;;4682:88;;4566:210;4835:3;4824:9;4820:19;4807:33;4860:18;4852:6;4849:30;4846:2;;;4892:1;4889;4882:12;4846:2;4912:78;4982:7;4973:6;4962:9;4958:22;4912:78;;;4902:88;;4786:210;5027:3;5046:53;5091:7;5082:6;5071:9;5067:22;5046:53;;;5036:63;;5006:99;5136:3;5155:53;5200:7;5191:6;5180:9;5176:22;5155:53;;;5145:63;;5115:99;3503:1721;;;;;;;;;;;;;;5231:263;;5346:2;5334:9;5325:7;5321:23;5317:32;5314:2;;;5362:1;5359;5352:12;5314:2;5397:1;5414:64;5470:7;5450:9;5414:64;;5502:173;;5589:46;5631:3;5623:6;5589:46;;;-1:-1;;5664:4;5655:14;;5582:93;5683:142;5774:45;5813:5;5774:45;;;5769:3;5762:58;5756:69;;;5832:103;5905:24;5923:5;5905:24;;6093:690;;6238:54;6286:5;6238:54;;;6305:86;6384:6;6379:3;6305:86;;;6298:93;;6412:56;6462:5;6412:56;;;6488:7;6516:1;6501:260;6526:6;6523:1;6520:13;6501:260;;;6593:6;6587:13;6614:63;6673:3;6658:13;6614:63;;;6607:70;;6694:60;6747:6;6694:60;;;6684:70;-1:-1;;6548:1;6541:9;6501:260;;;-1:-1;6774:3;;6217:566;-1:-1;;;;;6217:566;6791:104;6868:21;6883:5;6868:21;;6902:356;;7030:38;7062:5;7030:38;;;7080:88;7161:6;7156:3;7080:88;;;7073:95;;7173:52;7218:6;7213:3;7206:4;7199:5;7195:16;7173:52;;;7237:16;;;;;7010:248;-1:-1;;7010:248;7265:172;7371:60;7425:5;7371:60;;7765:465;;7925:67;7989:2;7984:3;7925:67;;;8025:66;8005:87;;8126:66;8121:2;8112:12;;8105:88;8221:2;8212:12;;7911:319;-1:-1;;7911:319;8239:465;;8399:67;8463:2;8458:3;8399:67;;;8499:66;8479:87;;8600:66;8595:2;8586:12;;8579:88;8695:2;8686:12;;8385:319;-1:-1;;8385:319;8713:364;;8873:67;8937:2;8932:3;8873:67;;;8973:66;8953:87;;9068:2;9059:12;;8859:218;-1:-1;;8859:218;9086:364;;9246:67;9310:2;9305:3;9246:67;;;9346:66;9326:87;;9441:2;9432:12;;9232:218;-1:-1;;9232:218;9459:364;;9619:67;9683:2;9678:3;9619:67;;;9719:66;9699:87;;9814:2;9805:12;;9605:218;-1:-1;;9605:218;9832:364;;9992:67;10056:2;10051:3;9992:67;;;10092:66;10072:87;;10187:2;10178:12;;9978:218;-1:-1;;9978:218;10205:364;;10365:67;10429:2;10424:3;10365:67;;;10465:66;10445:87;;10560:2;10551:12;;10351:218;-1:-1;;10351:218;10578:465;;10738:67;10802:2;10797:3;10738:67;;;10838:66;10818:87;;10939:66;10934:2;10925:12;;10918:88;11034:2;11025:12;;10724:319;-1:-1;;10724:319;11052:465;;11212:67;11276:2;11271:3;11212:67;;;11312:66;11292:87;;11413:66;11408:2;11399:12;;11392:88;11508:2;11499:12;;11198:319;-1:-1;;11198:319;11526:364;;11686:67;11750:2;11745:3;11686:67;;;11786:66;11766:87;;11881:2;11872:12;;11672:218;-1:-1;;11672:218;11898:113;11981:24;11999:5;11981:24;;12018:262;;12162:93;12251:3;12242:6;12162:93;;;12155:100;12143:137;-1:-1;;;12143:137;12287:213;12405:2;12390:18;;12419:71;12394:9;12463:6;12419:71;;12507:229;12633:2;12618:18;;12647:79;12622:9;12699:6;12647:79;;12743:340;12897:2;12882:18;;12911:79;12886:9;12963:6;12911:79;;;13001:72;13069:2;13058:9;13054:18;13045:6;13001:72;;13090:324;13236:2;13221:18;;13250:71;13225:9;13294:6;13250:71;;13421:324;13567:2;13552:18;;13581:71;13556:9;13625:6;13581:71;;;13663:72;13731:2;13720:9;13716:18;13707:6;13663:72;;13752:201;13864:2;13849:18;;13878:65;13853:9;13916:6;13878:65;;13960:259;14101:2;14086:18;;14115:94;14090:9;14182:6;14115:94;;14226:607;14458:3;14443:19;;14473:85;14447:9;14531:6;14473:85;;;14569:80;14645:2;14634:9;14630:18;14621:6;14569:80;;;14660;14736:2;14725:9;14721:18;14712:6;14660:80;;;14751:72;14819:2;14808:9;14804:18;14795:6;14751:72;;15086:407;15277:2;15291:47;;;15262:18;;15352:131;15262:18;15352:131;;15500:407;15691:2;15705:47;;;15676:18;;15766:131;15676:18;15766:131;;15914:407;16105:2;16119:47;;;16090:18;;16180:131;16090:18;16180:131;;16328:407;16519:2;16533:47;;;16504:18;;16594:131;16504:18;16594:131;;16742:407;16933:2;16947:47;;;16918:18;;17008:131;16918:18;17008:131;;17156:407;17347:2;17361:47;;;17332:18;;17422:131;17332:18;17422:131;;17570:407;17761:2;17775:47;;;17746:18;;17836:131;17746:18;17836:131;;17984:407;18175:2;18189:47;;;18160:18;;18250:131;18160:18;18250:131;;18398:407;18589:2;18603:47;;;18574:18;;18664:131;18574:18;18664:131;;18812:407;19003:2;19017:47;;;18988:18;;19078:131;18988:18;19078:131;;19226:213;19344:2;19329:18;;19358:71;19333:9;19402:6;19358:71;;19446:583;19670:2;19655:18;;19684:71;19659:9;19728:6;19684:71;;;19803:9;19797:4;19793:20;19788:2;19777:9;19773:18;19766:48;19828:108;19931:4;19922:6;19828:108;;;19820:116;;19947:72;20015:2;20004:9;20000:18;19991:6;19947:72;;20036:256;20098:2;20092:9;20124:17;;;20199:18;20184:34;;20220:22;;;20181:62;20178:2;;;20256:1;20253;20246:12;20178:2;20272;20265:22;20076:216;;-1:-1;20076:216;20299:304;;20458:18;20450:6;20447:30;20444:2;;;20490:1;20487;20480:12;20444:2;-1:-1;20525:4;20513:17;;;20578:15;;20381:222;20921:321;;21064:18;21056:6;21053:30;21050:2;;;21096:1;21093;21086:12;21050:2;-1:-1;21227:4;21163;21140:17;;;;21159:9;21136:33;21217:15;;20987:255;21249:151;21373:4;21364:14;;21321:79;21407:137;21510:12;;21481:63;21795:178;21913:19;;;21962:4;21953:14;;21906:67;21982:144;22117:3;22095:31;-1:-1;22095:31;22306:91;;22368:24;22386:5;22368:24;;22404:85;22470:13;22463:21;;22446:43;22496:105;;22572:24;22590:5;22572:24;;22608:121;22681:42;22670:54;;22653:76;22736:72;22798:5;22781:27;22815:129;;22902:37;22933:5;22902:37;;24074:145;24155:6;24150:3;24145;24132:30;-1:-1;24211:1;24193:16;;24186:27;24125:94;24228:268;24293:1;24300:101;24314:6;24311:1;24308:13;24300:101;;;24381:11;;;24375:18;24362:11;;;24355:39;24336:2;24329:10;24300:101;;;24416:6;24413:1;24410:13;24407:2;;;-1:-1;;24481:1;24463:16;;24456:27;24277:219;24504:117;24573:24;24591:5;24573:24;;;24566:5;24563:35;24553:2;;24612:1;24609;24602:12;24628:111;24694:21;24709:5;24694:21;;24746:145;24829:38;24861:5;24829:38;;24898:117;24967:24;24985:5;24967:24;
Swarm Source
bzzr://8ef5be6c82d975b29649a42109a391022250684b3409e5487b143086b9fa32ed
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.