Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,381 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Aggregate | 8570089 | 2039 days ago | IN | 0 ETH | 0.00077989 | ||||
Transfer | 8569736 | 2039 days ago | IN | 0 ETH | 0.00054606 | ||||
Aggregate | 8569095 | 2039 days ago | IN | 3 ETH | 0.0029033 | ||||
Aggregate | 8568798 | 2039 days ago | IN | 13.66145089 ETH | 0.01086279 | ||||
Aggregate | 8568647 | 2039 days ago | IN | 76 ETH | 0.0229319 | ||||
Aggregate | 8568492 | 2039 days ago | IN | 0.09 ETH | 0.00277213 | ||||
Aggregate | 8567547 | 2039 days ago | IN | 0 ETH | 0.00303195 | ||||
Aggregate | 8567213 | 2040 days ago | IN | 0 ETH | 0.00346957 | ||||
Aggregate | 8567108 | 2040 days ago | IN | 2 ETH | 0.00286081 | ||||
Aggregate | 8566712 | 2040 days ago | IN | 0.1 ETH | 0.00274 | ||||
Aggregate | 8566591 | 2040 days ago | IN | 0.02 ETH | 0.00386946 | ||||
Aggregate | 8566534 | 2040 days ago | IN | 0.02 ETH | 0.00150653 | ||||
Aggregate | 8566526 | 2040 days ago | IN | 0 ETH | 0.00504176 | ||||
Aggregate | 8566521 | 2040 days ago | IN | 0.01 ETH | 0.00549574 | ||||
Aggregate | 8565938 | 2040 days ago | IN | 0 ETH | 0.00590622 | ||||
Aggregate | 8565857 | 2040 days ago | IN | 0.001 ETH | 0.0023618 | ||||
Aggregate | 8565834 | 2040 days ago | IN | 0 ETH | 0.00930756 | ||||
Aggregate | 8565832 | 2040 days ago | IN | 0.059 ETH | 0.0023618 | ||||
Aggregate | 8565673 | 2040 days ago | IN | 1.545 ETH | 0.0073094 | ||||
Aggregate | 8565666 | 2040 days ago | IN | 0 ETH | 0.00664822 | ||||
Aggregate | 8565666 | 2040 days ago | IN | 0 ETH | 0.00688481 | ||||
Aggregate | 8565651 | 2040 days ago | IN | 3 ETH | 0.0056937 | ||||
Aggregate | 8565622 | 2040 days ago | IN | 3 ETH | 0.00710775 | ||||
Aggregate | 8565215 | 2040 days ago | IN | 12.7 ETH | 0.01747144 | ||||
Aggregate | 8564983 | 2040 days ago | IN | 0 ETH | 0.00270396 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 8569095 | 2039 days ago | 3 ETH | ||||
- | 8568798 | 2039 days ago | 0.68307254 ETH | ||||
- | 8568798 | 2039 days ago | 9.97285915 ETH | ||||
- | 8568798 | 2039 days ago | 3.00551919 ETH | ||||
- | 8568647 | 2039 days ago | 11.4 ETH | ||||
- | 8568647 | 2039 days ago | 64.6 ETH | ||||
- | 8568492 | 2039 days ago | 0.09 ETH | ||||
- | 8567213 | 2040 days ago | 4.95540138 ETH | ||||
- | 8567213 | 2040 days ago | 4.95540138 ETH | ||||
- | 8567108 | 2040 days ago | 2 ETH | ||||
- | 8566712 | 2040 days ago | 0.1 ETH | ||||
- | 8566591 | 2040 days ago | 0.02 ETH | ||||
- | 8566534 | 2040 days ago | 0.02 ETH | ||||
- | 8566526 | 2040 days ago | 0.00996005 ETH | ||||
- | 8566526 | 2040 days ago | 0.00996005 ETH | ||||
- | 8566521 | 2040 days ago | 0.01 ETH | ||||
- | 8565938 | 2040 days ago | 0.00247063 ETH | ||||
- | 8565938 | 2040 days ago | 0.00000103 ETH | ||||
- | 8565938 | 2040 days ago | 0.00247166 ETH | ||||
- | 8565857 | 2040 days ago | 0.001 ETH | ||||
- | 8565834 | 2040 days ago | 5.43817948 ETH | ||||
- | 8565834 | 2040 days ago | 0.00363331 ETH | ||||
- | 8565834 | 2040 days ago | 0.0004037 ETH | ||||
- | 8565834 | 2040 days ago | 2.07293509 ETH | ||||
- | 8565834 | 2040 days ago | 3.36928139 ETH |
Loading...
Loading
Contract Name:
AggregatedTokenSwap
Compiler Version
v0.5.10+commit.5a6ea5b1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-07-19 */ pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; interface IGST2 { function freeUpTo(uint256 value) external returns (uint256 freed); function freeFromUpTo(address from, uint256 value) external returns (uint256 freed); function balanceOf(address who) external view returns (uint256); } contract IZrxExchange { struct Order { address makerAddress; // Address that created the order. address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. address feeRecipientAddress; // Address that will recieve fees when order is filled. address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods. uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted. uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted. uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy. bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy. } struct OrderInfo { uint8 orderStatus; // Status that describes order's validity and fillability. bytes32 orderHash; // EIP712 hash of the order (see IZrxExchange.getOrderHash). uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled. } struct FillResults { uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled. uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled. uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s). uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s). } function getOrderInfo(Order memory order) public view returns (OrderInfo memory orderInfo); function getOrdersInfo(Order[] memory orders) public view returns (OrderInfo[] memory ordersInfo); function fillOrder( Order memory order, uint256 takerAssetFillAmount, bytes memory signature ) public returns (FillResults memory fillResults); function fillOrderNoThrow( Order memory order, uint256 takerAssetFillAmount, bytes memory signature ) public returns (FillResults memory fillResults); } library ExternalCall { // 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 externalCall(address destination, uint value, bytes memory data, uint dataOffset, uint dataLength) internal returns(bool result) { // solium-disable-next-line security/no-inline-assembly 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 ) } } } contract CompressedCaller { function compressedCall( address target, uint256 totalLength, bytes memory zipped ) public payable returns (bytes memory result) { (bytes memory data, uint decompressedLength) = decompress(totalLength, zipped); require(decompressedLength == totalLength, "Uncompress error"); bool success; (success, result) = target.call.value(msg.value)(data); require(success, "Decompressed call failed"); } function decompress( uint256 totalLength, bytes memory zipped ) public pure returns ( bytes memory data, uint256 index ) { data = new bytes(totalLength); for (uint i = 0; i < zipped.length; i++) { uint len = uint(uint8(zipped[i]) & 0x7F); if ((zipped[i] & 0x80) == 0) { memcpy(data, index, zipped, i + 1, len); i += len; } index += len; } } // // Modified version of: // https://github.com/Arachnid/solidity-stringutils/blob/master/src/strings.sol#L45 // function memcpy( bytes memory destMem, uint dest, bytes memory srcMem, uint src, uint len ) private pure { uint mask = 256 ** (32 - len % 32) - 1; assembly { dest := add(add(destMem, 32), dest) src := add(add(srcMem, 32), src) // Copy word-length chunks while possible for { } gt(len, 31) { len := sub(len, 32) } { // (!<) is the same as (>=) mstore(dest, mload(src)) dest := add(dest, 32) src := add(src, 32) } // Copy remaining bytes let srcPart := and(mload(src), not(mask)) let destPart := and(mload(dest), mask) mstore(dest, or(destPart, srcPart)) } } } /** * @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 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 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. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } /** * @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 aplied 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; } } /** * @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 deposit() external payable; function withdraw(uint256 amount) external; } contract TokenSpender is Ownable { using SafeERC20 for IERC20; function claimTokens(IERC20 token, address who, address dest, uint256 amount) external onlyOwner { token.safeTransferFrom(who, dest, amount); } } contract IERC20NonView { // Methods are not view to avoid throw on proxy tokens with delegatecall inside function balanceOf(address user) public returns(uint256); function allowance(address from, address to) public returns(uint256); } contract ZrxMarketOrder { using SafeMath for uint256; function marketSellOrders( address makerAsset, address zrxExchange, address zrxTokenProxy, uint256 takerAssetFillAmount, IZrxExchange.Order[] calldata orders, bytes[] calldata signatures ) external returns (IZrxExchange.FillResults memory totalFillResults) { for (uint i = 0; i < orders.length; i++) { // Stop execution if the entire amount of takerAsset has been sold if (totalFillResults.takerAssetFilledAmount >= takerAssetFillAmount) { break; } // Calculate the remaining amount of takerAsset to sell uint256 remainingTakerAmount = takerAssetFillAmount.sub(totalFillResults.takerAssetFilledAmount); IZrxExchange.OrderInfo memory orderInfo = IZrxExchange(zrxExchange).getOrderInfo(orders[i]); uint256 orderRemainingTakerAmount = orders[i].takerAssetAmount.sub(orderInfo.orderTakerAssetFilledAmount); // Check available balance and allowance and update orderRemainingTakerAmount { uint256 balance = IERC20NonView(makerAsset).balanceOf(orders[i].makerAddress); uint256 allowance = IERC20NonView(makerAsset).allowance(orders[i].makerAddress, zrxTokenProxy); uint256 availableMakerAmount = (allowance < balance) ? allowance : balance; uint256 availableTakerAmount = availableMakerAmount.mul(orders[i].takerAssetAmount).div(orders[i].makerAssetAmount); if (availableTakerAmount < orderRemainingTakerAmount) { orderRemainingTakerAmount = availableTakerAmount; } } uint256 takerAmount = (orderRemainingTakerAmount < remainingTakerAmount) ? orderRemainingTakerAmount : remainingTakerAmount; IZrxExchange.FillResults memory fillResults = IZrxExchange(zrxExchange).fillOrderNoThrow( orders[i], takerAmount, signatures[i] ); addFillResults(totalFillResults, fillResults); } return totalFillResults; } function addFillResults( IZrxExchange.FillResults memory totalFillResults, IZrxExchange.FillResults memory singleFillResults ) internal pure { totalFillResults.makerAssetFilledAmount = totalFillResults.makerAssetFilledAmount.add(singleFillResults.makerAssetFilledAmount); totalFillResults.takerAssetFilledAmount = totalFillResults.takerAssetFilledAmount.add(singleFillResults.takerAssetFilledAmount); totalFillResults.makerFeePaid = totalFillResults.makerFeePaid.add(singleFillResults.makerFeePaid); totalFillResults.takerFeePaid = totalFillResults.takerFeePaid.add(singleFillResults.takerFeePaid); } } contract AggregatedTokenSwap is CompressedCaller, ZrxMarketOrder { using SafeERC20 for IERC20; using SafeMath for uint; using ExternalCall for address; address constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; TokenSpender public spender; IGST2 gasToken; address payable owner; uint fee; // 10000 => 100%, 1 => 0.01% event OneInchFeePaid( IERC20 indexed toToken, address indexed referrer, uint256 fee ); modifier onlyOwner { require( msg.sender == owner, "Only owner can call this function." ); _; } constructor( address payable _owner, IGST2 _gasToken, uint _fee ) public { spender = new TokenSpender(); owner = _owner; gasToken = _gasToken; fee = _fee; } function aggregate( IERC20 fromToken, IERC20 toToken, uint tokensAmount, address[] memory callAddresses, bytes memory callDataConcat, uint[] memory starts, uint[] memory values, uint mintGasPrice, uint minTokensAmount, uint guaranteedAmount, address payable referrer ) public payable returns (uint returnAmount) { returnAmount = gasleft(); uint gasTokenBalance = gasToken.balanceOf(address(this)); require(callAddresses.length + 1 == starts.length); if (address(fromToken) != ETH_ADDRESS) { spender.claimTokens(fromToken, tx.origin, address(this), tokensAmount); } for (uint i = 0; i < starts.length - 1; i++) { if (starts[i + 1] - starts[i] > 0) { require( callDataConcat[starts[i] + 0] != spender.claimTokens.selector[0] || callDataConcat[starts[i] + 1] != spender.claimTokens.selector[1] || callDataConcat[starts[i] + 2] != spender.claimTokens.selector[2] || callDataConcat[starts[i] + 3] != spender.claimTokens.selector[3] ); require(callAddresses[i].externalCall(values[i], callDataConcat, starts[i], starts[i + 1] - starts[i])); } } // require(gasTokenBalance == gasToken.balanceOf(address(this))); if (mintGasPrice > 0) { audoRefundGas(returnAmount, mintGasPrice); } // returnAmount = _balanceOf(toToken, address(this)); require(returnAmount >= minTokensAmount, "Return amount is not enough"); if (returnAmount > guaranteedAmount) { uint feeAmount = returnAmount.sub(guaranteedAmount).mul(fee).div(10000); if (feeAmount.mul(10000).div(returnAmount) > 100) { // 1% feeAmount = returnAmount.div(100); // 1% } if (referrer != address(0) && referrer != tx.origin && referrer != tx.origin) { if (_transfer(toToken, referrer, feeAmount.div(10), true)) { returnAmount = returnAmount.sub(feeAmount.div(10)); emit OneInchFeePaid(toToken, referrer, feeAmount.div(10)); feeAmount = feeAmount.mul(9).div(10); } else { emit OneInchFeePaid(toToken, address(0), feeAmount); } } else { emit OneInchFeePaid(toToken, address(0), feeAmount); } if (_transfer(toToken, owner, feeAmount, true)) { returnAmount = returnAmount.sub(feeAmount); } } _transfer(toToken, tx.origin, returnAmount, false); } function infiniteApproveIfNeeded(IERC20 token, address to) external { if ( address(token) != ETH_ADDRESS && token.allowance(address(this), to) == 0 ) { token.safeApprove(to, uint256(-1)); } } function withdrawAllToken(IWETH token) external { uint256 amount = token.balanceOf(address(this)); token.withdraw(amount); } function marketSellOrdersProportion( IERC20 tokenSell, address tokenBuy, address zrxExchange, address zrxTokenProxy, IZrxExchange.Order[] calldata orders, bytes[] calldata signatures, uint256 mul, uint256 div ) external { uint256 amount = tokenSell.balanceOf(address(this)).mul(mul).div(div); this.marketSellOrders(tokenBuy, zrxExchange, zrxTokenProxy, amount, orders, signatures); } function _balanceOf(IERC20 token, address who) internal view returns(uint256) { if (address(token) == ETH_ADDRESS || token == IERC20(0)) { return who.balance; } else { return token.balanceOf(who); } } function _transfer(IERC20 token, address payable to, uint256 amount, bool allowFail) internal returns(bool) { if (address(token) == ETH_ADDRESS || token == IERC20(0)) { if (allowFail) { return to.send(amount); } else { to.transfer(amount); return true; } } else { token.safeTransfer(to, amount); return true; } } function audoRefundGas( uint startGas, uint mintGasPrice ) private returns (uint freed) { uint MINT_BASE = 32254; uint MINT_TOKEN = 36543; uint FREE_BASE = 14154; uint FREE_TOKEN = 6870; uint REIMBURSE = 24000; uint tokensAmount = ((startGas - gasleft()) + FREE_BASE) / (2 * REIMBURSE - FREE_TOKEN); uint maxReimburse = tokensAmount * REIMBURSE; uint mintCost = MINT_BASE + (tokensAmount * MINT_TOKEN); uint freeCost = FREE_BASE + (tokensAmount * FREE_TOKEN); uint efficiency = (maxReimburse * 100 * tx.gasprice) / (mintCost * mintGasPrice + freeCost * tx.gasprice); if (efficiency > 100) { return refundGas( tokensAmount ); } else { return 0; } } function refundGas( uint tokensAmount ) private returns (uint freed) { if (tokensAmount > 0) { uint safeNumTokens = 0; uint gas = gasleft(); if (gas >= 27710) { safeNumTokens = (gas - 27710) / (1148 + 5722 + 150); } if (tokensAmount > safeNumTokens) { tokensAmount = safeNumTokens; } uint gasTokenBalance = IERC20(address(gasToken)).balanceOf(address(this)); if (tokensAmount > 0 && gasTokenBalance >= tokensAmount) { return gasToken.freeUpTo(tokensAmount); } else { return 0; } } else { return 0; } } function() external payable { if (msg.value == 0 && msg.sender == owner) { IERC20 _gasToken = IERC20(address(gasToken)); owner.transfer(address(this).balance); _gasToken.safeTransfer(owner, _gasToken.balanceOf(address(this))); } } function getOrdersInfoRespectingBalancesAndAllowances( IERC20 token, IZrxExchange zrx, address zrxTokenProxy, IZrxExchange.Order[] memory orders ) public view returns (IZrxExchange.OrderInfo[] memory ordersInfo) { ordersInfo = zrx.getOrdersInfo(orders); for (uint i = 0; i < ordersInfo.length; i++) { uint256 balance = token.balanceOf(orders[i].makerAddress); uint256 allowance = token.allowance(orders[i].makerAddress, zrxTokenProxy); uint256 availableMakerAmount = (allowance < balance) ? allowance : balance; uint256 availableTakerAmount = availableMakerAmount.mul(orders[i].takerAssetAmount).div(orders[i].makerAssetAmount); for (uint j = 0; j < i; j++) { if (orders[j].makerAddress == orders[i].makerAddress) { uint256 orderTakerAssetRemainigAmount = orders[j].takerAssetAmount.sub( ordersInfo[j].orderTakerAssetFilledAmount ); if (availableTakerAmount > orderTakerAssetRemainigAmount) { availableTakerAmount = availableTakerAmount.sub(orderTakerAssetRemainigAmount); } else { availableTakerAmount = 0; break; } } } uint256 remainingTakerAmount = orders[i].takerAssetAmount.sub( ordersInfo[i].orderTakerAssetFilledAmount ); if (availableTakerAmount < remainingTakerAmount) { ordersInfo[i].orderTakerAssetFilledAmount = orders[i].takerAssetAmount.sub(availableTakerAmount); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"zrx","type":"address"},{"name":"zrxTokenProxy","type":"address"},{"components":[{"name":"makerAddress","type":"address"},{"name":"takerAddress","type":"address"},{"name":"feeRecipientAddress","type":"address"},{"name":"senderAddress","type":"address"},{"name":"makerAssetAmount","type":"uint256"},{"name":"takerAssetAmount","type":"uint256"},{"name":"makerFee","type":"uint256"},{"name":"takerFee","type":"uint256"},{"name":"expirationTimeSeconds","type":"uint256"},{"name":"salt","type":"uint256"},{"name":"makerAssetData","type":"bytes"},{"name":"takerAssetData","type":"bytes"}],"name":"orders","type":"tuple[]"}],"name":"getOrdersInfoRespectingBalancesAndAllowances","outputs":[{"components":[{"name":"orderStatus","type":"uint8"},{"name":"orderHash","type":"bytes32"},{"name":"orderTakerAssetFilledAmount","type":"uint256"}],"name":"ordersInfo","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"target","type":"address"},{"name":"totalLength","type":"uint256"},{"name":"zipped","type":"bytes"}],"name":"compressedCall","outputs":[{"name":"result","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"totalLength","type":"uint256"},{"name":"zipped","type":"bytes"}],"name":"decompress","outputs":[{"name":"data","type":"bytes"},{"name":"index","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"tokenSell","type":"address"},{"name":"tokenBuy","type":"address"},{"name":"zrxExchange","type":"address"},{"name":"zrxTokenProxy","type":"address"},{"components":[{"name":"makerAddress","type":"address"},{"name":"takerAddress","type":"address"},{"name":"feeRecipientAddress","type":"address"},{"name":"senderAddress","type":"address"},{"name":"makerAssetAmount","type":"uint256"},{"name":"takerAssetAmount","type":"uint256"},{"name":"makerFee","type":"uint256"},{"name":"takerFee","type":"uint256"},{"name":"expirationTimeSeconds","type":"uint256"},{"name":"salt","type":"uint256"},{"name":"makerAssetData","type":"bytes"},{"name":"takerAssetData","type":"bytes"}],"name":"orders","type":"tuple[]"},{"name":"signatures","type":"bytes[]"},{"name":"mul","type":"uint256"},{"name":"div","type":"uint256"}],"name":"marketSellOrdersProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"withdrawAllToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"fromToken","type":"address"},{"name":"toToken","type":"address"},{"name":"tokensAmount","type":"uint256"},{"name":"callAddresses","type":"address[]"},{"name":"callDataConcat","type":"bytes"},{"name":"starts","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"mintGasPrice","type":"uint256"},{"name":"minTokensAmount","type":"uint256"},{"name":"guaranteedAmount","type":"uint256"},{"name":"referrer","type":"address"}],"name":"aggregate","outputs":[{"name":"returnAmount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"to","type":"address"}],"name":"infiniteApproveIfNeeded","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"spender","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"makerAsset","type":"address"},{"name":"zrxExchange","type":"address"},{"name":"zrxTokenProxy","type":"address"},{"name":"takerAssetFillAmount","type":"uint256"},{"components":[{"name":"makerAddress","type":"address"},{"name":"takerAddress","type":"address"},{"name":"feeRecipientAddress","type":"address"},{"name":"senderAddress","type":"address"},{"name":"makerAssetAmount","type":"uint256"},{"name":"takerAssetAmount","type":"uint256"},{"name":"makerFee","type":"uint256"},{"name":"takerFee","type":"uint256"},{"name":"expirationTimeSeconds","type":"uint256"},{"name":"salt","type":"uint256"},{"name":"makerAssetData","type":"bytes"},{"name":"takerAssetData","type":"bytes"}],"name":"orders","type":"tuple[]"},{"name":"signatures","type":"bytes[]"}],"name":"marketSellOrders","outputs":[{"components":[{"name":"makerAssetFilledAmount","type":"uint256"},{"name":"takerAssetFilledAmount","type":"uint256"},{"name":"makerFeePaid","type":"uint256"},{"name":"takerFeePaid","type":"uint256"}],"name":"totalFillResults","type":"tuple"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_gasToken","type":"address"},{"name":"_fee","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"toToken","type":"address"},{"indexed":true,"name":"referrer","type":"address"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"OneInchFeePaid","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003d1438038062003d148339810160408190526200003491620000e3565b6040516200004290620000a8565b604051809103906000f0801580156200005f573d6000803e3d6000fd5b50600080546001600160a01b03199081166001600160a01b0393841617909155600280548216958316959095179094556001805490941692169190911790915560035562000190565b6107d0806200354483390190565b8051620000c38162000160565b92915050565b8051620000c3816200017a565b8051620000c38162000185565b600080600060608486031215620000f957600080fd5b6000620001078686620000b6565b93505060206200011a86828701620000c9565b92505060406200012d86828701620000d6565b9150509250925092565b6000620000c38262000151565b6000620000c38262000137565b6001600160a01b031690565b90565b6200016b8162000137565b81146200017757600080fd5b50565b6200016b8162000144565b6200016b816200015d565b6133a480620001a06000396000f3fe6080604052600436106100865760003560e01c8063ae4dd0fc11610059578063ae4dd0fc1461022d578063c3f719a01461024d578063c9b273591461026d578063e8edc8161461028d578063fcc06f8e146102af57610086565b806371a2039a1461018957806393caed48146101bf57806398fa3c08146101df578063a96c400e1461020d575b3415801561009e57506002546001600160a01b031633145b15610187576001546002546040516001600160a01b03928316929190911690303180156108fc02916000818181858888f193505050501580156100e5573d6000803e3d6000fd5b506002546040516370a0823160e01b8152610185916001600160a01b0390811691908416906370a082319061011e903090600401612f3f565b60206040518083038186803b15801561013657600080fd5b505afa15801561014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061016e91908101906126b0565b6001600160a01b038416919063ffffffff6102dc16565b505b005b34801561019557600080fd5b506101a96101a43660046125de565b61033a565b6040516101b69190612ffc565b60405180910390f35b6101d26101cd3660046122bd565b6106a9565b6040516101b6919061301e565b3480156101eb57600080fd5b506101ff6101fa3660046126ce565b61076d565b6040516101b692919061302f565b34801561021957600080fd5b506101876102283660046123ad565b610814565b34801561023957600080fd5b50610187610248366004612656565b61093a565b61026061025b366004612494565b610a1e565b6040516101b69190613194565b34801561027957600080fd5b50610187610288366004612373565b611049565b34801561029957600080fd5b506102a2611116565b6040516101b69190613084565b3480156102bb57600080fd5b506102cf6102ca3660046121fe565b611125565b6040516101b69190613142565b60405161033590849063a9059cbb60e01b906102fe9086908690602401612fe1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115b7565b505050565b604051631fa75d3760e21b81526060906001600160a01b03851690637e9d74dc9061036990859060040161300d565b60006040518083038186803b15801561038157600080fd5b505afa158015610395573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103bd9190810190612321565b905060005b81518110156106a0576000866001600160a01b03166370a082318584815181106103e857fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016104109190612f31565b60206040518083038186803b15801561042857600080fd5b505afa15801561043c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061046091908101906126b0565b90506000876001600160a01b031663dd62ed3e86858151811061047f57fe5b602002602001015160000151886040518363ffffffff1660e01b81526004016104a9929190612f68565b60206040518083038186803b1580156104c157600080fd5b505afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104f991908101906126b0565b9050600082821061050a578261050c565b815b9050600061056187868151811061051f57fe5b60200260200101516080015161055589888151811061053a57fe5b602002602001015160a00151856116a290919063ffffffff16565b9063ffffffff6116e516565b905060005b8581101561062e5787868151811061057a57fe5b6020026020010151600001516001600160a01b031688828151811061059b57fe5b6020026020010151600001516001600160a01b031614156106265760006105f98883815181106105c757fe5b6020026020010151604001518a84815181106105df57fe5b602002602001015160a0015161171a90919063ffffffff16565b90508083111561061a57610613838263ffffffff61171a16565b9250610624565b600092505061062e565b505b600101610566565b50600061065887878151811061064057fe5b6020026020010151604001518988815181106105df57fe5b90508082101561068f57610672828988815181106105df57fe5b87878151811061067e57fe5b602002602001015160400181815250505b5050600190930192506103c2915050565b50949350505050565b60608060006106b8858561076d565b915091508481146106e45760405162461bcd60e51b81526004016106db90613092565b60405180910390fd5b6000866001600160a01b031634846040516106ff9190612f25565b60006040518083038185875af1925050503d806000811461073c576040519150601f19603f3d011682016040523d82523d6000602084013e610741565b606091505b5094509050806107635760405162461bcd60e51b81526004016106db906130a2565b5050509392505050565b60606000836040519080825280601f01601f19166020018201604052801561079c576020820181803883390190505b50915060005b835181101561080c5760008482815181106107b957fe5b602001015160f81c60f81b60f81c607f1660ff1690508482815181106107db57fe5b0160200151600160ff1b166107ff576107fa8484878560010185611742565b908101905b91909101906001016107a2565b509250929050565b60006108a682610555858e6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161084a9190612f3f565b60206040518083038186803b15801561086257600080fd5b505afa158015610876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061089a91908101906126b0565b9063ffffffff6116a216565b604051637e6037c760e11b8152909150309063fcc06f8e906108da908d908d908d9087908e908e908e908e90600401612f76565b608060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061092c9190810190612674565b505050505050505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610969903090600401612f3f565b60206040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109b991908101906126b0565b604051632e1a7d4d60e01b81529091506001600160a01b03831690632e1a7d4d906109e8908490600401613194565b600060405180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050505050565b60005a6001546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190610a57903090600401612f3f565b60206040518083038186803b158015610a6f57600080fd5b505afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aa791908101906126b0565b905087518a5160010114610aba57600080fd5b6001600160a01b038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610b57576000809054906101000a90046001600160a01b03166001600160a01b0316630a5ea4668e32308f6040518563ffffffff1660e01b8152600401610b24949392919061304f565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b505050505b60005b6001895103811015610d3f576000898281518110610b7457fe5b60200260200101518a8360010181518110610b8b57fe5b6020026020010151031115610d37578851600560f91b908b908b9084908110610bb057fe5b602002602001015160000181518110610bc557fe5b01602001516001600160f81b031916141580610c1957508851602f60f91b908b908b9084908110610bf257fe5b602002602001015160010181518110610c0757fe5b01602001516001600160f81b03191614155b80610c5c57508851602960fa1b908b908b9084908110610c3557fe5b602002602001015160020181518110610c4a57fe5b01602001516001600160f81b03191614155b80610c9f57508851603360f91b908b908b9084908110610c7857fe5b602002602001015160030181518110610c8d57fe5b01602001516001600160f81b03191614155b610ca857600080fd5b610d2e888281518110610cb757fe5b60200260200101518b8b8481518110610ccc57fe5b60200260200101518c8581518110610ce057fe5b60200260200101518d8660010181518110610cf757fe5b6020026020010151038f8681518110610d0c57fe5b60200260200101516001600160a01b031661179790949392919063ffffffff16565b610d3757600080fd5b600101610b5a565b506001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610d70903090600401612f3f565b60206040518083038186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dc091908101906126b0565b8114610dcb57600080fd5b8515610ddd57610ddb82876117bb565b505b610de78c3061183d565b915084821015610e095760405162461bcd60e51b81526004016106db906130f2565b8382111561102b576000610e3261271061055560035461089a898861171a90919063ffffffff16565b90506064610e4c846105558461271063ffffffff6116a216565b1115610e6657610e6383606463ffffffff6116e516565b90505b6001600160a01b03841615801590610e8757506001600160a01b0384163214155b8015610e9c57506001600160a01b0384163214155b15610faa57610ebe8d85610eb784600a63ffffffff6116e516565b600161190a565b15610f5857610ee4610ed782600a63ffffffff6116e516565b849063ffffffff61171a16565b92506001600160a01b03808516908e167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf610f2684600a63ffffffff6116e516565b604051610f339190613194565b60405180910390a3610f51600a61055583600963ffffffff6116a216565b9050610fa5565b60006001600160a01b03168d6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf83604051610f9c9190613194565b60405180910390a35b610ff7565b60006001600160a01b03168d6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf83604051610fee9190613194565b60405180910390a35b600254611011908e906001600160a01b031683600161190a565b1561102957611026838263ffffffff61171a16565b92505b505b6110388c3284600061190a565b50509b9a5050505050505050505050565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906110f15750604051636eb1769f60e11b81526001600160a01b0383169063dd62ed3e9061109f9030908590600401612f4d565b60206040518083038186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110ef91908101906126b0565b155b15611112576111126001600160a01b0383168260001963ffffffff6119db16565b5050565b6000546001600160a01b031681565b61112d611cae565b60005b848110156115aa5786826020015110611148576115aa565b600061116183602001518961171a90919063ffffffff16565b905061116b611cd6565b8a6001600160a01b031663c75e0a8189898681811061118657fe5b60200282019050803561017e19368490030181126111a357600080fd5b6040516001600160e01b031960e086901b1681526111c8939091019150600401613150565b60606040518083038186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112189190810190612692565b9050600061125c82604001518a8a8781811061123057fe5b60200282019050803561017e193684900301811261124d57600080fd5b90910160a0013591905061171a565b905060008d6001600160a01b03166370a082318b8b8881811061127b57fe5b60200282019050803561017e193684900301811261129857600080fd5b6112a892016020810191506121e0565b6040518263ffffffff1660e01b81526004016112c49190612f31565b602060405180830381600087803b1580156112de57600080fd5b505af11580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061131691908101906126b0565b905060008e6001600160a01b031663dd62ed3e8c8c8981811061133557fe5b60200282019050803561017e193684900301811261135257600080fd5b61136292016020810191506121e0565b8f6040518363ffffffff1660e01b8152600401611380929190612f68565b602060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113d291908101906126b0565b905060008282106113e357826113e5565b815b9050600061145a8d8d8a8181106113f857fe5b60200282019050803561017e193684900301811261141557600080fd5b80830192505050608001356105558f8f8c81811061142f57fe5b60200282019050803561017e193684900301811261144c57600080fd5b87920160a0013590506116a2565b905084811015611468578094505b50505050600083821061147b578361147d565b815b9050611487611cae565b8d6001600160a01b0316633e228bae8c8c898181106114a257fe5b60200282019050803561017e19368490030181126114bf57600080fd5b919091019050848c8c8b8181106114d257fe5b602002820190508035601e19368490030181126114ee57600080fd5b909101602081019150356001600160401b0381111561150c57600080fd5b3681900382131561151c57600080fd5b6040518563ffffffff1660e01b815260040161153b9493929190613161565b608060405180830381600087803b15801561155557600080fd5b505af1158015611569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061158d9190810190612674565b90506115998782611aa1565b505060019093019250611130915050565b5098975050505050505050565b6115c9826001600160a01b0316611b17565b6115e55760405162461bcd60e51b81526004016106db90613132565b60006060836001600160a01b0316836040516116019190612f25565b6000604051808303816000865af19150503d806000811461163e576040519150601f19603f3d011682016040523d82523d6000602084013e611643565b606091505b5091509150816116655760405162461bcd60e51b81526004016106db906130c2565b80511561169c57808060200190516116809190810190612355565b61169c5760405162461bcd60e51b81526004016106db90613112565b50505050565b6000826116b1575060006116df565b828202828482816116be57fe5b04146116dc5760405162461bcd60e51b81526004016106db90613102565b90505b92915050565b60008082116117065760405162461bcd60e51b81526004016106db906130e2565b600082848161171157fe5b04949350505050565b60008282111561173c5760405162461bcd60e51b81526004016106db906130d2565b50900390565b6020938501840193918301820191601f821690036101000a600019015b601f821115611782578251855260209485019490920191601f199091019061175f565b91518451831692191691909117909252505050565b600060405160208501600082858784018a8c6187965a03f198975050505050505050565b6000617dfe618ebf61374a611ad6615dc08561a0aa845a8b0301816117dc57fe5b0490508181028582028701848302860160003a8083028d850201906064908602028161180457fe5b049050606481111561182a5761181985611b21565b9a50505050505050505050506116df565b60009a50505050505050505050506116df565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148061187157506001600160a01b038316155b1561188757506001600160a01b038116316116df565b6040516370a0823160e01b81526001600160a01b038416906370a08231906118b3908590600401612f31565b60206040518083038186803b1580156118cb57600080fd5b505afa1580156118df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061190391908101906126b0565b90506116df565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148061193e57506001600160a01b038516155b156119b5578115611975576040516001600160a01b0385169084156108fc029085906000818181858888f1935050505090506119d3565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156119ab573d6000803e3d6000fd5b50600190506119d3565b6119cf6001600160a01b038616858563ffffffff6102dc16565b5060015b949350505050565b801580611a635750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90611a119030908690600401612f68565b60206040518083038186803b158015611a2957600080fd5b505afa158015611a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a6191908101906126b0565b155b611a7f5760405162461bcd60e51b81526004016106db90613122565b60405161033590849063095ea7b360e01b906102fe9086908690602401612fe1565b80518251611ab49163ffffffff611c8916565b825260208082015190830151611acf9163ffffffff611c8916565b602083015260408082015190830151611aed9163ffffffff611c8916565b604083015260608082015190830151611b0b9163ffffffff611c8916565b60609092019190915250565b803b15155b919050565b60008115611c81576000805a9050616c3e8110611b4557611b6c616c3d1982010491505b81841115611b51578193505b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611b82903090600401612f3f565b60206040518083038186803b158015611b9a57600080fd5b505afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bd291908101906126b0565b9050600085118015611be45750848110155b15611c75576001546040516331b35c9b60e11b81526001600160a01b0390911690636366b93690611c19908890600401613194565b602060405180830381600087803b158015611c3357600080fd5b505af1158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c6b91908101906126b0565b9350505050611b1c565b60009350505050611b1c565b506000611b1c565b6000828201838110156116dc5760405162461bcd60e51b81526004016106db906130b2565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b80356116df81613326565b600082601f830112611d1257600080fd5b8135611d25611d20826131c8565b6131a2565b91508181835260208401935060208101905083856020840282011115611d4a57600080fd5b60005b83811015611d765781611d608882611cf6565b8452506020928301929190910190600101611d4d565b5050505092915050565b60008083601f840112611d9257600080fd5b5081356001600160401b03811115611da957600080fd5b602083019150836020820283011115611dc157600080fd5b9250929050565b600082601f830112611dd957600080fd5b8151611de7611d20826131c8565b91508181835260208401935060208101905083856060840282011115611e0c57600080fd5b60005b83811015611d765781611e228882612028565b84525060209092019160609190910190600101611e0f565b60008083601f840112611e4c57600080fd5b5081356001600160401b03811115611e6357600080fd5b60208301915083610180820283011115611dc157600080fd5b600082601f830112611e8d57600080fd5b8135611e9b611d20826131c8565b81815260209384019390925082018360005b83811015611d765781358601611ec38882612083565b8452506020928301929190910190600101611ead565b600082601f830112611eea57600080fd5b8135611ef8611d20826131c8565b91508181835260208401935060208101905083856020840282011115611f1d57600080fd5b60005b83811015611d765781611f3388826121ca565b8452506020928301929190910190600101611f20565b80516116df8161333d565b80516116df81613346565b600082601f830112611f7057600080fd5b8135611f7e611d20826131e8565b91508082526020830160208301858383011115611f9a57600080fd5b611fa58382846132e4565b50505092915050565b80356116df8161334f565b600060808284031215611fcb57600080fd5b611fd560806131a2565b90506000611fe38484611f54565b8252506020611ff484848301611f54565b602083015250604061200884828501611f54565b604083015250606061201c84828501611f54565b60608301525092915050565b60006060828403121561203a57600080fd5b61204460606131a2565b9050600061205284846121d5565b825250602061206384848301611f54565b602083015250604061207784828501611f54565b60408301525092915050565b6000610180828403121561209657600080fd5b6120a16101806131a2565b905060006120af8484611cf6565b82525060206120c084848301611cf6565b60208301525060406120d484828501611cf6565b60408301525060606120e884828501611cf6565b60608301525060806120fc848285016121ca565b60808301525060a0612110848285016121ca565b60a08301525060c0612124848285016121ca565b60c08301525060e0612138848285016121ca565b60e08301525061010061214d848285016121ca565b61010083015250610120612163848285016121ca565b610120830152506101408201356001600160401b0381111561218457600080fd5b61219084828501611f5f565b610140830152506101608201356001600160401b038111156121b157600080fd5b6121bd84828501611f5f565b6101608301525092915050565b80356116df81613346565b80516116df81613358565b6000602082840312156121f257600080fd5b60006119d38484611cf6565b60008060008060008060008060c0898b03121561221a57600080fd5b60006122268b8b611cf6565b98505060206122378b828c01611cf6565b97505060406122488b828c01611cf6565b96505060606122598b828c016121ca565b95505060808901356001600160401b0381111561227557600080fd5b6122818b828c01611e3a565b945094505060a08901356001600160401b0381111561229f57600080fd5b6122ab8b828c01611d80565b92509250509295985092959890939650565b6000806000606084860312156122d257600080fd5b60006122de8686611cf6565b93505060206122ef868287016121ca565b92505060408401356001600160401b0381111561230b57600080fd5b61231786828701611f5f565b9150509250925092565b60006020828403121561233357600080fd5b81516001600160401b0381111561234957600080fd5b6119d384828501611dc8565b60006020828403121561236757600080fd5b60006119d38484611f49565b6000806040838503121561238657600080fd5b60006123928585611fae565b92505060206123a385828601611cf6565b9150509250929050565b6000806000806000806000806000806101008b8d0312156123cd57600080fd5b60006123d98d8d611fae565b9a505060206123ea8d828e01611cf6565b99505060406123fb8d828e01611cf6565b985050606061240c8d828e01611cf6565b97505060808b01356001600160401b0381111561242857600080fd5b6124348d828e01611e3a565b965096505060a08b01356001600160401b0381111561245257600080fd5b61245e8d828e01611d80565b945094505060c06124718d828e016121ca565b92505060e06124828d828e016121ca565b9150509295989b9194979a5092959850565b60008060008060008060008060008060006101608c8e0312156124b657600080fd5b60006124c28e8e611fae565b9b505060206124d38e828f01611fae565b9a505060406124e48e828f016121ca565b99505060608c01356001600160401b0381111561250057600080fd5b61250c8e828f01611d01565b98505060808c01356001600160401b0381111561252857600080fd5b6125348e828f01611f5f565b97505060a08c01356001600160401b0381111561255057600080fd5b61255c8e828f01611ed9565b96505060c08c01356001600160401b0381111561257857600080fd5b6125848e828f01611ed9565b95505060e06125958e828f016121ca565b9450506101006125a78e828f016121ca565b9350506101206125b98e828f016121ca565b9250506101406125cb8e828f01611cf6565b9150509295989b509295989b9093969950565b600080600080608085870312156125f457600080fd5b60006126008787611fae565b945050602061261187828801611fae565b935050604061262287828801611cf6565b92505060608501356001600160401b0381111561263e57600080fd5b61264a87828801611e7c565b91505092959194509250565b60006020828403121561266857600080fd5b60006119d38484611fae565b60006080828403121561268657600080fd5b60006119d38484611fb9565b6000606082840312156126a457600080fd5b60006119d38484612028565b6000602082840312156126c257600080fd5b60006119d38484611f54565b600080604083850312156126e157600080fd5b60006126ed85856121ca565b92505060208301356001600160401b0381111561270957600080fd5b6123a385828601611f5f565b60006119d38484846128ff565b600061272e8383612c7d565b505060600190565b60006127428383612cb4565b9392505050565b60006127428383612e19565b61275e816132d9565b82525050565b61275e816132ac565b6000612779838561321c565b93508360208402850161278b8461320f565b8060005b878110156127cf5784840389526127a68284613234565b6127b1868284612715565b95506127bc84613212565b60209b909b019a9350505060010161278f565b5091979650505050505050565b60006127e782613218565b6127f1818561321c565b93506127fc83613212565b8060005b8381101561282a5781516128148882612722565b975061281f83613212565b925050600101612800565b509495945050505050565b6000612841838561321c565b9350836020840285016128538461320f565b8060005b878110156127cf57848403895261286e828461327c565b6128788582612736565b945061288383613212565b60209a909a0199925050600101612857565b60006128a082613218565b6128aa818561321c565b9350836020820285016128bc85613212565b8060005b858110156127cf57848403895281516128d98582612749565b94506128e483613212565b60209a909a01999250506001016128c0565b61275e8161320f565b600061290b838561321c565b93506129188385846132e4565b6129218361331c565b9093019392505050565b600061293682613218565b612940818561321c565b93506129508185602086016132f0565b6129218161331c565b600061296482613218565b61296e8185611b1c565b935061297e8185602086016132f0565b9290920192915050565b61275e816132bc565b600061299e60108361321c565b6f2ab731b7b6b83932b9b99032b93937b960811b815260200192915050565b60006129ca60188361321c565b7f4465636f6d707265737365642063616c6c206661696c65640000000000000000815260200192915050565b6000612a03601b8361321c565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612a3c60208361321c565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000612a75601e8361321c565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b6000612aae601a8361321c565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000815260200192915050565b6000612ae7601b8361321c565b7f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000815260200192915050565b6000612b2060218361321c565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000612b63602a8361321c565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000612baf60368361321c565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000612c07601f8361321c565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516080830190612c4484826128f6565b506020820151612c5760208501826128f6565b506040820151612c6a60408501826128f6565b50606082015161169c60608501826128f6565b80516060830190612c8e8482612f1c565b506020820151612ca160208501826128f6565b50604082015161169c60408501826128f6565b60006101808301612cc58380613225565b612ccf8582612764565b50612cdd6020840184613225565b612cea6020860182612764565b50612cf86040840184613225565b612d056040860182612764565b50612d136060840184613225565b612d206060860182612764565b50612d2e608084018461329d565b612d3b60808601826128f6565b50612d4960a084018461329d565b612d5660a08601826128f6565b50612d6460c084018461329d565b612d7160c08601826128f6565b50612d7f60e084018461329d565b612d8c60e08601826128f6565b50612d9b61010084018461329d565b612da96101008601826128f6565b50612db861012084018461329d565b612dc66101208601826128f6565b50612dd5610140840184613234565b858303610140870152612de98382846128ff565b92505050612dfb610160840184613234565b858303610160870152612e0f8382846128ff565b9695505050505050565b8051600090610180840190612e2e8582612764565b506020830151612e416020860182612764565b506040830151612e546040860182612764565b506060830151612e676060860182612764565b506080830151612e7a60808601826128f6565b5060a0830151612e8d60a08601826128f6565b5060c0830151612ea060c08601826128f6565b5060e0830151612eb360e08601826128f6565b50610100830151612ec86101008601826128f6565b50610120830151612edd6101208601826128f6565b50610140830151848203610140860152612ef7828261292b565b915050610160830151848203610160860152612f13828261292b565b95945050505050565b61275e816132d3565b60006127428284612959565b602081016116df8284612764565b602081016116df8284612755565b60408101612f5b8285612755565b6127426020830184612764565b60408101612f5b8285612764565b60c08101612f84828b612764565b612f91602083018a612764565b612f9e6040830189612764565b612fab60608301886128f6565b8181036080830152612fbe818688612835565b905081810360a0830152612fd381848661276d565b9a9950505050505050505050565b60408101612fef8285612764565b61274260208301846128f6565b6020808252810161274281846127dc565b602080825281016127428184612895565b60208082528101612742818461292b565b60408082528101613040818561292b565b905061274260208301846128f6565b6080810161305d8287612988565b61306a6020830186612755565b6130776040830185612755565b612f1360608301846128f6565b602081016116df8284612988565b602080825281016116df81612991565b602080825281016116df816129bd565b602080825281016116df816129f6565b602080825281016116df81612a2f565b602080825281016116df81612a68565b602080825281016116df81612aa1565b602080825281016116df81612ada565b602080825281016116df81612b13565b602080825281016116df81612b56565b602080825281016116df81612ba2565b602080825281016116df81612bfa565b608081016116df8284612c33565b602080825281016127428184612cb4565b606080825281016131728187612cb4565b905061318160208301866128f6565b8181036040830152612e0f8184866128ff565b602081016116df82846128f6565b6040518181016001600160401b03811182821017156131c057600080fd5b604052919050565b60006001600160401b038211156131de57600080fd5b5060209081020190565b60006001600160401b038211156131fe57600080fd5b506020601f91909101601f19160190565b90565b60200190565b5190565b90815260200190565b60006127426020840184611cf6565b6000808335601e193685900301811261324c57600080fd5b8381016020810193503591506001600160401b0382111561326c57600080fd5b3682900384131561080c57600080fd5b6000823561017e193684900301811261329457600080fd5b90910192915050565b600061274260208401846121ca565b60006116df826132c7565b151590565b60006116df826132ac565b6001600160a01b031690565b60ff1690565b60006116df826132bc565b82818337506000910152565b60005b8381101561330b5781810151838201526020016132f3565b8381111561169c5750506000910152565b601f01601f191690565b61332f816132ac565b811461333a57600080fd5b50565b61332f816132b7565b61332f8161320f565b61332f816132bc565b61332f816132d356fea365627a7a723058205f017757adc7d06a1de3b03f706efe37a48b19f171c8d9e1d8185bf200d876266c6578706572696d656e74616cf564736f6c634300050a004060806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3610779806100576000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630a5ea4661461005c578063715018a6146100715780638da5cb5b146100795780638f32d59b14610097578063f2fde38b146100ac575b600080fd5b61006f61006a366004610408565b6100bf565b005b61006f61010d565b61008161017b565b60405161008e919061060b565b60405180910390f35b61009f61018a565b60405161008e9190610641565b61006f6100ba3660046103c4565b61019b565b6100c761018a565b6100ec5760405162461bcd60e51b81526004016100e39061066f565b60405180910390fd5b6101076001600160a01b03851684848463ffffffff6101cb16565b50505050565b61011561018a565b6101315760405162461bcd60e51b81526004016100e39061066f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6101a361018a565b6101bf5760405162461bcd60e51b81526004016100e39061066f565b6101c881610226565b50565b6040516101079085906323b872dd60e01b906101ef90879087908790602401610619565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526102a7565b6001600160a01b03811661024c5760405162461bcd60e51b81526004016100e39061064f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6102b9826001600160a01b031661038c565b6102d55760405162461bcd60e51b81526004016100e39061068f565b60006060836001600160a01b0316836040516102f191906105f8565b6000604051808303816000865af19150503d806000811461032e576040519150601f19603f3d011682016040523d82523d6000602084013e610333565b606091505b5091509150816103555760405162461bcd60e51b81526004016100e39061065f565b805115610107578080602001905161037091908101906103ea565b6101075760405162461bcd60e51b81526004016100e39061067f565b3b151590565b803561039d81610707565b92915050565b805161039d8161071b565b803561039d81610724565b803561039d8161072d565b6000602082840312156103d657600080fd5b60006103e28484610392565b949350505050565b6000602082840312156103fc57600080fd5b60006103e284846103a3565b6000806000806080858703121561041e57600080fd5b600061042a87876103ae565b945050602061043b87828801610392565b935050604061044c87828801610392565b925050606061045d878288016103b9565b91505092959194509250565b610472816106b1565b82525050565b610472816106bc565b600061048c8261069f565b61049681856106a3565b93506104a68185602086016106db565b9290920192915050565b60006104bd6026836106a8565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006105056020836106a8565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600061053e6020836106a8565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000610577602a836106a8565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006105c3601f836106a8565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b610472816106d8565b60006106048284610481565b9392505050565b6020810161039d8284610469565b606081016106278286610469565b6106346020830185610469565b6103e260408301846105ef565b6020810161039d8284610478565b6020808252810161039d816104b0565b6020808252810161039d816104f8565b6020808252810161039d81610531565b6020808252810161039d8161056a565b6020808252810161039d816105b6565b5190565b919050565b90815260200190565b600061039d826106cc565b151590565b600061039d826106b1565b6001600160a01b031690565b90565b60005b838110156106f65781810151838201526020016106de565b838111156101075750506000910152565b610710816106b1565b81146101c857600080fd5b610710816106bc565b610710816106c1565b610710816106d856fea365627a7a723058207cc797ef44c5376a9b23d7997bbac46fb1f415ee46dca845024965c9cb1ccfbb6c6578706572696d656e74616cf564736f6c634300050a00400000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000001388
Deployed Bytecode
0x6080604052600436106100865760003560e01c8063ae4dd0fc11610059578063ae4dd0fc1461022d578063c3f719a01461024d578063c9b273591461026d578063e8edc8161461028d578063fcc06f8e146102af57610086565b806371a2039a1461018957806393caed48146101bf57806398fa3c08146101df578063a96c400e1461020d575b3415801561009e57506002546001600160a01b031633145b15610187576001546002546040516001600160a01b03928316929190911690303180156108fc02916000818181858888f193505050501580156100e5573d6000803e3d6000fd5b506002546040516370a0823160e01b8152610185916001600160a01b0390811691908416906370a082319061011e903090600401612f3f565b60206040518083038186803b15801561013657600080fd5b505afa15801561014a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061016e91908101906126b0565b6001600160a01b038416919063ffffffff6102dc16565b505b005b34801561019557600080fd5b506101a96101a43660046125de565b61033a565b6040516101b69190612ffc565b60405180910390f35b6101d26101cd3660046122bd565b6106a9565b6040516101b6919061301e565b3480156101eb57600080fd5b506101ff6101fa3660046126ce565b61076d565b6040516101b692919061302f565b34801561021957600080fd5b506101876102283660046123ad565b610814565b34801561023957600080fd5b50610187610248366004612656565b61093a565b61026061025b366004612494565b610a1e565b6040516101b69190613194565b34801561027957600080fd5b50610187610288366004612373565b611049565b34801561029957600080fd5b506102a2611116565b6040516101b69190613084565b3480156102bb57600080fd5b506102cf6102ca3660046121fe565b611125565b6040516101b69190613142565b60405161033590849063a9059cbb60e01b906102fe9086908690602401612fe1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115b7565b505050565b604051631fa75d3760e21b81526060906001600160a01b03851690637e9d74dc9061036990859060040161300d565b60006040518083038186803b15801561038157600080fd5b505afa158015610395573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103bd9190810190612321565b905060005b81518110156106a0576000866001600160a01b03166370a082318584815181106103e857fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016104109190612f31565b60206040518083038186803b15801561042857600080fd5b505afa15801561043c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061046091908101906126b0565b90506000876001600160a01b031663dd62ed3e86858151811061047f57fe5b602002602001015160000151886040518363ffffffff1660e01b81526004016104a9929190612f68565b60206040518083038186803b1580156104c157600080fd5b505afa1580156104d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104f991908101906126b0565b9050600082821061050a578261050c565b815b9050600061056187868151811061051f57fe5b60200260200101516080015161055589888151811061053a57fe5b602002602001015160a00151856116a290919063ffffffff16565b9063ffffffff6116e516565b905060005b8581101561062e5787868151811061057a57fe5b6020026020010151600001516001600160a01b031688828151811061059b57fe5b6020026020010151600001516001600160a01b031614156106265760006105f98883815181106105c757fe5b6020026020010151604001518a84815181106105df57fe5b602002602001015160a0015161171a90919063ffffffff16565b90508083111561061a57610613838263ffffffff61171a16565b9250610624565b600092505061062e565b505b600101610566565b50600061065887878151811061064057fe5b6020026020010151604001518988815181106105df57fe5b90508082101561068f57610672828988815181106105df57fe5b87878151811061067e57fe5b602002602001015160400181815250505b5050600190930192506103c2915050565b50949350505050565b60608060006106b8858561076d565b915091508481146106e45760405162461bcd60e51b81526004016106db90613092565b60405180910390fd5b6000866001600160a01b031634846040516106ff9190612f25565b60006040518083038185875af1925050503d806000811461073c576040519150601f19603f3d011682016040523d82523d6000602084013e610741565b606091505b5094509050806107635760405162461bcd60e51b81526004016106db906130a2565b5050509392505050565b60606000836040519080825280601f01601f19166020018201604052801561079c576020820181803883390190505b50915060005b835181101561080c5760008482815181106107b957fe5b602001015160f81c60f81b60f81c607f1660ff1690508482815181106107db57fe5b0160200151600160ff1b166107ff576107fa8484878560010185611742565b908101905b91909101906001016107a2565b509250929050565b60006108a682610555858e6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161084a9190612f3f565b60206040518083038186803b15801561086257600080fd5b505afa158015610876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061089a91908101906126b0565b9063ffffffff6116a216565b604051637e6037c760e11b8152909150309063fcc06f8e906108da908d908d908d9087908e908e908e908e90600401612f76565b608060405180830381600087803b1580156108f457600080fd5b505af1158015610908573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061092c9190810190612674565b505050505050505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610969903090600401612f3f565b60206040518083038186803b15801561098157600080fd5b505afa158015610995573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109b991908101906126b0565b604051632e1a7d4d60e01b81529091506001600160a01b03831690632e1a7d4d906109e8908490600401613194565b600060405180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050505050565b60005a6001546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190610a57903090600401612f3f565b60206040518083038186803b158015610a6f57600080fd5b505afa158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aa791908101906126b0565b905087518a5160010114610aba57600080fd5b6001600160a01b038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610b57576000809054906101000a90046001600160a01b03166001600160a01b0316630a5ea4668e32308f6040518563ffffffff1660e01b8152600401610b24949392919061304f565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b505050505b60005b6001895103811015610d3f576000898281518110610b7457fe5b60200260200101518a8360010181518110610b8b57fe5b6020026020010151031115610d37578851600560f91b908b908b9084908110610bb057fe5b602002602001015160000181518110610bc557fe5b01602001516001600160f81b031916141580610c1957508851602f60f91b908b908b9084908110610bf257fe5b602002602001015160010181518110610c0757fe5b01602001516001600160f81b03191614155b80610c5c57508851602960fa1b908b908b9084908110610c3557fe5b602002602001015160020181518110610c4a57fe5b01602001516001600160f81b03191614155b80610c9f57508851603360f91b908b908b9084908110610c7857fe5b602002602001015160030181518110610c8d57fe5b01602001516001600160f81b03191614155b610ca857600080fd5b610d2e888281518110610cb757fe5b60200260200101518b8b8481518110610ccc57fe5b60200260200101518c8581518110610ce057fe5b60200260200101518d8660010181518110610cf757fe5b6020026020010151038f8681518110610d0c57fe5b60200260200101516001600160a01b031661179790949392919063ffffffff16565b610d3757600080fd5b600101610b5a565b506001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610d70903090600401612f3f565b60206040518083038186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dc091908101906126b0565b8114610dcb57600080fd5b8515610ddd57610ddb82876117bb565b505b610de78c3061183d565b915084821015610e095760405162461bcd60e51b81526004016106db906130f2565b8382111561102b576000610e3261271061055560035461089a898861171a90919063ffffffff16565b90506064610e4c846105558461271063ffffffff6116a216565b1115610e6657610e6383606463ffffffff6116e516565b90505b6001600160a01b03841615801590610e8757506001600160a01b0384163214155b8015610e9c57506001600160a01b0384163214155b15610faa57610ebe8d85610eb784600a63ffffffff6116e516565b600161190a565b15610f5857610ee4610ed782600a63ffffffff6116e516565b849063ffffffff61171a16565b92506001600160a01b03808516908e167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf610f2684600a63ffffffff6116e516565b604051610f339190613194565b60405180910390a3610f51600a61055583600963ffffffff6116a216565b9050610fa5565b60006001600160a01b03168d6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf83604051610f9c9190613194565b60405180910390a35b610ff7565b60006001600160a01b03168d6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf83604051610fee9190613194565b60405180910390a35b600254611011908e906001600160a01b031683600161190a565b1561102957611026838263ffffffff61171a16565b92505b505b6110388c3284600061190a565b50509b9a5050505050505050505050565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906110f15750604051636eb1769f60e11b81526001600160a01b0383169063dd62ed3e9061109f9030908590600401612f4d565b60206040518083038186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110ef91908101906126b0565b155b15611112576111126001600160a01b0383168260001963ffffffff6119db16565b5050565b6000546001600160a01b031681565b61112d611cae565b60005b848110156115aa5786826020015110611148576115aa565b600061116183602001518961171a90919063ffffffff16565b905061116b611cd6565b8a6001600160a01b031663c75e0a8189898681811061118657fe5b60200282019050803561017e19368490030181126111a357600080fd5b6040516001600160e01b031960e086901b1681526111c8939091019150600401613150565b60606040518083038186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112189190810190612692565b9050600061125c82604001518a8a8781811061123057fe5b60200282019050803561017e193684900301811261124d57600080fd5b90910160a0013591905061171a565b905060008d6001600160a01b03166370a082318b8b8881811061127b57fe5b60200282019050803561017e193684900301811261129857600080fd5b6112a892016020810191506121e0565b6040518263ffffffff1660e01b81526004016112c49190612f31565b602060405180830381600087803b1580156112de57600080fd5b505af11580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061131691908101906126b0565b905060008e6001600160a01b031663dd62ed3e8c8c8981811061133557fe5b60200282019050803561017e193684900301811261135257600080fd5b61136292016020810191506121e0565b8f6040518363ffffffff1660e01b8152600401611380929190612f68565b602060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113d291908101906126b0565b905060008282106113e357826113e5565b815b9050600061145a8d8d8a8181106113f857fe5b60200282019050803561017e193684900301811261141557600080fd5b80830192505050608001356105558f8f8c81811061142f57fe5b60200282019050803561017e193684900301811261144c57600080fd5b87920160a0013590506116a2565b905084811015611468578094505b50505050600083821061147b578361147d565b815b9050611487611cae565b8d6001600160a01b0316633e228bae8c8c898181106114a257fe5b60200282019050803561017e19368490030181126114bf57600080fd5b919091019050848c8c8b8181106114d257fe5b602002820190508035601e19368490030181126114ee57600080fd5b909101602081019150356001600160401b0381111561150c57600080fd5b3681900382131561151c57600080fd5b6040518563ffffffff1660e01b815260040161153b9493929190613161565b608060405180830381600087803b15801561155557600080fd5b505af1158015611569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061158d9190810190612674565b90506115998782611aa1565b505060019093019250611130915050565b5098975050505050505050565b6115c9826001600160a01b0316611b17565b6115e55760405162461bcd60e51b81526004016106db90613132565b60006060836001600160a01b0316836040516116019190612f25565b6000604051808303816000865af19150503d806000811461163e576040519150601f19603f3d011682016040523d82523d6000602084013e611643565b606091505b5091509150816116655760405162461bcd60e51b81526004016106db906130c2565b80511561169c57808060200190516116809190810190612355565b61169c5760405162461bcd60e51b81526004016106db90613112565b50505050565b6000826116b1575060006116df565b828202828482816116be57fe5b04146116dc5760405162461bcd60e51b81526004016106db90613102565b90505b92915050565b60008082116117065760405162461bcd60e51b81526004016106db906130e2565b600082848161171157fe5b04949350505050565b60008282111561173c5760405162461bcd60e51b81526004016106db906130d2565b50900390565b6020938501840193918301820191601f821690036101000a600019015b601f821115611782578251855260209485019490920191601f199091019061175f565b91518451831692191691909117909252505050565b600060405160208501600082858784018a8c6187965a03f198975050505050505050565b6000617dfe618ebf61374a611ad6615dc08561a0aa845a8b0301816117dc57fe5b0490508181028582028701848302860160003a8083028d850201906064908602028161180457fe5b049050606481111561182a5761181985611b21565b9a50505050505050505050506116df565b60009a50505050505050505050506116df565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148061187157506001600160a01b038316155b1561188757506001600160a01b038116316116df565b6040516370a0823160e01b81526001600160a01b038416906370a08231906118b3908590600401612f31565b60206040518083038186803b1580156118cb57600080fd5b505afa1580156118df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061190391908101906126b0565b90506116df565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148061193e57506001600160a01b038516155b156119b5578115611975576040516001600160a01b0385169084156108fc029085906000818181858888f1935050505090506119d3565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156119ab573d6000803e3d6000fd5b50600190506119d3565b6119cf6001600160a01b038616858563ffffffff6102dc16565b5060015b949350505050565b801580611a635750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90611a119030908690600401612f68565b60206040518083038186803b158015611a2957600080fd5b505afa158015611a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a6191908101906126b0565b155b611a7f5760405162461bcd60e51b81526004016106db90613122565b60405161033590849063095ea7b360e01b906102fe9086908690602401612fe1565b80518251611ab49163ffffffff611c8916565b825260208082015190830151611acf9163ffffffff611c8916565b602083015260408082015190830151611aed9163ffffffff611c8916565b604083015260608082015190830151611b0b9163ffffffff611c8916565b60609092019190915250565b803b15155b919050565b60008115611c81576000805a9050616c3e8110611b4557611b6c616c3d1982010491505b81841115611b51578193505b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611b82903090600401612f3f565b60206040518083038186803b158015611b9a57600080fd5b505afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611bd291908101906126b0565b9050600085118015611be45750848110155b15611c75576001546040516331b35c9b60e11b81526001600160a01b0390911690636366b93690611c19908890600401613194565b602060405180830381600087803b158015611c3357600080fd5b505af1158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c6b91908101906126b0565b9350505050611b1c565b60009350505050611b1c565b506000611b1c565b6000828201838110156116dc5760405162461bcd60e51b81526004016106db906130b2565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b80356116df81613326565b600082601f830112611d1257600080fd5b8135611d25611d20826131c8565b6131a2565b91508181835260208401935060208101905083856020840282011115611d4a57600080fd5b60005b83811015611d765781611d608882611cf6565b8452506020928301929190910190600101611d4d565b5050505092915050565b60008083601f840112611d9257600080fd5b5081356001600160401b03811115611da957600080fd5b602083019150836020820283011115611dc157600080fd5b9250929050565b600082601f830112611dd957600080fd5b8151611de7611d20826131c8565b91508181835260208401935060208101905083856060840282011115611e0c57600080fd5b60005b83811015611d765781611e228882612028565b84525060209092019160609190910190600101611e0f565b60008083601f840112611e4c57600080fd5b5081356001600160401b03811115611e6357600080fd5b60208301915083610180820283011115611dc157600080fd5b600082601f830112611e8d57600080fd5b8135611e9b611d20826131c8565b81815260209384019390925082018360005b83811015611d765781358601611ec38882612083565b8452506020928301929190910190600101611ead565b600082601f830112611eea57600080fd5b8135611ef8611d20826131c8565b91508181835260208401935060208101905083856020840282011115611f1d57600080fd5b60005b83811015611d765781611f3388826121ca565b8452506020928301929190910190600101611f20565b80516116df8161333d565b80516116df81613346565b600082601f830112611f7057600080fd5b8135611f7e611d20826131e8565b91508082526020830160208301858383011115611f9a57600080fd5b611fa58382846132e4565b50505092915050565b80356116df8161334f565b600060808284031215611fcb57600080fd5b611fd560806131a2565b90506000611fe38484611f54565b8252506020611ff484848301611f54565b602083015250604061200884828501611f54565b604083015250606061201c84828501611f54565b60608301525092915050565b60006060828403121561203a57600080fd5b61204460606131a2565b9050600061205284846121d5565b825250602061206384848301611f54565b602083015250604061207784828501611f54565b60408301525092915050565b6000610180828403121561209657600080fd5b6120a16101806131a2565b905060006120af8484611cf6565b82525060206120c084848301611cf6565b60208301525060406120d484828501611cf6565b60408301525060606120e884828501611cf6565b60608301525060806120fc848285016121ca565b60808301525060a0612110848285016121ca565b60a08301525060c0612124848285016121ca565b60c08301525060e0612138848285016121ca565b60e08301525061010061214d848285016121ca565b61010083015250610120612163848285016121ca565b610120830152506101408201356001600160401b0381111561218457600080fd5b61219084828501611f5f565b610140830152506101608201356001600160401b038111156121b157600080fd5b6121bd84828501611f5f565b6101608301525092915050565b80356116df81613346565b80516116df81613358565b6000602082840312156121f257600080fd5b60006119d38484611cf6565b60008060008060008060008060c0898b03121561221a57600080fd5b60006122268b8b611cf6565b98505060206122378b828c01611cf6565b97505060406122488b828c01611cf6565b96505060606122598b828c016121ca565b95505060808901356001600160401b0381111561227557600080fd5b6122818b828c01611e3a565b945094505060a08901356001600160401b0381111561229f57600080fd5b6122ab8b828c01611d80565b92509250509295985092959890939650565b6000806000606084860312156122d257600080fd5b60006122de8686611cf6565b93505060206122ef868287016121ca565b92505060408401356001600160401b0381111561230b57600080fd5b61231786828701611f5f565b9150509250925092565b60006020828403121561233357600080fd5b81516001600160401b0381111561234957600080fd5b6119d384828501611dc8565b60006020828403121561236757600080fd5b60006119d38484611f49565b6000806040838503121561238657600080fd5b60006123928585611fae565b92505060206123a385828601611cf6565b9150509250929050565b6000806000806000806000806000806101008b8d0312156123cd57600080fd5b60006123d98d8d611fae565b9a505060206123ea8d828e01611cf6565b99505060406123fb8d828e01611cf6565b985050606061240c8d828e01611cf6565b97505060808b01356001600160401b0381111561242857600080fd5b6124348d828e01611e3a565b965096505060a08b01356001600160401b0381111561245257600080fd5b61245e8d828e01611d80565b945094505060c06124718d828e016121ca565b92505060e06124828d828e016121ca565b9150509295989b9194979a5092959850565b60008060008060008060008060008060006101608c8e0312156124b657600080fd5b60006124c28e8e611fae565b9b505060206124d38e828f01611fae565b9a505060406124e48e828f016121ca565b99505060608c01356001600160401b0381111561250057600080fd5b61250c8e828f01611d01565b98505060808c01356001600160401b0381111561252857600080fd5b6125348e828f01611f5f565b97505060a08c01356001600160401b0381111561255057600080fd5b61255c8e828f01611ed9565b96505060c08c01356001600160401b0381111561257857600080fd5b6125848e828f01611ed9565b95505060e06125958e828f016121ca565b9450506101006125a78e828f016121ca565b9350506101206125b98e828f016121ca565b9250506101406125cb8e828f01611cf6565b9150509295989b509295989b9093969950565b600080600080608085870312156125f457600080fd5b60006126008787611fae565b945050602061261187828801611fae565b935050604061262287828801611cf6565b92505060608501356001600160401b0381111561263e57600080fd5b61264a87828801611e7c565b91505092959194509250565b60006020828403121561266857600080fd5b60006119d38484611fae565b60006080828403121561268657600080fd5b60006119d38484611fb9565b6000606082840312156126a457600080fd5b60006119d38484612028565b6000602082840312156126c257600080fd5b60006119d38484611f54565b600080604083850312156126e157600080fd5b60006126ed85856121ca565b92505060208301356001600160401b0381111561270957600080fd5b6123a385828601611f5f565b60006119d38484846128ff565b600061272e8383612c7d565b505060600190565b60006127428383612cb4565b9392505050565b60006127428383612e19565b61275e816132d9565b82525050565b61275e816132ac565b6000612779838561321c565b93508360208402850161278b8461320f565b8060005b878110156127cf5784840389526127a68284613234565b6127b1868284612715565b95506127bc84613212565b60209b909b019a9350505060010161278f565b5091979650505050505050565b60006127e782613218565b6127f1818561321c565b93506127fc83613212565b8060005b8381101561282a5781516128148882612722565b975061281f83613212565b925050600101612800565b509495945050505050565b6000612841838561321c565b9350836020840285016128538461320f565b8060005b878110156127cf57848403895261286e828461327c565b6128788582612736565b945061288383613212565b60209a909a0199925050600101612857565b60006128a082613218565b6128aa818561321c565b9350836020820285016128bc85613212565b8060005b858110156127cf57848403895281516128d98582612749565b94506128e483613212565b60209a909a01999250506001016128c0565b61275e8161320f565b600061290b838561321c565b93506129188385846132e4565b6129218361331c565b9093019392505050565b600061293682613218565b612940818561321c565b93506129508185602086016132f0565b6129218161331c565b600061296482613218565b61296e8185611b1c565b935061297e8185602086016132f0565b9290920192915050565b61275e816132bc565b600061299e60108361321c565b6f2ab731b7b6b83932b9b99032b93937b960811b815260200192915050565b60006129ca60188361321c565b7f4465636f6d707265737365642063616c6c206661696c65640000000000000000815260200192915050565b6000612a03601b8361321c565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612a3c60208361321c565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000612a75601e8361321c565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b6000612aae601a8361321c565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000815260200192915050565b6000612ae7601b8361321c565b7f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000815260200192915050565b6000612b2060218361321c565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b6000612b63602a8361321c565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000612baf60368361321c565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000612c07601f8361321c565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b80516080830190612c4484826128f6565b506020820151612c5760208501826128f6565b506040820151612c6a60408501826128f6565b50606082015161169c60608501826128f6565b80516060830190612c8e8482612f1c565b506020820151612ca160208501826128f6565b50604082015161169c60408501826128f6565b60006101808301612cc58380613225565b612ccf8582612764565b50612cdd6020840184613225565b612cea6020860182612764565b50612cf86040840184613225565b612d056040860182612764565b50612d136060840184613225565b612d206060860182612764565b50612d2e608084018461329d565b612d3b60808601826128f6565b50612d4960a084018461329d565b612d5660a08601826128f6565b50612d6460c084018461329d565b612d7160c08601826128f6565b50612d7f60e084018461329d565b612d8c60e08601826128f6565b50612d9b61010084018461329d565b612da96101008601826128f6565b50612db861012084018461329d565b612dc66101208601826128f6565b50612dd5610140840184613234565b858303610140870152612de98382846128ff565b92505050612dfb610160840184613234565b858303610160870152612e0f8382846128ff565b9695505050505050565b8051600090610180840190612e2e8582612764565b506020830151612e416020860182612764565b506040830151612e546040860182612764565b506060830151612e676060860182612764565b506080830151612e7a60808601826128f6565b5060a0830151612e8d60a08601826128f6565b5060c0830151612ea060c08601826128f6565b5060e0830151612eb360e08601826128f6565b50610100830151612ec86101008601826128f6565b50610120830151612edd6101208601826128f6565b50610140830151848203610140860152612ef7828261292b565b915050610160830151848203610160860152612f13828261292b565b95945050505050565b61275e816132d3565b60006127428284612959565b602081016116df8284612764565b602081016116df8284612755565b60408101612f5b8285612755565b6127426020830184612764565b60408101612f5b8285612764565b60c08101612f84828b612764565b612f91602083018a612764565b612f9e6040830189612764565b612fab60608301886128f6565b8181036080830152612fbe818688612835565b905081810360a0830152612fd381848661276d565b9a9950505050505050505050565b60408101612fef8285612764565b61274260208301846128f6565b6020808252810161274281846127dc565b602080825281016127428184612895565b60208082528101612742818461292b565b60408082528101613040818561292b565b905061274260208301846128f6565b6080810161305d8287612988565b61306a6020830186612755565b6130776040830185612755565b612f1360608301846128f6565b602081016116df8284612988565b602080825281016116df81612991565b602080825281016116df816129bd565b602080825281016116df816129f6565b602080825281016116df81612a2f565b602080825281016116df81612a68565b602080825281016116df81612aa1565b602080825281016116df81612ada565b602080825281016116df81612b13565b602080825281016116df81612b56565b602080825281016116df81612ba2565b602080825281016116df81612bfa565b608081016116df8284612c33565b602080825281016127428184612cb4565b606080825281016131728187612cb4565b905061318160208301866128f6565b8181036040830152612e0f8184866128ff565b602081016116df82846128f6565b6040518181016001600160401b03811182821017156131c057600080fd5b604052919050565b60006001600160401b038211156131de57600080fd5b5060209081020190565b60006001600160401b038211156131fe57600080fd5b506020601f91909101601f19160190565b90565b60200190565b5190565b90815260200190565b60006127426020840184611cf6565b6000808335601e193685900301811261324c57600080fd5b8381016020810193503591506001600160401b0382111561326c57600080fd5b3682900384131561080c57600080fd5b6000823561017e193684900301811261329457600080fd5b90910192915050565b600061274260208401846121ca565b60006116df826132c7565b151590565b60006116df826132ac565b6001600160a01b031690565b60ff1690565b60006116df826132bc565b82818337506000910152565b60005b8381101561330b5781810151838201526020016132f3565b8381111561169c5750506000910152565b601f01601f191690565b61332f816132ac565b811461333a57600080fd5b50565b61332f816132b7565b61332f8161320f565b61332f816132bc565b61332f816132d356fea365627a7a723058205f017757adc7d06a1de3b03f706efe37a48b19f171c8d9e1d8185bf200d876266c6578706572696d656e74616cf564736f6c634300050a0040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000001388
-----Decoded View---------------
Arg [0] : _owner (address): 0x4D37f28D2db99e8d35A6C725a5f1749A085850a3
Arg [1] : _gasToken (address): 0x0000000000b3F879cb30FE243b4Dfee438691c04
Arg [2] : _fee (uint256): 5000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a3
Arg [1] : 0000000000000000000000000000000000b3f879cb30fe243b4dfee438691c04
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001388
Deployed Bytecode Sourcemap
24070:9265:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31262:9;:14;:37;;;;-1:-1:-1;31294:5:0;;-1:-1:-1;;;;;31294:5:0;31280:10;:19;31262:37;31258:250;;;31352:8;;31379:5;;:37;;-1:-1:-1;;;;;31352:8:0;;;;31379:5;;;;;31402:4;31394:21;31379:37;;;;;31318:16;31379:37;31318:16;31379:37;31394:21;31379:5;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;31454:5:0;;31461:34;;-1:-1:-1;;;31461:34:0;;31431:65;;-1:-1:-1;;;;;31454:5:0;;;;31461:19;;;;;;:34;;31489:4;;31461:34;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31461:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31461:34: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;31461:34:0;;;;;;;;;-1:-1:-1;;;;;31431:22:0;;;:65;;:22;:65;:::i;:::-;31258:250;;24070:9265;31523:1809;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31523:1809:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4997:508;;;;;;;;;:::i;:::-;;;;;;;;5513:556;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5513:556:0;;;;;;;;:::i;:::-;;;;;;;;;28300:493;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28300:493:0;;;;;;;;:::i;28145:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28145:147:0;;;;;;;;:::i;24991:2876::-;;;;;;;;;:::i;:::-;;;;;;;;27875:262;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27875:262:0;;;;;;;;:::i;24328:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24328:27:0;;;:::i;:::-;;;;;;;;21167:2197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21167:2197:0;;;;;;;;:::i;:::-;;;;;;;;17351:176;17460:58;;17434:85;;17453:5;;-1:-1:-1;;;17483:23:0;17460:58;;17508:2;;17512:5;;17460:58;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;17460:58:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;17460:58:0;;;179:29:-1;;;;160:49;;;17434:18:0;:85::i;:::-;17351:176;;;:::o;31523:1809::-;31832:25;;-1:-1:-1;;;31832:25:0;;31759:42;;-1:-1:-1;;;;;31832:17:0;;;;;:25;;31850:6;;31832:25;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31832:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31832:25:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;31832:25:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;31832:25:0;;;;;;;;;31819:38;-1:-1:-1;31875:6:0;31870:1455;31891:10;:17;31887:1;:21;31870:1455;;;31932:15;31950:5;-1:-1:-1;;;;;31950:15:0;;31966:6;31973:1;31966:9;;;;;;;;;;;;;;:22;;;31950:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31950:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31950: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;31950:39:0;;;;;;;;;31932:57;;32004:17;32024:5;-1:-1:-1;;;;;32024:15:0;;32040:6;32047:1;32040:9;;;;;;;;;;;;;;:22;;;32064:13;32024:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32024:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32024:54: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;32024:54:0;;;;;;;;;32004:74;;32093:28;32137:7;32125:9;:19;32124:43;;32160:7;32124:43;;;32148:9;32124:43;32093:74;;32182:28;32213:84;32270:6;32277:1;32270:9;;;;;;;;;;;;;;:26;;;32213:52;32238:6;32245:1;32238:9;;;;;;;;;;;;;;:26;;;32213:20;:24;;:52;;;;:::i;:::-;:56;:84;:56;:84;:::i;:::-;32182:115;-1:-1:-1;32319:6:0;32314:649;32335:1;32331;:5;32314:649;;;32394:6;32401:1;32394:9;;;;;;;;;;;;;;:22;;;-1:-1:-1;;;;;32368:48:0;:6;32375:1;32368:9;;;;;;;;;;;;;;:22;;;-1:-1:-1;;;;;32368:48:0;;32364:584;;;32443:37;32483:121;32540:10;32551:1;32540:13;;;;;;;;;;;;;;:41;;;32483:6;32490:1;32483:9;;;;;;;;;;;;;;:26;;;:30;;:121;;;;:::i;:::-;32443:161;;32656:29;32633:20;:52;32629:300;;;32737:55;:20;32762:29;32737:55;:24;:55;:::i;:::-;32714:78;;32629:300;;;32872:1;32849:24;;32900:5;;;32629:300;32364:584;;32338:3;;32314:649;;;;32979:28;33010:105;33059:10;33070:1;33059:13;;;;;;;;;;;;;;:41;;;33010:6;33017:1;33010:9;;;;;;;:105;32979:136;;33159:20;33136;:43;33132:182;;;33246:52;33277:20;33246:6;33253:1;33246:9;;;;;;;:52;33202:10;33213:1;33202:13;;;;;;;;;;;;;;:41;;:96;;;;;33132:182;-1:-1:-1;;31910:3:0;;;;;-1:-1:-1;31870:1455:0;;-1:-1:-1;;31870:1455:0;;;31523:1809;;;;;;:::o;4997:508::-;5164:19;5202:17;5221:23;5248:31;5259:11;5272:6;5248:10;:31::i;:::-;5201:78;;;;5320:11;5298:18;:33;5290:62;;;;-1:-1:-1;;;5290:62:0;;;;;;;;;;;;;;;;;5365:12;5408:6;-1:-1:-1;;;;;5408:11:0;5426:9;5437:4;5408:34;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;5388:54:0;-1:-1:-1;5388:54:0;-1:-1:-1;5388:54:0;5453:44;;;;-1:-1:-1;;;5453:44:0;;;;;;;;;4997:508;;;;;;;;:::o;5513:556::-;5662:17;5694:13;5752:11;5742:22;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;5742:22:0;87:34:-1;135:17;;-1:-1;5742:22:0;-1:-1:-1;5735:29:0;-1:-1:-1;5782:6:0;5777:285;5798:6;:13;5794:1;:17;5777:285;;;5835:8;5857:6;5864:1;5857:9;;;;;;;;;;;;;;;;5851:16;;5870:4;5851:23;5846:29;;5835:40;;5897:6;5904:1;5897:9;;;;;;;;;;;;-1:-1:-1;;;5897:16:0;5892:130;;5940:39;5947:4;5953:5;5960:6;5968:1;5972;5968:5;5975:3;5940:6;:39::i;:::-;5998:8;;;;5892:130;6038:12;;;;;5813:3;;5777:285;;;;5513:556;;;;;:::o;28300:493::-;28618:14;28635:52;28683:3;28635:43;28674:3;28635:9;-1:-1:-1;;;;;28635:19:0;;28663:4;28635:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28635:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28635:34: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;28635:34:0;;;;;;;;;:38;:43;:38;:43;:::i;:52::-;28698:87;;-1:-1:-1;;;28698:87:0;;28618:69;;-1:-1:-1;28698:4:0;;:21;;:87;;28720:8;;28730:11;;28743:13;;28618:69;;28766:6;;;;28774:10;;;;28698:87;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28698:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28698:87: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;28698:87:0;;;;;;;;;;28300:493;;;;;;;;;;;:::o;28145:147::-;28221:30;;-1:-1:-1;;;28221:30:0;;28204:14;;-1:-1:-1;;;;;28221:15:0;;;;;:30;;28245:4;;28221:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28221:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28221:30: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;28221:30:0;;;;;;;;;28262:22;;-1:-1:-1;;;28262:22:0;;28204:47;;-1:-1:-1;;;;;;28262:14:0;;;;;:22;;28204:47;;28262:22;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28262:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28262:22:0;;;;28145:147;;:::o;24991:2876::-;25403:17;25453:9;25496:8;;:33;;-1:-1:-1;;;25496:33:0;;25438:24;;-1:-1:-1;25473:20:0;;-1:-1:-1;;;;;25496:8:0;;;;:18;;:33;;25523:4;;25496:33;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25496:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25496:33: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;25496:33:0;;;;;;;;;25473:56;;25578:6;:13;25550;:20;25573:1;25550:24;:41;25542:50;;;;;;-1:-1:-1;;;;;25609:33:0;;24277:42;25609:33;25605:138;;25661:7;;;;;;;;;-1:-1:-1;;;;;25661:7:0;-1:-1:-1;;;;;25661:19:0;;25681:9;25692;25711:4;25718:12;25661:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25661:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25661:70:0;;;;25605:138;25760:6;25755:647;25792:1;25776:6;:13;:17;25772:1;:21;25755:647;;;25849:1;25837:6;25844:1;25837:9;;;;;;;;;;;;;;25821:6;25828:1;25832;25828:5;25821:13;;;;;;;;;;;;;;:25;:29;25817:574;;;25918:9;;-1:-1:-1;;;25936:31:0;25903:14;;25918:6;;25925:1;;25918:9;;;;;;;;;;;;25930:1;25918:13;25903:29;;;;;;;;;;;;-1:-1:-1;;;;;;25903:29:0;:64;;;:153;;-1:-1:-1;26007:9:0;;-1:-1:-1;;;26025:31:0;25992:14;;26007:6;;26014:1;;26007:9;;;;;;;;;;;;26019:1;26007:13;25992:29;;;;;;;;;;;;-1:-1:-1;;;;;;25992:29:0;:64;;25903:153;:242;;;-1:-1:-1;26096:9:0;;-1:-1:-1;;;26114:31:0;26081:14;;26096:6;;26103:1;;26096:9;;;;;;;;;;;;26108:1;26096:13;26081:29;;;;;;;;;;;;-1:-1:-1;;;;;;26081:29:0;:64;;25903:242;:331;;;-1:-1:-1;26185:9:0;;-1:-1:-1;;;26203:31:0;26170:14;;26185:6;;26192:1;;26185:9;;;;;;;;;;;;26197:1;26185:13;26170:29;;;;;;;;;;;;-1:-1:-1;;;;;;26170:29:0;:64;;25903:331;25873:380;;;;;;26280:94;26310:6;26317:1;26310:9;;;;;;;;;;;;;;26321:14;26337:6;26344:1;26337:9;;;;;;;;;;;;;;26364:6;26371:1;26364:9;;;;;;;;;;;;;;26348:6;26355:1;26359;26355:5;26348:13;;;;;;;;;;;;;;:25;26280:13;26294:1;26280:16;;;;;;;;;;;;;;-1:-1:-1;;;;;26280:29:0;;;:94;;;;;;;:::i;:::-;26272:103;;;;;;25795:3;;25755:647;;;-1:-1:-1;26455:8:0;;:33;;-1:-1:-1;;;26455:33:0;;-1:-1:-1;;;;;26455:8:0;;;;:18;;:33;;26482:4;;26455:33;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26455:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26455:33: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;26455:33:0;;;;;;;;;26436:15;:52;26428:61;;;;;;26504:16;;26500:90;;26537:41;26551:12;26565;26537:13;:41::i;:::-;;26500:90;26631:34;26642:7;26659:4;26631:10;:34::i;:::-;26616:49;;26700:15;26684:12;:31;;26676:71;;;;-1:-1:-1;;;26676:71:0;;;;;;;;;26779:16;26764:12;:31;26760:1037;;;26814:14;26831:54;26879:5;26831:43;26870:3;;26831:34;26848:16;26831:12;:16;;:34;;;;:::i;:54::-;26814:71;-1:-1:-1;26947:3:0;26906:38;26931:12;26906:20;26814:71;26920:5;26906:20;:13;:20;:::i;:38::-;:44;26902:132;;;26991:21;:12;27008:3;26991:21;:16;:21;:::i;:::-;26979:33;;26902:132;-1:-1:-1;;;;;27054:22:0;;;;;;:47;;-1:-1:-1;;;;;;27080:21:0;;27092:9;27080:21;;27054:47;:72;;;;-1:-1:-1;;;;;;27105:21:0;;27117:9;27105:21;;27054:72;27050:595;;;27151:53;27161:7;27170:8;27180:17;:9;27194:2;27180:17;:13;:17;:::i;:::-;27199:4;27151:9;:53::i;:::-;27147:391;;;27244:35;27261:17;:9;27275:2;27261:17;:13;:17;:::i;:::-;27244:12;;:35;:16;:35;:::i;:::-;27229:50;-1:-1:-1;;;;;;27307:52:0;;;;;;;27341:17;:9;27355:2;27341:17;:13;:17;:::i;:::-;27307:52;;;;;;;;;;;;;;;27394:24;27415:2;27394:16;:9;27408:1;27394:16;:13;:16;:::i;:24::-;27382:36;;27147:391;;;27504:1;-1:-1:-1;;;;;27472:46:0;27487:7;-1:-1:-1;;;;;27472:46:0;;27508:9;27472:46;;;;;;;;;;;;;;;27147:391;27050:595;;;27615:1;-1:-1:-1;;;;;27583:46:0;27598:7;-1:-1:-1;;;;;27583:46:0;;27619:9;27583:46;;;;;;;;;;;;;;;27050:595;27684:5;;27665:42;;27675:7;;-1:-1:-1;;;;;27684:5:0;27691:9;27684:5;27665:9;:42::i;:::-;27661:125;;;27743:27;:12;27760:9;27743:27;:16;:27;:::i;:::-;27728:42;;27661:125;26760:1037;;27809:50;27819:7;27828:9;27839:12;27853:5;27809:9;:50::i;:::-;;24991:2876;;;;;;;;;;;;;;:::o;27875:262::-;-1:-1:-1;;;;;27972:29:0;;24277:42;27972:29;;;;:85;;-1:-1:-1;28018:34:0;;-1:-1:-1;;;28018:34:0;;-1:-1:-1;;;;;28018:15:0;;;;;:34;;28042:4;;28049:2;;28018:34;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28018:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28018:34: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;28018:34:0;;;;;;;;;:39;27972:85;27954:176;;;28084:34;-1:-1:-1;;;;;28084:17:0;;28102:2;-1:-1:-1;;28084:34:0;:17;:34;:::i;:::-;27875:262;;:::o;24328:27::-;;;-1:-1:-1;;;;;24328:27:0;;:::o;21167:2197::-;21451:48;;:::i;:::-;21522:6;21517:1804;21534:17;;;21517:1804;;;21702:20;21659:16;:39;;;:63;21655:109;;21743:5;;21655:109;21849:28;21880:65;21905:16;:39;;;21880:20;:24;;:65;;;;:::i;:::-;21849:96;;21962:39;;:::i;:::-;22017:11;-1:-1:-1;;;;;22004:38:0;;22043:6;;22050:1;22043:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;22004:49:0;;-1:-1:-1;;;;;;22004:49:0;;;;;;;;;175:33:-1;;;;-1:-1;22004:49:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22004:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22004:49: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;22004:49:0;;;;;;;;;21962:91;;22068:33;22104:69;22135:9;:37;;;22104:6;;22111:1;22104:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;175:33;;;22104:26:0;;;;;-1:-1:-1;22104:30:0;:69::i;:::-;22068:105;;22300:15;22332:10;-1:-1:-1;;;;;22318:35:0;;22354:6;;22361:1;22354:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;22354:22:0;;175:33:-1;22354:22:0;;;;-1:-1:-1;22354:22:0;;;22318:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22318:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22318:59: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;22318:59:0;;;;;;;;;22300:77;;22396:17;22430:10;-1:-1:-1;;;;;22416:35:0;;22452:6;;22459:1;22452:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;22452:22:0;;175:33:-1;22452:22:0;;;;-1:-1:-1;22452:22:0;;;22476:13;22416:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22416:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22416:74: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;22416:74:0;;;;;;;;;22396:94;;22509:28;22553:7;22541:9;:19;22540:43;;22576:7;22540:43;;;22564:9;22540:43;22509:74;;22602:28;22633:84;22690:6;;22697:1;22690:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;189:18;179:8;175:33;163:45;;0:211;22690:9:0;:26;;;22633:52;22658:6;;22665:1;22658:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;22633:20:0;;175:33:-1;22658:26:0;;;;-1:-1:-1;22633:24:0;:52::i;:84::-;22602:115;;22765:25;22742:20;:48;22738:145;;;22843:20;22815:48;;22738:145;21517:1804;;;;22914:19;22965:20;22937:25;:48;22936:101;;23017:20;22936:101;;;22989:25;22936:101;22914:123;;23054:43;;:::i;:::-;23113:11;-1:-1:-1;;;;;23100:42:0;;23161:6;;23168:1;23161:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;175:33;;;;;-1:-1;23189:11:0;23219:10;;23230:1;23219:13;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;-1:-1;;;;;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:37;;;137:52;;134:2;;;202:1;199;192:12;134:2;23100:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23100:147:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23100:147: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;23100:147:0;;;;;;;;;23054:193;;23264:45;23279:16;23297:11;23264:14;:45::i;:::-;-1:-1:-1;;21553:3:0;;;;;-1:-1:-1;21517:1804:0;;-1:-1:-1;;21517:1804:0;;-1:-1:-1;21167:2197:0;;;;;;;;;;:::o;19345:1114::-;19949:27;19957:5;-1:-1:-1;;;;;19949:25:0;;:27::i;:::-;19941:71;;;;-1:-1:-1;;;19941:71:0;;;;;;;;;20086:12;20100:23;20135:5;-1:-1:-1;;;;;20127:19:0;20147:4;20127: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;;20085:67:0;;;;20171:7;20163:52;;;;-1:-1:-1;;;20163:52:0;;;;;;;;;20232:17;;:21;20228:224;;20374:10;20363:30;;;;;;;;;;;;;;20355:85;;;;-1:-1:-1;;;20355:85:0;;;;;;;;;19345:1114;;;;:::o;11565:470::-;11623:7;11867:6;11863:47;;-1:-1:-1;11897:1:0;11890:8;;11863:47;11934:5;;;11938:1;11934;:5;:1;11958:5;;;;;:10;11950:56;;;;-1:-1:-1;;;11950:56:0;;;;;;;;;12026:1;-1:-1:-1;11565:470:0;;;;;:::o;12503:333::-;12561:7;12660:1;12656;:5;12648:44;;;;-1:-1:-1;;;12648:44:0;;;;;;;;;12703:9;12719:1;12715;:5;;;;;;;12503:333;-1:-1:-1;;;;12503:333:0:o;11130:184::-;11188:7;11221:1;11216;:6;;11208:49;;;;-1:-1:-1;;;11208:49:0;;;;;;;;;-1:-1:-1;11280:5:0;;;11130:184::o;6211:835::-;6431:2;6483:27;;;;;;6531:25;;;;;;6425:8;;;6420:13;;6412:3;:22;-1:-1:-1;;6412:26:0;6627:206;6643:2;6638:3;6635:11;6627:206;;;6731:10;;6718:24;;6778:2;6768:13;;;;6806:12;;;;-1:-1:-1;;6656:12:0;;;;6627:206;;;6905:10;;6961:11;;6957:22;;6917:9;;6901:26;7006:21;;;;6993:35;;;-1:-1:-1;;;6460:579:0:o;3765:1186::-;3890:11;4018:4;4012:11;4152:2;4146:4;4142:13;4844:1;4824;4715:10;4685;4682:1;4678:18;4654:5;4624:11;4276:5;4271:3;4267:15;4244:689;4234:699;3988:956;-1:-1:-1;;;;;;;;3988:956:0:o;29535:875::-;29644:10;29689:5;29723;29756;29790:4;29822:5;29644:10;29900:26;29756:5;29873:9;29862:8;:20;29861:34;29860:67;;;;;;;-1:-1:-1;29958:24:0;;;30024:25;;;30011:39;;30090:25;;;30077:39;;29938:17;30222:11;30211:22;;;30185:23;;;:48;;30163:3;30148:32;;;;30185:48;30147:87;;;;;30129:105;;30264:3;30251:10;:16;30247:156;;;30293:55;30321:12;30293:9;:55::i;:::-;30286:62;;;;;;;;;;;;;;30247:156;30390:1;30383:8;;;;;;;;;;;;;;28801:258;28870:7;-1:-1:-1;;;;;28894:29:0;;24277:42;28894:29;;:51;;-1:-1:-1;;;;;;28927:18:0;;;28894:51;28890:162;;;-1:-1:-1;;;;;;28969:11:0;;;28962:18;;28890:162;29020:20;;-1:-1:-1;;;29020:20:0;;-1:-1:-1;;;;;29020:15:0;;;;;:20;;29036:3;;29020:20;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29020:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29020: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;29020:20:0;;;;;;;;;29013:27;;;;29067:460;29169:4;-1:-1:-1;;;;;29190:29:0;;24277:42;29190:29;;:51;;-1:-1:-1;;;;;;29223:18:0;;;29190:51;29186:334;;;29262:9;29258:162;;;29299:15;;-1:-1:-1;;;;;29299:7:0;;;:15;;;;;29307:6;;29299:15;;;;29307:6;29299:7;:15;;;;;;;29292:22;;;;29258:162;29355:19;;-1:-1:-1;;;;;29355:11:0;;;:19;;;;;29367:6;;29355:19;;;;29367:6;29355:11;:19;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29355:19:0;29400:4;29393:11;;;;29186:334;29452:30;-1:-1:-1;;;;;29452:18:0;;29471:2;29475:6;29452:30;:18;:30;:::i;:::-;-1:-1:-1;29504:4:0;29186:334;29067:460;;;;;;:::o;17747:621::-;18117:10;;;18116:62;;-1:-1:-1;18133:39:0;;-1:-1:-1;;;18133:39:0;;-1:-1:-1;;;;;18133:15:0;;;;;:39;;18157:4;;18164:7;;18133:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18133:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18133: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;18133:39:0;;;;;;;;;:44;18116:62;18108:152;;;;-1:-1:-1;;;18108:152:0;;;;;;;;;18297:62;;18271:89;;18290:5;;-1:-1:-1;;;18320:22:0;18297:62;;18344:7;;18353:5;;18297:62;;;;23372:687;23656:40;;23612:39;;:85;;;:43;:85;:::i;:::-;23570:127;;23794:40;;;;;23750:39;;;;:85;;;:43;:85;:::i;:::-;23708:39;;;:127;23912:30;;;;;23878:29;;;;:65;;;:33;:65;:::i;:::-;23846:29;;;:97;24020:30;;;;;23986:29;;;;:65;;;:33;:65;:::i;:::-;23954:29;;;;:97;;;;-1:-1:-1;23372:687:0:o;13985:422::-;14352:20;;14391:8;;13985:422;;;;:::o;30418:791::-;30499:10;30533:16;;30529:673;;30568:18;;30616:9;30605:20;;30653:5;30646:3;:12;30642:104;;30712:17;-1:-1:-1;;30696:11:0;;30695:35;30679:51;;30642:104;30781:13;30766:12;:28;30762:97;;;30830:13;30815:28;;30762:97;30913:8;;30898:50;;-1:-1:-1;;;30898:50:0;;30875:20;;-1:-1:-1;;;;;30913:8:0;;30898:35;;:50;;30942:4;;30898:50;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30898:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30898:50: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;30898:50:0;;;;;;;;;30875:73;;30984:1;30969:12;:16;:51;;;;;31008:12;30989:15;:31;;30969:51;30965:183;;;31050:8;;:31;;-1:-1:-1;;;31050:31:0;;-1:-1:-1;;;;;31050:8:0;;;;:17;;:31;;31068:12;;31050:31;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31050:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31050:31: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;31050:31:0;;;;;;;;;31043:38;;;;;;;30965:183;31131:1;31124:8;;;;;;;30529:673;-1:-1:-1;31189:1:0;31182:8;;10674:181;10732:7;10764:5;;;10788:6;;;;10780:46;;;;-1:-1:-1;;;10780:46:0;;;;;;;;24070:9265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;24070:9265:0;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;313:707;;430:3;423:4;415:6;411:17;407:27;397:2;;448:1;445;438:12;397:2;485:6;472:20;507:80;522:64;579:6;522:64;;;507:80;;;498:89;;604:5;629:6;622:5;615:21;659:4;651:6;647:17;637:27;;681:4;676:3;672:14;665:21;;734:6;781:3;773:4;765:6;761:17;756:3;752:27;749:36;746:2;;;798:1;795;788:12;746:2;823:1;808:206;833:6;830:1;827:13;808:206;;;891:3;913:37;946:3;934:10;913:37;;;901:50;;-1:-1;974:4;965:14;;;;993;;;;;855:1;848:9;808:206;;;812:14;390:630;;;;;;;;1044:359;;;1181:3;1174:4;1166:6;1162:17;1158:27;1148:2;;1199:1;1196;1189:12;1148:2;-1:-1;1219:20;;-1:-1;;;;;1248:30;;1245:2;;;1291:1;1288;1281:12;1245:2;1325:4;1317:6;1313:17;1301:29;;1376:3;1368:4;1360:6;1356:17;1346:8;1342:32;1339:41;1336:2;;;1393:1;1390;1383:12;1336:2;1141:262;;;;;;1451:785;;1600:3;1593:4;1585:6;1581:17;1577:27;1567:2;;1618:1;1615;1608:12;1567:2;1648:6;1642:13;1670:101;1685:85;1763:6;1685:85;;1670:101;1661:110;;1788:5;1813:6;1806:5;1799:21;1843:4;1835:6;1831:17;1821:27;;1865:4;1860:3;1856:14;1849:21;;1918:6;1965:3;1957:4;1949:6;1945:17;1940:3;1936:27;1933:36;1930:2;;;1982:1;1979;1972:12;1930:2;2007:1;1992:238;2017:6;2014:1;2011:13;1992:238;;;2075:3;2097:69;2162:3;2150:10;2097:69;;;2085:82;;-1:-1;2190:4;2181:14;;;;2218:4;2209:14;;;;;2039:1;2032:9;1992:238;;2280:372;;;2429:3;2422:4;2414:6;2410:17;2406:27;2396:2;;2447:1;2444;2437:12;2396:2;-1:-1;2467:20;;-1:-1;;;;;2496:30;;2493:2;;;2539:1;2536;2529:12;2493:2;2573:4;2565:6;2561:17;2549:29;;2625:3;2616:5;2608:6;2604:18;2594:8;2590:33;2587:42;2584:2;;;2642:1;2639;2632:12;2696:729;;2830:3;2823:4;2815:6;2811:17;2807:27;2797:2;;2848:1;2845;2838:12;2797:2;2885:6;2872:20;2907:97;2922:81;2996:6;2922:81;;2907:97;3032:21;;;3076:4;3064:17;;;;2898:106;;-1:-1;3089:14;;3064:17;3184:1;3169:250;3194:6;3191:1;3188:13;3169:250;;;3277:3;3264:17;3256:6;3252:30;3301:54;3351:3;3339:10;3301:54;;;3289:67;;-1:-1;3379:4;3370:14;;;;3398;;;;;3216:1;3209:9;3169:250;;3451:707;;3568:3;3561:4;3553:6;3549:17;3545:27;3535:2;;3586:1;3583;3576:12;3535:2;3623:6;3610:20;3645:80;3660:64;3717:6;3660:64;;3645:80;3636:89;;3742:5;3767:6;3760:5;3753:21;3797:4;3789:6;3785:17;3775:27;;3819:4;3814:3;3810:14;3803:21;;3872:6;3919:3;3911:4;3903:6;3899:17;3894:3;3890:27;3887:36;3884:2;;;3936:1;3933;3926:12;3884:2;3961:1;3946:206;3971:6;3968:1;3965:13;3946:206;;;4029:3;4051:37;4084:3;4072:10;4051:37;;;4039:50;;-1:-1;4112:4;4103:14;;;;4131;;;;;3993:1;3986:9;3946:206;;4166:128;4241:13;;4259:30;4241:13;4259:30;;4301:134;4379:13;;4397:33;4379:13;4397:33;;4443:432;;4540:3;4533:4;4525:6;4521:17;4517:27;4507:2;;4558:1;4555;4548:12;4507:2;4595:6;4582:20;4617:60;4632:44;4669:6;4632:44;;4617:60;4608:69;;4697:6;4690:5;4683:21;4733:4;4725:6;4721:17;4766:4;4759:5;4755:16;4801:3;4792:6;4787:3;4783:16;4780:25;4777:2;;;4818:1;4815;4808:12;4777:2;4828:41;4862:6;4857:3;4852;4828:41;;;4500:375;;;;;;;;5332:158;5413:20;;5438:47;5413:20;5438:47;;5875:863;;6002:4;5990:9;5985:3;5981:19;5977:30;5974:2;;;6020:1;6017;6010:12;5974:2;6038:20;6053:4;6038:20;;;6029:29;-1:-1;6126:1;6157:60;6213:3;6193:9;6157:60;;;6133:85;;-1:-1;6297:2;6330:60;6386:3;6362:22;;;6330:60;;;6323:4;6316:5;6312:16;6305:86;6239:163;6460:2;6493:60;6549:3;6540:6;6529:9;6525:22;6493:60;;;6486:4;6479:5;6475:16;6468:86;6412:153;6623:2;6656:60;6712:3;6703:6;6692:9;6688:22;6656:60;;;6649:4;6642:5;6638:16;6631:86;6575:153;5968:770;;;;;6781:683;;6902:4;6890:9;6885:3;6881:19;6877:30;6874:2;;;6920:1;6917;6910:12;6874:2;6938:20;6953:4;6938:20;;;6929:29;-1:-1;7015:1;7046:58;7100:3;7080:9;7046:58;;;7022:83;;-1:-1;7171:2;7204:60;7260:3;7236:22;;;7204:60;;;7197:4;7190:5;7186:16;7179:86;7126:150;7349:2;7382:60;7438:3;7429:6;7418:9;7414:22;7382:60;;;7375:4;7368:5;7364:16;7357:86;7286:168;6868:596;;;;;8233:2203;;8339:5;8327:9;8322:3;8318:19;8314:31;8311:2;;;8358:1;8355;8348:12;8311:2;8376:21;8391:5;8376:21;;;8367:30;-1:-1;8455:1;8486:49;8531:3;8511:9;8486:49;;;8462:74;;-1:-1;8605:2;8638:49;8683:3;8659:22;;;8638:49;;;8631:4;8624:5;8620:16;8613:75;8557:142;8764:2;8797:49;8842:3;8833:6;8822:9;8818:22;8797:49;;;8790:4;8783:5;8779:16;8772:75;8709:149;8917:2;8950:49;8995:3;8986:6;8975:9;8971:22;8950:49;;;8943:4;8936:5;8932:16;8925:75;8868:143;9073:3;9107:49;9152:3;9143:6;9132:9;9128:22;9107:49;;;9100:4;9093:5;9089:16;9082:75;9021:147;9230:3;9264:49;9309:3;9300:6;9289:9;9285:22;9264:49;;;9257:4;9250:5;9246:16;9239:75;9178:147;9379:3;9413:49;9458:3;9449:6;9438:9;9434:22;9413:49;;;9406:4;9399:5;9395:16;9388:75;9335:139;9528:3;9562:49;9607:3;9598:6;9587:9;9583:22;9562:49;;;9555:4;9548:5;9544:16;9537:75;9484:139;9690:3;9725:49;9770:3;9761:6;9750:9;9746:22;9725:49;;;9717:5;9710;9706:17;9699:76;9633:153;9836:3;9871:49;9916:3;9907:6;9896:9;9892:22;9871:49;;;9863:5;9856;9852:17;9845:76;9796:136;10020:3;10009:9;10005:19;9992:33;-1:-1;;;;;10037:6;10034:30;10031:2;;;10077:1;10074;10067:12;10031:2;10113:54;10163:3;10154:6;10143:9;10139:22;10113:54;;;10105:5;10098;10094:17;10087:81;9942:237;10267:3;10256:9;10252:19;10239:33;-1:-1;;;;;10284:6;10281:30;10278:2;;;10324:1;10321;10314:12;10278:2;10360:54;10410:3;10401:6;10390:9;10386:22;10360:54;;;10352:5;10345;10341:17;10334:81;10189:237;8305:2131;;;;;10443:130;10510:20;;10535:33;10510:20;10535:33;;10721:130;10797:13;;10815:31;10797:13;10815:31;;10858:241;;10962:2;10950:9;10941:7;10937:23;10933:32;10930:2;;;10978:1;10975;10968:12;10930:2;11013:1;11030:53;11075:7;11055:9;11030:53;;11106:1233;;;;;;;;;11391:3;11379:9;11370:7;11366:23;11362:33;11359:2;;;11408:1;11405;11398:12;11359:2;11443:1;11460:53;11505:7;11485:9;11460:53;;;11450:63;;11422:97;11550:2;11568:53;11613:7;11604:6;11593:9;11589:22;11568:53;;;11558:63;;11529:98;11658:2;11676:53;11721:7;11712:6;11701:9;11697:22;11676:53;;;11666:63;;11637:98;11766:2;11784:53;11829:7;11820:6;11809:9;11805:22;11784:53;;;11774:63;;11745:98;11902:3;11891:9;11887:19;11874:33;-1:-1;;;;;11919:6;11916:30;11913:2;;;11959:1;11956;11949:12;11913:2;11987:99;12078:7;12069:6;12058:9;12054:22;11987:99;;;11977:109;;;;11853:239;12151:3;12140:9;12136:19;12123:33;-1:-1;;;;;12168:6;12165:30;12162:2;;;12208:1;12205;12198:12;12162:2;12236:87;12315:7;12306:6;12295:9;12291:22;12236:87;;;12226:97;;;;12102:227;11353:986;;;;;;;;;;;;12346:595;;;;12493:2;12481:9;12472:7;12468:23;12464:32;12461:2;;;12509:1;12506;12499:12;12461:2;12544:1;12561:53;12606:7;12586:9;12561:53;;;12551:63;;12523:97;12651:2;12669:53;12714:7;12705:6;12694:9;12690:22;12669:53;;;12659:63;;12630:98;12787:2;12776:9;12772:18;12759:32;-1:-1;;;;;12803:6;12800:30;12797:2;;;12843:1;12840;12833:12;12797:2;12863:62;12917:7;12908:6;12897:9;12893:22;12863:62;;;12853:72;;12738:193;12455:486;;;;;;12948:434;;13109:2;13097:9;13088:7;13084:23;13080:32;13077:2;;;13125:1;13122;13115:12;13077:2;13160:24;;-1:-1;;;;;13193:30;;13190:2;;;13236:1;13233;13226:12;13190:2;13256:110;13358:7;13349:6;13338:9;13334:22;13256:110;;13389:257;;13501:2;13489:9;13480:7;13476:23;13472:32;13469:2;;;13517:1;13514;13507:12;13469:2;13552:1;13569:61;13622:7;13602:9;13569:61;;13653:394;;;13788:2;13776:9;13767:7;13763:23;13759:32;13756:2;;;13804:1;13801;13794:12;13756:2;13839:1;13856:67;13915:7;13895:9;13856:67;;;13846:77;;13818:111;13960:2;13978:53;14023:7;14014:6;14003:9;13999:22;13978:53;;;13968:63;;13939:98;13750:297;;;;;;14054:1513;;;;;;;;;;;14387:3;14375:9;14366:7;14362:23;14358:33;14355:2;;;14404:1;14401;14394:12;14355:2;14439:1;14456:67;14515:7;14495:9;14456:67;;;14446:77;;14418:111;14560:2;14578:53;14623:7;14614:6;14603:9;14599:22;14578:53;;;14568:63;;14539:98;14668:2;14686:53;14731:7;14722:6;14711:9;14707:22;14686:53;;;14676:63;;14647:98;14776:2;14794:53;14839:7;14830:6;14819:9;14815:22;14794:53;;;14784:63;;14755:98;14912:3;14901:9;14897:19;14884:33;-1:-1;;;;;14929:6;14926:30;14923:2;;;14969:1;14966;14959:12;14923:2;14997:99;15088:7;15079:6;15068:9;15064:22;14997:99;;;14987:109;;;;14863:239;15161:3;15150:9;15146:19;15133:33;-1:-1;;;;;15178:6;15175:30;15172:2;;;15218:1;15215;15208:12;15172:2;15246:87;15325:7;15316:6;15305:9;15301:22;15246:87;;;15236:97;;;;15112:227;15370:3;15389:53;15434:7;15425:6;15414:9;15410:22;15389:53;;;15379:63;;15349:99;15479:3;15498:53;15543:7;15534:6;15523:9;15519:22;15498:53;;;15488:63;;15458:99;14349:1218;;;;;;;;;;;;;;15574:2085;;;;;;;;;;;;15969:3;15957:9;15948:7;15944:23;15940:33;15937:2;;;15986:1;15983;15976:12;15937:2;16021:1;16038:67;16097:7;16077:9;16038:67;;;16028:77;;16000:111;16142:2;16160:67;16219:7;16210:6;16199:9;16195:22;16160:67;;;16150:77;;16121:112;16264:2;16282:53;16327:7;16318:6;16307:9;16303:22;16282:53;;;16272:63;;16243:98;16400:2;16389:9;16385:18;16372:32;-1:-1;;;;;16416:6;16413:30;16410:2;;;16456:1;16453;16446:12;16410:2;16476:78;16546:7;16537:6;16526:9;16522:22;16476:78;;;16466:88;;16351:209;16619:3;16608:9;16604:19;16591:33;-1:-1;;;;;16636:6;16633:30;16630:2;;;16676:1;16673;16666:12;16630:2;16696:62;16750:7;16741:6;16730:9;16726:22;16696:62;;;16686:72;;16570:194;16823:3;16812:9;16808:19;16795:33;-1:-1;;;;;16840:6;16837:30;16834:2;;;16880:1;16877;16870:12;16834:2;16900:78;16970:7;16961:6;16950:9;16946:22;16900:78;;;16890:88;;16774:210;17043:3;17032:9;17028:19;17015:33;-1:-1;;;;;17060:6;17057:30;17054:2;;;17100:1;17097;17090:12;17054:2;17120:78;17190:7;17181:6;17170:9;17166:22;17120:78;;;17110:88;;16994:210;17235:3;17254:53;17299:7;17290:6;17279:9;17275:22;17254:53;;;17244:63;;17214:99;17344:3;17363:53;17408:7;17399:6;17388:9;17384:22;17363:53;;;17353:63;;17323:99;17453:3;17472:53;17517:7;17508:6;17497:9;17493:22;17472:53;;;17462:63;;17432:99;17562:3;17582:61;17635:7;17626:6;17615:9;17611:22;17582:61;;;17571:72;;17541:108;15931:1728;;;;;;;;;;;;;;;17666:855;;;;;17897:3;17885:9;17876:7;17872:23;17868:33;17865:2;;;17914:1;17911;17904:12;17865:2;17949:1;17966:67;18025:7;18005:9;17966:67;;;17956:77;;17928:111;18070:2;18088:73;18153:7;18144:6;18133:9;18129:22;18088:73;;;18078:83;;18049:118;18198:2;18216:53;18261:7;18252:6;18241:9;18237:22;18216:53;;;18206:63;;18177:98;18334:2;18323:9;18319:18;18306:32;-1:-1;;;;;18350:6;18347:30;18344:2;;;18390:1;18387;18380:12;18344:2;18410:95;18497:7;18488:6;18477:9;18473:22;18410:95;;;18400:105;;18285:226;17859:662;;;;;;;;18528:267;;18645:2;18633:9;18624:7;18620:23;18616:32;18613:2;;;18661:1;18658;18651:12;18613:2;18696:1;18713:66;18771:7;18751:9;18713:66;;18802:318;;18944:3;18932:9;18923:7;18919:23;18915:33;18912:2;;;18961:1;18958;18951:12;18912:2;18996:1;19013:91;19096:7;19076:9;19013:91;;19127:313;;19267:2;19255:9;19246:7;19242:23;19238:32;19235:2;;;19283:1;19280;19273:12;19235:2;19318:1;19335:89;19416:7;19396:9;19335:89;;19447:263;;19562:2;19550:9;19541:7;19537:23;19533:32;19530:2;;;19578:1;19575;19568:12;19530:2;19613:1;19630:64;19686:7;19666:9;19630:64;;19717:470;;;19847:2;19835:9;19826:7;19822:23;19818:32;19815:2;;;19863:1;19860;19853:12;19815:2;19898:1;19915:53;19960:7;19940:9;19915:53;;;19905:63;;19877:97;20033:2;20022:9;20018:18;20005:32;-1:-1;;;;;20049:6;20046:30;20043:2;;;20089:1;20086;20079:12;20043:2;20109:62;20163:7;20154:6;20143:9;20139:22;20109:62;;20195:197;;20316:70;20382:3;20374:6;20366;20316:70;;20401:261;;20530:92;20618:3;20610:6;20530:92;;;-1:-1;;20651:4;20642:14;;20523:139;20671:229;;20808:86;20890:3;20882:6;20808:86;;;20794:100;20787:113;-1:-1;;;20787:113;20909:225;;21044:84;21124:3;21116:6;21044:84;;21142:142;21233:45;21272:5;21233:45;;;21228:3;21221:58;21215:69;;;21291:103;21364:24;21382:5;21364:24;;21548:903;;21714:91;21798:6;21793:3;21714:91;;;21707:98;;21828:3;21870:4;21862:6;21858:17;21853:3;21849:27;21897:65;21956:5;21897:65;;;21982:7;22010:1;21995:417;22020:6;22017:1;22014:13;21995:417;;;22082:9;22076:4;22072:20;22067:3;22060:33;22136:49;22178:6;22169:7;22136:49;;;22200:91;22286:4;22271:13;22256;22200:91;;;22192:99;;22308:69;22370:6;22308:69;;;22400:4;22391:14;;;;;22298:79;-1:-1;;;22042:1;22035:9;21995:417;;;-1:-1;22425:4;;21694:757;-1:-1;;;;;;;21694:757;22534:858;;22721:75;22790:5;22721:75;;;22809:107;22909:6;22904:3;22809:107;;;22802:114;;22937:77;23008:5;22937:77;;;23034:7;23062:1;23047:323;23072:6;23069:1;23066:13;23047:323;;;23139:6;23133:13;23160:105;23261:3;23246:13;23160:105;;;23153:112;;23282:81;23356:6;23282:81;;;23272:91;-1:-1;;23094:1;23087:9;23047:323;;;-1:-1;23383:3;;22700:692;-1:-1;;;;;22700:692;23467:969;;23657:103;23753:6;23748:3;23657:103;;;23650:110;;23783:3;23825:4;23817:6;23813:17;23808:3;23804:27;23852:77;23923:5;23852:77;;;23949:7;23977:1;23962:435;23987:6;23984:1;23981:13;23962:435;;;24049:9;24043:4;24039:20;24034:3;24027:33;24088:61;24142:6;24133:7;24088:61;;;24164:100;24259:4;24244:13;24164:100;;;24156:108;;24281:81;24355:6;24281:81;;;24385:4;24376:14;;;;;24271:91;-1:-1;;24009:1;24002:9;23962:435;;24511:984;;24690:71;24755:5;24690:71;;;24774:103;24870:6;24865:3;24774:103;;;24767:110;;24900:3;24942:4;24934:6;24930:17;24925:3;24921:27;24969:73;25036:5;24969:73;;;25062:7;25090:1;25075:381;25100:6;25097:1;25094:13;25075:381;;;25162:9;25156:4;25152:20;25147:3;25140:33;25207:6;25201:13;25229:98;25322:4;25307:13;25229:98;;;25221:106;;25344:77;25414:6;25344:77;;;25444:4;25435:14;;;;;25334:87;-1:-1;;25122:1;25115:9;25075:381;;25503:103;25576:24;25594:5;25576:24;;25636:273;;25736:60;25789:6;25784:3;25736:60;;;25729:67;;25808:43;25844:6;25839:3;25832:5;25808:43;;;25873:29;25895:6;25873:29;;;25864:39;;;;25722:187;-1:-1;;;25722:187;26241:343;;26351:38;26383:5;26351:38;;;26401:70;26464:6;26459:3;26401:70;;;26394:77;;26476:52;26521:6;26516:3;26509:4;26502:5;26498:16;26476:52;;;26549:29;26571:6;26549:29;;26591:356;;26719:38;26751:5;26719:38;;;26769:88;26850:6;26845:3;26769:88;;;26762:95;;26862:52;26907:6;26902:3;26895:4;26888:5;26884:16;26862:52;;;26926:16;;;;;26699:248;-1:-1;;26699:248;27276:154;27373:51;27418:5;27373:51;;27611:364;;27771:67;27835:2;27830:3;27771:67;;;-1:-1;;;27851:87;;27966:2;27957:12;;27757:218;-1:-1;;27757:218;27984:364;;28144:67;28208:2;28203:3;28144:67;;;28244:66;28224:87;;28339:2;28330:12;;28130:218;-1:-1;;28130:218;28357:364;;28517:67;28581:2;28576:3;28517:67;;;28617:66;28597:87;;28712:2;28703:12;;28503:218;-1:-1;;28503:218;28730:364;;28890:67;28954:2;28949:3;28890:67;;;28990:66;28970:87;;29085:2;29076:12;;28876:218;-1:-1;;28876:218;29103:364;;29263:67;29327:2;29322:3;29263:67;;;29363:66;29343:87;;29458:2;29449:12;;29249:218;-1:-1;;29249:218;29476:364;;29636:67;29700:2;29695:3;29636:67;;;29736:66;29716:87;;29831:2;29822:12;;29622:218;-1:-1;;29622:218;29849:364;;30009:67;30073:2;30068:3;30009:67;;;30109:66;30089:87;;30204:2;30195:12;;29995:218;-1:-1;;29995:218;30222:465;;30382:67;30446:2;30441:3;30382:67;;;30482:66;30462:87;;-1:-1;;;30578:2;30569:12;;30562:88;30678:2;30669:12;;30368:319;-1:-1;;30368:319;30696:465;;30856:67;30920:2;30915:3;30856:67;;;30956:66;30936:87;;-1:-1;;;31052:2;31043:12;;31036:88;31152:2;31143:12;;30842:319;-1:-1;;30842:319;31170:465;;31330:67;31394:2;31389:3;31330:67;;;31430:66;31410:87;;-1:-1;;;31526:2;31517:12;;31510:88;31626:2;31617:12;;31316:319;-1:-1;;31316:319;31644:364;;31804:67;31868:2;31863:3;31804:67;;;31904:66;31884:87;;31999:2;31990:12;;31790:218;-1:-1;;31790:218;32089:838;32320:22;;32236:4;32227:14;;;32348:62;32231:3;32320:22;32348:62;;;32256:160;32507:4;32500:5;32496:16;32490:23;32519:63;32576:4;32571:3;32567:14;32553:12;32519:63;;;32426:162;32669:4;32662:5;32658:16;32652:23;32681:63;32738:4;32733:3;32729:14;32715:12;32681:63;;;32598:152;32831:4;32824:5;32820:16;32814:23;32843:63;32900:4;32895:3;32891:14;32877:12;32843:63;;33003:645;33205:22;;33132:4;33123:14;;;33233:58;33127:3;33205:22;33233:58;;;33152:145;33375:4;33368:5;33364:16;33358:23;33387:63;33444:4;33439:3;33435:14;33421:12;33387:63;;;33307:149;33552:4;33545:5;33541:16;33535:23;33564:63;33621:4;33616:3;33612:14;33598:12;33564:63;;33716:2669;;33847:5;33838:15;;33922:49;33959:5;;33922:49;;;33977:62;34029:3;34011:12;33977:62;;;33868:177;34109:50;34153:4;34146:5;34142:16;34135:5;34109:50;;;34165:63;34222:4;34217:3;34213:14;34199:12;34165:63;;;34055:179;34305:50;34349:4;34342:5;34338:16;34331:5;34305:50;;;34361:63;34418:4;34413:3;34409:14;34395:12;34361:63;;;34244:186;34495:50;34539:4;34532:5;34528:16;34521:5;34495:50;;;34551:63;34608:4;34603:3;34599:14;34585:12;34551:63;;;34440:180;34688:50;34732:4;34725:5;34721:16;34714:5;34688:50;;;34744:63;34801:4;34796:3;34792:14;34778:12;34744:63;;;34630:183;34881:50;34925:4;34918:5;34914:16;34907:5;34881:50;;;34937:63;34994:4;34989:3;34985:14;34971:12;34937:63;;;34823:183;35066:50;35110:4;35103:5;35099:16;35092:5;35066:50;;;35122:63;35179:4;35174:3;35170:14;35156:12;35122:63;;;35016:175;35251:50;35295:4;35288:5;35284:16;35277:5;35251:50;;;35307:63;35364:4;35359:3;35355:14;35341:12;35307:63;;;35201:175;35449:51;35493:5;35486;35482:17;35475:5;35449:51;;;35506:64;35563:5;35558:3;35554:15;35540:12;35506:64;;;35386:190;35632:51;35676:5;35669;35665:17;35658:5;35632:51;;;35689:64;35746:5;35741:3;35737:15;35723:12;35689:64;;;35586:173;35839:58;35890:5;35883;35879:17;35872:5;35839:58;;;35944:3;35938:4;35934:14;35926:5;35921:3;35917:15;35910:39;35964:83;36042:4;36028:12;36014;35964:83;;;35956:91;;35769:290;;36139:58;36190:5;36183;36179:17;36172:5;36139:58;;;36244:3;36238:4;36234:14;36226:5;36221:3;36217:15;36210:39;36264:83;36342:4;36328:12;36314;36264:83;;;36256:91;33820:2565;-1:-1;;;;;;33820:2565;39200:2269;39404:22;;39200:2269;;39329:5;39320:15;;;39432:62;39324:3;39404:22;39432:62;;;39350:150;39581:4;39574:5;39570:16;39564:23;39593:63;39650:4;39645:3;39641:14;39627:12;39593:63;;;39510:152;39750:4;39743:5;39739:16;39733:23;39762:63;39819:4;39814:3;39810:14;39796:12;39762:63;;;39672:159;39913:4;39906:5;39902:16;39896:23;39925:63;39982:4;39977:3;39973:14;39959:12;39925:63;;;39841:153;40079:4;40072:5;40068:16;40062:23;40091:63;40148:4;40143:3;40139:14;40125:12;40091:63;;;40004:156;40245:4;40238:5;40234:16;40228:23;40257:63;40314:4;40309:3;40305:14;40291:12;40257:63;;;40170:156;40403:4;40396:5;40392:16;40386:23;40415:63;40472:4;40467:3;40463:14;40449:12;40415:63;;;40336:148;40561:4;40554:5;40550:16;40544:23;40573:63;40630:4;40625:3;40621:14;40607:12;40573:63;;;40494:148;40732:5;40725;40721:17;40715:24;40745:64;40802:5;40797:3;40793:15;40779:12;40745:64;;;40652:163;40888:5;40881;40877:17;40871:24;40901:64;40958:5;40953:3;40949:15;40935:12;40901:64;;;40825:146;41054:5;41047;41043:17;41037:24;41108:3;41102:4;41098:14;41090:5;41085:3;41081:15;41074:39;41128:67;41190:4;41176:12;41128:67;;;41120:75;;40981:226;41290:5;41283;41279:17;41273:24;41344:3;41338:4;41334:14;41326:5;41321:3;41317:15;41310:39;41364:67;41426:4;41412:12;41364:67;;;41356:75;39302:2167;-1:-1;;;;;39302:2167;41706:97;41775:22;41791:5;41775:22;;41810:262;;41954:93;42043:3;42034:6;41954:93;;42079:213;42197:2;42182:18;;42211:71;42186:9;42255:6;42211:71;;42299:229;42425:2;42410:18;;42439:79;42414:9;42491:6;42439:79;;42535:340;42689:2;42674:18;;42703:79;42678:9;42755:6;42703:79;;;42793:72;42861:2;42850:9;42846:18;42837:6;42793:72;;42882:324;43028:2;43013:18;;43042:71;43017:9;43086:6;43042:71;;43213:1203;43639:3;43624:19;;43654:71;43628:9;43698:6;43654:71;;;43736:72;43804:2;43793:9;43789:18;43780:6;43736:72;;;43819;43887:2;43876:9;43872:18;43863:6;43819:72;;;43902;43970:2;43959:9;43955:18;43946:6;43902:72;;;44023:9;44017:4;44013:20;44007:3;43996:9;43992:19;43985:49;44048:154;44197:4;44188:6;44180;44048:154;;;44040:162;;44251:9;44245:4;44241:20;44235:3;44224:9;44220:19;44213:49;44276:130;44401:4;44392:6;44384;44276:130;;;44268:138;43610:806;-1:-1;;;;;;;;;;43610:806;44423:324;44569:2;44554:18;;44583:71;44558:9;44627:6;44583:71;;;44665:72;44733:2;44722:9;44718:18;44709:6;44665:72;;44754:445;44964:2;44978:47;;;44949:18;;45039:150;44949:18;45175:6;45039:150;;45206:429;45408:2;45422:47;;;45393:18;;45483:142;45393:18;45611:6;45483:142;;45642:297;45778:2;45792:47;;;45763:18;;45853:76;45763:18;45915:6;45853:76;;45946:408;46110:2;46124:47;;;46095:18;;46185:76;46095:18;46247:6;46185:76;;;46177:84;;46272:72;46340:2;46329:9;46325:18;46316:6;46272:72;;46361:607;46593:3;46578:19;;46608:85;46582:9;46666:6;46608:85;;;46704:80;46780:2;46769:9;46765:18;46756:6;46704:80;;;46795;46871:2;46860:9;46856:18;46847:6;46795:80;;;46886:72;46954:2;46943:9;46939:18;46930:6;46886:72;;46975:253;47113:2;47098:18;;47127:91;47102:9;47191:6;47127:91;;47235:407;47426:2;47440:47;;;47411:18;;47501:131;47411:18;47501:131;;47649:407;47840:2;47854:47;;;47825:18;;47915:131;47825:18;47915:131;;48063:407;48254:2;48268:47;;;48239:18;;48329:131;48239:18;48329:131;;48477:407;48668:2;48682:47;;;48653:18;;48743:131;48653:18;48743:131;;48891:407;49082:2;49096:47;;;49067:18;;49157:131;49067:18;49157:131;;49305:407;49496:2;49510:47;;;49481:18;;49571:131;49481:18;49571:131;;49719:407;49910:2;49924:47;;;49895:18;;49985:131;49895:18;49985:131;;50133:407;50324:2;50338:47;;;50309:18;;50399:131;50309:18;50399:131;;50547:407;50738:2;50752:47;;;50723:18;;50813:131;50723:18;50813:131;;50961:407;51152:2;51166:47;;;51137:18;;51227:131;51137:18;51227:131;;51375:407;51566:2;51580:47;;;51551:18;;51641:131;51551:18;51641:131;;51789:322;51961:3;51946:19;;51976:125;51950:9;52074:6;51976:125;;52118:341;52276:2;52290:47;;;52261:18;;52351:98;52261:18;52435:6;52351:98;;52466:659;52704:2;52718:47;;;52689:18;;52779:98;52689:18;52863:6;52779:98;;;52771:106;;52888:72;52956:2;52945:9;52941:18;52932:6;52888:72;;;53008:9;53002:4;52998:20;52993:2;52982:9;52978:18;52971:48;53033:82;53110:4;53101:6;53093;53033:82;;53132:213;53250:2;53235:18;;53264:71;53239:9;53308:6;53264:71;;53352:256;53414:2;53408:9;53440:17;;;-1:-1;;;;;53500:34;;53536:22;;;53497:62;53494:2;;;53572:1;53569;53562:12;53494:2;53588;53581:22;53392:216;;-1:-1;53392:216;53615:304;;-1:-1;;;;;53766:6;53763:30;53760:2;;;53806:1;53803;53796:12;53760:2;-1:-1;53841:4;53829:17;;;53894:15;;53697:222;54897:317;;-1:-1;;;;;55028:6;55025:30;55022:2;;;55068:1;55065;55058:12;55022:2;-1:-1;55199:4;55135;55112:17;;;;-1:-1;;55108:33;55189:15;;54959:255;55549:125;55644:3;55630:44;55681:172;55826:4;55817:14;;55774:79;56179:158;56303:12;;56274:63;57286:183;57409:19;;;57458:4;57449:14;;57402:67;58547:119;;58621:39;58656:2;58651:3;58647:12;58642:3;58621:39;;58675:496;;;58782:17;;-1:-1;;58847:14;58843:29;;;58839:48;58815:73;;58805:2;;58902:1;58899;58892:12;58805:2;58921:33;;;59021:4;59010:16;;;-1:-1;58976:19;;-1:-1;;;;;;59035:30;;59032:2;;;59078:1;59075;59068:12;59032:2;59109:14;59105:37;;;59091:52;;59088:2;;;59156:1;59153;59146:12;59180:296;;59291:17;;-1:-1;;59356:14;59352:29;;;59348:49;59324:74;;59314:2;;59412:1;59409;59402:12;59314:2;59431:33;;;;59258:218;-1:-1;;59258:218;59485:119;;59559:39;59594:2;59589:3;59585:12;59580:3;59559:39;;59612:91;;59674:24;59692:5;59674:24;;59816:85;59882:13;59875:21;;59858:43;59987:105;;60063:24;60081:5;60063:24;;60328:121;-1:-1;;;;;60390:54;;60373:76;60535:81;60606:4;60595:16;;60578:38;60623:129;;60710:37;60741:5;60710:37;;61591:145;61672:6;61667:3;61662;61649:30;-1:-1;61728:1;61710:16;;61703:27;61642:94;61745:268;61810:1;61817:101;61831:6;61828:1;61825:13;61817:101;;;61898:11;;;61892:18;61879:11;;;61872:39;61853:2;61846:10;61817:101;;;61933:6;61930:1;61927:13;61924:2;;;-1:-1;;61998:1;61980:16;;61973:27;61794:219;62021:97;62109:2;62089:14;-1:-1;;62085:28;;62069:49;62126:117;62195:24;62213:5;62195:24;;;62188:5;62185:35;62175:2;;62234:1;62231;62224:12;62175:2;62169:74;;62390:111;62456:21;62471:5;62456:21;;62508:117;62577:24;62595:5;62577:24;;62632:145;62715:38;62747:5;62715:38;;63222:113;63289:22;63305:5;63289:22;
Swarm Source
bzzr://7cc797ef44c5376a9b23d7997bbac46fb1f415ee46dca845024965c9cb1ccfbb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $2.74 | 1 | $2.74 |
Loading...
Loading
Loading...
Loading
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.