ETH Price: $3,494.76 (-6.42%)

Contract

0xE7b0CE0526fbE3969035a145C9e9691d4d9D216c
 

More Info

Private Name Tags

Multichain Info

Transaction Hash
Method
Block
Age
From
To
Amount
Approve237213432025-11-03 21:00:2317 hrs ago1762203623IN
Clipper Exchange: Old Pool
0 ETH0.000076813.15672224
Burn To Withdraw236843302025-10-29 16:45:595 days ago1761756359IN
Clipper Exchange: Old Pool
0 ETH0.000160990.57996088
Approve236709792025-10-27 19:51:357 days ago1761594695IN
Clipper Exchange: Old Pool
0 ETH0.000030911.27041703
Burn To Withdraw236463282025-10-24 9:07:4711 days ago1761296867IN
Clipper Exchange: Old Pool
0 ETH0.000272221.04503629
Approve236283272025-10-21 20:31:5913 days ago1761078719IN
Clipper Exchange: Old Pool
0 ETH0.000030211.24182457
Burn To Withdraw236197722025-10-20 15:41:4714 days ago1760974907IN
Clipper Exchange: Old Pool
0 ETH0.000489841.66223193
Burn To Withdraw236132522025-10-19 17:44:4715 days ago1760895887IN
Clipper Exchange: Old Pool
0 ETH0.000041270.1400546
Burn To Withdraw235568772025-10-11 20:30:1123 days ago1760214611IN
Clipper Exchange: Old Pool
0 ETH0.000232630.8930491
Burn To Withdraw235519932025-10-11 4:06:5924 days ago1760155619IN
Clipper Exchange: Old Pool
0 ETH0.000433571.47152365
Burn To Withdraw234810612025-10-01 6:06:2334 days ago1759298783IN
Clipper Exchange: Old Pool
0 ETH0.000035730.14683081
Burn To Withdraw234622332025-09-28 14:56:4736 days ago1759071407IN
Clipper Exchange: Old Pool
0 ETH0.00032191.15963637
Burn To Withdraw234585522025-09-28 2:35:1137 days ago1759026911IN
Clipper Exchange: Old Pool
0 ETH0.000445151.60365555
Burn To Withdraw234528672025-09-27 7:30:4738 days ago1758958247IN
Clipper Exchange: Old Pool
0 ETH0.000187420.6751746
Burn To Withdraw233964812025-09-19 10:18:5946 days ago1758277139IN
Clipper Exchange: Old Pool
0 ETH0.00037451.34912191
Burn To Withdraw233544222025-09-13 13:23:1152 days ago1757769791IN
Clipper Exchange: Old Pool
0 ETH0.000079820.28757716
Burn To Withdraw233522262025-09-13 6:02:3552 days ago1757743355IN
Clipper Exchange: Old Pool
0 ETH0.000041570.17080572
Unlock Deposit233522032025-09-13 5:57:5952 days ago1757743079IN
Clipper Exchange: Old Pool
0 ETH0.000005920.16806295
Approve233500902025-09-12 22:52:5952 days ago1757717579IN
Clipper Exchange: Old Pool
0 ETH0.00002641.0849413
Burn To Withdraw233282092025-09-09 21:23:5955 days ago1757453039IN
Clipper Exchange: Old Pool
0 ETH0.000033371.26782118
Burn To Withdraw233282092025-09-09 21:23:5955 days ago1757453039IN
Clipper Exchange: Old Pool
0 ETH0.000079180.26871039
Burn To Withdraw233272242025-09-09 18:06:4755 days ago1757441207IN
Clipper Exchange: Old Pool
0 ETH0.000420041.4253913
Burn To Withdraw233272102025-09-09 18:03:5955 days ago1757441039IN
Clipper Exchange: Old Pool
0 ETH0.00014270.48424757
Burn To Withdraw233122832025-09-07 16:02:1157 days ago1757260931IN
Clipper Exchange: Old Pool
0 ETH0.000052460.17802744
Burn To Withdraw233122092025-09-07 15:47:2357 days ago1757260043IN
Clipper Exchange: Old Pool
0 ETH0.000064120.21761124
Burn To Withdraw233121462025-09-07 15:34:4757 days ago1757259287IN
Clipper Exchange: Old Pool
0 ETH0.000044030.14942823
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
Age
From
To
Amount
Transfer169331942023-03-29 13:17:47951 days ago1680095867
Clipper Exchange: Old Pool
2.87 ETH
Sell Eth For Tok...169331942023-03-29 13:17:47951 days ago1680095867
Clipper Exchange: Old Pool
2.87 ETH
Transfer169322172023-03-29 9:59:47951 days ago1680083987
Clipper Exchange: Old Pool
4.23954033 ETH
Transfer169322172023-03-29 9:59:47951 days ago1680083987
Clipper Exchange: Old Pool
4.23954033 ETH
Transfer169279602023-03-28 19:39:23951 days ago1680032363
Clipper Exchange: Old Pool
2.20758792 ETH
Transfer169279602023-03-28 19:39:23951 days ago1680032363
Clipper Exchange: Old Pool
2.20758792 ETH
Transfer169279042023-03-28 19:28:11951 days ago1680031691
Clipper Exchange: Old Pool
0.01 ETH
Transfer169278982023-03-28 19:26:59951 days ago1680031619
Clipper Exchange: Old Pool
0.01409126 ETH
Transfer169278982023-03-28 19:26:59951 days ago1680031619
Clipper Exchange: Old Pool
0.01409126 ETH
Transfer169274082023-03-28 17:48:11951 days ago1680025691
Clipper Exchange: Old Pool
0.99900668 ETH
Transfer169274082023-03-28 17:48:11951 days ago1680025691
Clipper Exchange: Old Pool
0.99900668 ETH
Transfer169268252023-03-28 15:48:59951 days ago1680018539
Clipper Exchange: Old Pool
1.14958913 ETH
Transfer169268252023-03-28 15:48:59951 days ago1680018539
Clipper Exchange: Old Pool
1.14958913 ETH
Transfer169263722023-03-28 14:17:23952 days ago1680013043
Clipper Exchange: Old Pool
0.71438221 ETH
Transfer169263722023-03-28 14:17:23952 days ago1680013043
Clipper Exchange: Old Pool
0.71438221 ETH
Transfer169258842023-03-28 12:39:11952 days ago1680007151
Clipper Exchange: Old Pool
0.04613312 ETH
Transfer169258842023-03-28 12:39:11952 days ago1680007151
Clipper Exchange: Old Pool
0.04613312 ETH
Transfer169256422023-03-28 11:49:47952 days ago1680004187
Clipper Exchange: Old Pool
2.09447791 ETH
Transfer169256422023-03-28 11:49:47952 days ago1680004187
Clipper Exchange: Old Pool
2.09447791 ETH
Transfer169256162023-03-28 11:44:35952 days ago1680003875
Clipper Exchange: Old Pool
0.69382624 ETH
Transfer169256162023-03-28 11:44:35952 days ago1680003875
Clipper Exchange: Old Pool
0.69382624 ETH
Transfer169254902023-03-28 11:19:23952 days ago1680002363
Clipper Exchange: Old Pool
0.05 ETH
Transfer169254292023-03-28 11:06:35952 days ago1680001595
Clipper Exchange: Old Pool
9 ETH
Sell Eth For Tok...169254292023-03-28 11:06:35952 days ago1680001595
Clipper Exchange: Old Pool
9 ETH
Transfer169253682023-03-28 10:54:23952 days ago1680000863
Clipper Exchange: Old Pool
0.09133546 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Age Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Age Amount
View All Withdrawals

Transaction Hash Block Age Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ClipperVerifiedCaravelExchange

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//SPDX-License-Identifier: Copyright 2021 Shipyard Software, Inc.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "@openzeppelin/contracts/utils/math/SafeCast.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/utils/math/SafeCast.sol";
import "@prb/math/contracts/PRBMathSD59x18.sol";
import "./interfaces/WrapperContractInterface.sol";
import "./ClipperCaravelExchange.sol";
contract ClipperVerifiedCaravelExchange is ClipperCaravelExchange {
using SafeERC20 for IERC20;
using PRBMathSD59x18 for int256;
using SafeCast for uint256;
using SafeCast for int256;
uint256 constant ONE_IN_DEFAULT_DECIMALS = 1e18;
int256 constant SIGNED_ONE_IN_DEFAULT_DECIMALS = int256(ONE_IN_DEFAULT_DECIMALS);
uint256 constant ONE_IN_PRICE_DECIMALS = 1e8;
uint256 constant THE_YEAR_THREE_THOUSAND = 32503708800;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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 Returns the amount of tokens in existence.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/draft-IERC20Permit.sol";
import "../../../utils/Address.sol";
/**
* @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 IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol)
pragma solidity ^0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 19 : SafeCast.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/math/SafeCast.sol)
pragma solidity ^0.8.0;
/**
* @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
* checks.
*
* Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
* easily result in undesired exploitation or bugs, since developers usually
* assume that overflows raise errors. `SafeCast` restores this intuition by
* reverting the transaction when such 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.
*
* Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
* all math on `uint256` and `int256` and then downcasting.
*/
library SafeCast {
/**
* @dev Returns the downcasted uint248 from uint256, reverting on
* overflow (when the input is greater than largest uint248).
*
* Counterpart to Solidity's `uint248` operator.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.4;
import "./PRBMath.sol";
/// @title PRBMathSD59x18
/// @author Paul Razvan Berg
/// @notice Smart contract library for advanced fixed-point math that works with int256 numbers considered to have 18
/// trailing decimals. We call this number representation signed 59.18-decimal fixed-point, since the numbers can have
/// a sign and there can be up to 59 digits in the integer part and up to 18 decimals in the fractional part. The numbers
/// are bound by the minimum and the maximum values permitted by the Solidity type int256.
library PRBMathSD59x18 {
/// @dev log2(e) as a signed 59.18-decimal fixed-point number.
int256 internal constant LOG2_E = 1_442695040888963407;
/// @dev Half the SCALE number.
int256 internal constant HALF_SCALE = 5e17;
/// @dev The maximum value a signed 59.18-decimal fixed-point number can have.
int256 internal constant MAX_SD59x18 =
57896044618658097711785492504343953926634992332820282019728_792003956564819967;
/// @dev The maximum whole value a signed 59.18-decimal fixed-point number can have.
int256 internal constant MAX_WHOLE_SD59x18 =
57896044618658097711785492504343953926634992332820282019728_000000000000000000;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
//SPDX-License-Identifier: Copyright 2021 Shipyard Software, Inc.
pragma solidity ^0.8.0;
interface WrapperContractInterface {
function withdraw(uint256 amount) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//SPDX-License-Identifier: Copyright 2021 Shipyard Software, Inc.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "@openzeppelin/contracts/utils/math/SafeCast.sol";
import "./interfaces/WrapperContractInterface.sol";
import "./ClipperCommonExchange.sol";
contract ClipperCaravelExchange is ClipperCommonExchange, Ownable {
using SafeCast for uint256;
using SafeERC20 for IERC20;
using EnumerableSet for EnumerableSet.AddressSet;
modifier receivedInTime(uint256 goodUntil){
require(block.timestamp <= goodUntil, "Clipper: Expired");
_;
}
constructor(address theSigner, address theWrapper, address[] memory tokens)
ClipperCommonExchange(theSigner, theWrapper, tokens)
{}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.4;
/// @notice Emitted when the result overflows uint256.
error PRBMath__MulDivFixedPointOverflow(uint256 prod1);
/// @notice Emitted when the result overflows uint256.
error PRBMath__MulDivOverflow(uint256 prod1, uint256 denominator);
/// @notice Emitted when one of the inputs is type(int256).min.
error PRBMath__MulDivSignedInputTooSmall();
/// @notice Emitted when the intermediary absolute result overflows int256.
error PRBMath__MulDivSignedOverflow(uint256 rAbs);
/// @notice Emitted when the input is MIN_SD59x18.
error PRBMathSD59x18__AbsInputTooSmall();
/// @notice Emitted when ceiling a number overflows SD59x18.
error PRBMathSD59x18__CeilOverflow(int256 x);
/// @notice Emitted when one of the inputs is MIN_SD59x18.
error PRBMathSD59x18__DivInputTooSmall();
/// @notice Emitted when one of the intermediary unsigned results overflows SD59x18.
error PRBMathSD59x18__DivOverflow(uint256 rAbs);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 19 : ClipperCommonExchange.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//SPDX-License-Identifier: Copyright 2021 Shipyard Software, Inc.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "./interfaces/WrapperContractInterface.sol";
abstract contract ClipperCommonExchange is ERC20, ReentrancyGuard {
using SafeERC20 for IERC20;
using EnumerableSet for EnumerableSet.AddressSet;
struct Signature {
uint8 v;
bytes32 r;
bytes32 s;
}
struct Deposit {
uint lockedUntil;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 19 : ReentrancyGuard.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.0;
import "../Strings.sol";
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS,
InvalidSignatureV
}
function _throwError(RecoverError error) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"theSigner","type":"address"},{"internalType":"address","name":"theWrapper","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"PRBMathSD59x18__Exp2InputTooBig","type":"error"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"PRBMathSD59x18__LogInputTooSmall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolTokens","type":"uint256"},{"indexed":true,"internalType":"address","name":"assetAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetAmount","type":"uint256"}],"name":"AssetWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nDays","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"inAsset","type":"address"},{"indexed":true,"internalType":"address","name":"outAsset","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"inAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outAmount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"Swapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fractionOfPool","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"DESIGNATED_SIGNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WRAPPER_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"addAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allTokensBalance","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"theAddress","type":"address"}],"name":"canUnlockDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256[]","name":"depositAmounts","type":"uint256[]"},{"internalType":"uint256","name":"nDays","type":"uint256"},{"internalType":"uint256","name":"poolTokens","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"nDays","type":"uint256"},{"internalType":"uint256","name":"poolTokens","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"}],"name":"depositSingleAsset","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLastBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"internalType":"address","name":"destinationAddress","type":"address"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"sellEthForToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"internalType":"address","name":"destinationAddress","type":"address"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"sellTokenForEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"internalType":"address","name":"destinationAddress","type":"address"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"tokenAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"depositAmounts","type":"uint256[]"},{"internalType":"uint256","name":"nDays","type":"uint256"},{"internalType":"uint256","name":"poolTokens","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"}],"name":"transmitAndDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"nDays","type":"uint256"},{"internalType":"uint256","name":"poolTokens","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"}],"name":"transmitAndDepositSingleAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"internalType":"address","name":"destinationAddress","type":"address"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"transmitAndSellTokenForEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inputToken","type":"address"},{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"internalType":"address","name":"destinationAddress","type":"address"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"},{"internalType":"bytes","name":"auxiliaryData","type":"bytes"}],"name":"transmitAndSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockDeposit","outputs":[{"internalType":"uint256","name":"poolTokens","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"packedGoodUntil","type":"uint256"}],"name":"unpackGoodUntil","outputs":[{"internalType":"uint256","name":"pX","type":"uint256"},{"internalType":"uint256","name":"pY","type":"uint256"},{"internalType":"uint256","name":"wX","type":"uint256"},{"internalType":"uint256","name":"wY","type":"uint256"},{"internalType":"uint256","name":"k","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vestingDeposits","outputs":[{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"uint256","name":"poolTokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenHolder","type":"address"},{"internalType":"uint256","name":"poolTokenAmountToBurn","type":"uint256"},{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"assetAmount","type":"uint256"},{"internalType":"uint256","name":"goodUntil","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct ClipperCommonExchange.Signature","name":"theSignature","type":"tuple"}],"name":"withdrawSingleAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b506040516200559f3803806200559f83398101604081905262000034916200072f565b8282828282826040518060400160405280601881526020017f436c697070657244697265637420506f6f6c20546f6b656e00000000000000008152506040518060400160405280600881526020016710d314149114941360c21b8152508160039080519060200190620000a992919062000676565b508051620000bf90600490602084019062000676565b50506001600555506001600160601b0319606084901b1660805280516000905b8082101562000141576200012b8383815181106200010d57634e487b7160e01b600052603260045260246000fd5b602002602001015160076200022760201b62001d271790919060201c565b5081620001388162000917565b925050620000df565b620001966040518060400160405280600d81526020016c10db1a5c1c195c911a5c9958dd609a1b815250604051806040016040528060058152602001640312e302e360dc1b815250306200024760201b60201c565b60c05250505060601b6001600160601b03191660a05250620001bf620001b93390565b62000374565b50505060005b81518110156200021d5762000208828281518110620001f457634e487b7160e01b600052603260045260246000fd5b6020026020010151620003c660201b60201c565b80620002148162000917565b915050620001c5565b5050505062000961565b60006200023e836001600160a01b0384166200046e565b90505b92915050565b6000604051602001620002be907f454950373132446f6d61696e28737472696e67206e616d652c737472696e672081527f76657273696f6e2c75696e7432353620636861696e49642c6164647265737320602082015271766572696679696e67436f6e74726163742960701b604082015260520190565b6040516020818303038152906040528051906020012084604051602001620002e791906200086e565b60405160208183030381529060405280519060200120846040516020016200031091906200086e565b60408051601f1981840301815282825280516020918201209083019490945281019190915260608101919091524660808201526001600160a01b03831660a082015260c0016040516020818303038152906040528051906020012090509392505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000452816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040457600080fd5b505afa15801562000419573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043f919062000844565b60006200044c84620004c0565b62000598565b6001600160a01b03909116600090815260066020526040902055565b6000818152600183016020526040812054620004b75750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000241565b50600062000241565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1790529051600091829182916001600160a01b038616916200051991906200086e565b600060405180830381855afa9150503d806000811462000556576040519150601f19603f3d011682016040523d82523d6000602084013e6200055b565b606091505b50915091508180156200057057506020815110155b6200057a57600080fd5b808060200190518101906200059091906200082b565b949350505050565b6000620005b0826200060460201b62001d3c1760201c565b6001600160d81b0316620005f863ffffffff60d81b60d886901b167fff0000000000000000000000000000000000000000000000000000000000000060f888901b166200088c565b6200059091906200088c565b60006001600160d81b03821115620006725760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663136206269747360c81b606482015260840160405180910390fd5b5090565b8280546200068490620008da565b90600052602060002090601f016020900481019282620006a85760008555620006f3565b82601f10620006c357805160ff1916838001178555620006f3565b82800160010185558215620006f3579182015b82811115620006f3578251825591602001919060010190620006d6565b50620006729291505b80821115620006725760008155600101620006fc565b80516001600160a01b03811681146200072a57600080fd5b919050565b60008060006060848603121562000744578283fd5b6200074f8462000712565b925060206200076081860162000712565b60408601519093506001600160401b03808211156200077d578384fd5b818701915087601f83011262000791578384fd5b815181811115620007a657620007a66200094b565b8060051b604051601f19603f83011681018181108582111715620007ce57620007ce6200094b565b604052828152858101935084860182860187018c1015620007ed578788fd5b8795505b838610156200081a57620008058162000712565b855260019590950194938601938601620007f1565b508096505050505050509250925092565b6000602082840312156200083d578081fd5b5051919050565b60006020828403121562000856578081fd5b815160ff8116811462000867578182fd5b9392505050565b6000825162000882818460208701620008a7565b9190910192915050565b60008219821115620008a257620008a262000935565b500190565b60005b83811015620008c4578181015183820152602001620008aa565b83811115620008d4576000848401525b50505050565b600181811c90821680620008ef57607f821691505b602082108114156200091157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200092e576200092e62000935565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c051614b7562000a2a600039600081816121fa01526129e301526000818161050d01528181610a5301528181610a7f01528181610acd01528181610b1801528181610b710152818161111c0152818161119e015281816111f10152818161122c015281816112a601528181611327015281816115a2015281816116110152818161173901528181611aaa01528181611af901528181611b4c01528181611b870152611c010152600081816105f5015261229f0152614b756000f3fe6080604052600436106102295760003560e01c80635250d7301161012357806395d89b41116100ab578063c72da66a1161006f578063c72da66a146106f5578063dd62ed3e14610715578063eb1c645314610735578063ecc7633d14610755578063f2fde38b1461078257600080fd5b806395d89b4114610637578063a457c2d71461064c578063a9059cbb1461066c578063c0d5ebfd1461068c578063c325a549146106ac57600080fd5b8063715018a6116100f2578063715018a61461059d57806387e08c25146105b25780638da5cb5b146105c55780638dda8f3f146105e357806392a91a3a1461061757600080fd5b80635250d730146104e85780635aecdda5146104fb57806362fb4e011461054757806370a082311461056757600080fd5b806329d0c8fc116101b15780633721f29c116101755780633721f29c146103f9578063377a368c1461047357806339509351146104885780633b26e4eb146104a85780634cb6864c146104c857600080fd5b806329d0c8fc1461035d5780632b651a6c1461037d578063313ce5671461039d57806334cb3d7f146103b9578063368dfc18146103d957600080fd5b80631b6a8759116101f85780631b6a8759146102cf5780631dc6f5a5146102e457806323b872dd1461030857806327a9b42414610328578063298410e51461033d57600080fd5b806306fdde0314610235578063095ea7b31461026057806318160ddd1461029057806319f37361146102af57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024a6107a2565b604051610257919061488b565b60405180910390f35b34801561026c57600080fd5b5061028061027b366004614566565b610834565b6040519015158152602001610257565b34801561029c57600080fd5b506002545b604051908152602001610257565b3480156102bb57600080fd5b506102806102ca36600461435b565b61084e565b3480156102db57600080fd5b506102a161085b565b3480156102f057600080fd5b506102f961086c565b604051610257939291906147ff565b34801561031457600080fd5b506102806103233660046143a7565b6109d9565b61033b6103363660046145ef565b6109ff565b005b34801561034957600080fd5b5061033b61035836600461435b565b610bd0565b34801561036957600080fd5b5061033b6103783660046146cf565b610bf0565b34801561038957600080fd5b5061033b6103983660046143e2565b610c7c565b3480156103a957600080fd5b5060405160128152602001610257565b3480156103c557600080fd5b506102a16103d436600461435b565b610e0b565b3480156103e557600080fd5b5061033b6103f4366004614751565b610e2f565b34801561040557600080fd5b5061044b610414366004614751565b60c081901c9167ffffffffffffffff608083901c81169261ffff603082901c811693602083901c9091169260409290921c90911690565b604080519586526020860194909452928401919091526060830152608082015260a001610257565b34801561047f57600080fd5b506102a1610ea7565b34801561049457600080fd5b506102806104a3366004614566565b610f3e565b3480156104b457600080fd5b5061033b6104c33660046143e2565b610f60565b3480156104d457600080fd5b5061033b6104e33660046145ef565b6110ce565b61033b6104f63660046144f3565b6112fb565b34801561050757600080fd5b5061052f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610257565b34801561055357600080fd5b5061033b61056236600461458f565b611508565b34801561057357600080fd5b506102a161058236600461435b565b6001600160a01b031660009081526020819052604090205490565b3480156105a957600080fd5b5061033b6116f9565b61033b6105c0366004614488565b61170d565b3480156105d157600080fd5b50600a546001600160a01b031661052f565b3480156105ef57600080fd5b5061052f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561062357600080fd5b5061052f610632366004614751565b6118a6565b34801561064357600080fd5b5061024a6118b3565b34801561065857600080fd5b50610280610667366004614566565b6118c2565b34801561067857600080fd5b50610280610687366004614566565b611948565b34801561069857600080fd5b5061033b6106a7366004614682565b611956565b3480156106b857600080fd5b506106e06106c736600461435b565b6009602052600090815260409020805460019091015482565b60408051928352602083019190915201610257565b34801561070157600080fd5b5061033b6107103660046145ef565b611a47565b34801561072157600080fd5b506102a1610730366004614375565b611c56565b34801561074157600080fd5b5061028061075036600461435b565b611c81565b34801561076157600080fd5b506102a161077036600461435b565b60066020526000908152604090205481565b34801561078e57600080fd5b5061033b61079d36600461435b565b611cb1565b6060600380546107b190614a94565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614a94565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b600033610842818585611da9565b60019150505b92915050565b6000610848600783611ecd565b60006108676007611eef565b905090565b60608060008061087a61085b565b905060008167ffffffffffffffff8111156108a557634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108ce578160200160208202803683370190505b50905060008267ffffffffffffffff8111156108fa57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610923578160200160208202803683370190505b50905060005b838110156109bf57600061093c826118a6565b905061094781610e0b565b84838151811061096757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508083838151811061099457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015250806109b781614ac9565b915050610929565b5081816109cb60025490565b955095509550505050909192565b6000336109e7858285611ef9565b6109f2858585611f73565b60019150505b9392505050565b8480421115610a295760405162461bcd60e51b8152600401610a20906148be565b60405180910390fd5b610a328961084e565b610a4e5760405162461bcd60e51b8152600401610a20906148e8565b610a787f000000000000000000000000000000000000000000000000000000000000000089612141565b6000610aa87f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b8b6121e2565b9050610ab4818661222b565b610ac2876407915f3c801090565b15610b135742610af57f00000000000000000000000000000000000000000000000000000000000000008b8d8c8c61232a565b1015610b135760405162461bcd60e51b8152600401610a20906148be565b610b3d7f00000000000000000000000000000000000000000000000000000000000000008a612454565b610b478a896124a0565b610b5b6001600160a01b038b16878a6124c4565b856001600160a01b03168a6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600080516020614b208339815191528c8c8989604051610bbc9493929190614918565b60405180910390a450505050505050505050565b610bd8612527565b610be3600782611d27565b50610bed81612581565b50565b6000855b80821015610c63576000888884818110610c1e57634e487b7160e01b600052603260045260246000fd5b9050602002013590506000811115610c5057610c50333083610c3f876118a6565b6001600160a01b031692919061261c565b82610c5a81614ac9565b93505050610bf4565b610c72338989898989896112fb565b5050505050505050565b8480421115610c9d5760405162461bcd60e51b8152600401610a20906148be565b610ca68a61084e565b8015610cb65750610cb68961084e565b610cfc5760405162461bcd60e51b8152602060048201526017602482015276436c69707065723a20496e76616c696420746f6b656e7360481b6044820152606401610a20565b6000610d0c8b8b8b8b8b8b6121e2565b9050610d18818661222b565b506000610d248b612654565b90506000610d318c610e0b565b610d3b9083614a51565b90506000610d4a8b838c612724565b9050610d5a896407915f3c801090565b15610d8b5742610d6d8e848f858e61232a565b1015610d8b5760405162461bcd60e51b8152600401610a20906148be565b610d958d846127ad565b610d9f8c826124a0565b610db36001600160a01b038d1689836124c4565b876001600160a01b03168c6001600160a01b03168e6001600160a01b0316600080516020614b2083398151915285858b8b604051610df49493929190614918565b60405180910390a450505050505050505050505050565b6001600160a01b03166000908152600660205260409020546001600160d81b031690565b6000610e3a60025490565b610e49836402540be400614a32565b610e53919061499b565b9050610e5f33836127eb565b610e6881612939565b604080518381526020810183905233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6910160405180910390a25050565b6000610eb233611c81565b610f105760405162461bcd60e51b815260206004820152602960248201527f436c69707065724469726563743a204465706f7369742063616e6e6f74206265604482015268081d5b9b1bd8dad95960ba1b6064820152608401610a20565b50336000818152600960205260408120600181018054918390559190915590610f3b90309083611f73565b90565b600033610842818585610f518383611c56565b610f5b9190614955565b611da9565b8480421115610f815760405162461bcd60e51b8152600401610a20906148be565b610f8a8a61084e565b8015610f9a5750610f9a8961084e565b610fe05760405162461bcd60e51b8152602060048201526017602482015276436c69707065723a20496e76616c696420746f6b656e7360481b6044820152606401610a20565b610ff56001600160a01b038b1633308b61261c565b60006110058b8b8b8b8b8b6121e2565b9050611011818661222b565b61101f876407915f3c801090565b1561105057426110328c8b8d8c8c61232a565b10156110505760405162461bcd60e51b8152600401610a20906148be565b61105a8b8a612454565b6110648a896124a0565b6110786001600160a01b038b16878a6124c4565b856001600160a01b03168a6001600160a01b03168c6001600160a01b0316600080516020614b208339815191528c8c89896040516110b99493929190614918565b60405180910390a45050505050505050505050565b84804211156110ef5760405162461bcd60e51b8152600401610a20906148be565b6110f88961084e565b6111145760405162461bcd60e51b8152600401610a20906148e8565b60006111448a7f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b6121e2565b9050611150818661222b565b600061115b8b612654565b905060006111688c610e0b565b6111729083614a51565b905060006111818c838d612724565b90506111918a6407915f3c801090565b156111e257426111c48e847f0000000000000000000000000000000000000000000000000000000000000000858f61232a565b10156111e25760405162461bcd60e51b8152600401610a20906148be565b6111ec8d846127ad565b6112167f0000000000000000000000000000000000000000000000000000000000000000826124a0565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b5050505061129a8982612141565b886001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168e6001600160a01b0316600080516020614b2083398151915285858c8c604051610df49493929190614918565b818042111561131c5760405162461bcd60e51b8152600401610a20906148be565b341561134c5761134c7f000000000000000000000000000000000000000000000000000000000000000034612141565b336001600160a01b038916146113b45760405162461bcd60e51b815260206004820152602760248201527f4c69737465642073656e64657220646f6573206e6f74206d61746368206d73676044820152661739b2b73232b960c91b6064820152608401610a20565b60006113c48989898989896129a1565b90506113d0818461222b565b6000875b808210156114ac5760008a8a848181106113fe57634e487b7160e01b600052603260045260246000fd5b905060200201359050600081111561149957600061141b846118a6565b9050600061142882612654565b90508261143483610e0b565b61143e9083614a51565b101561148c5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e206465706f7369740000000000006044820152606401610a20565b61149682826127ad565b50505b826114a381614ac9565b935050506113d4565b6114b78b89896129b2565b60408051888152602081018a90526001600160a01b038d16917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a25050505050505050505050565b81804211156115295760405162461bcd60e51b8152600401610a20906148be565b336001600160a01b0388161461158f5760405162461bcd60e51b815260206004820152602560248201527f746f6b656e486f6c64657220646f6573206e6f74206d61746368206d73672e7360448201526432b73232b960d91b6064820152608401610a20565b60006001600160a01b0386166115c657507f0000000000000000000000000000000000000000000000000000000000000000945060015b60006115d589898989896129cc565b90506115e1818561222b565b6115eb33896127eb565b6115f587876124a0565b811561168457604051632e1a7d4d60e01b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b5050505061167f3387612141565b611698565b6116986001600160a01b03881633886124c4565b866001600160a01b0316896001600160a01b03167f41e79959bad1d45680578f8a544fb5af76d72b04090e65a51b4d0eaab959a9ab8a896040516116e6929190918252602082015260400190565b60405180910390a3505050505050505050565b611701612527565b61170b6000612a13565b565b818042111561172e5760405162461bcd60e51b8152600401610a20906148be565b341561175e5761175e7f000000000000000000000000000000000000000000000000000000000000000034612141565b336001600160a01b03891614801561177a575061177a8761084e565b6117b65760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610a20565b60006117c6898989898989612a65565b90506117d2818461222b565b60006117dd89612654565b9050876117e98a610e0b565b6117f39083614a51565b10156118415760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e206465706f7369740000000000006044820152606401610a20565b61184b89826127ad565b6118568a88886129b2565b60408051878152602081018990526001600160a01b038c16917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a250505050505050505050565b6000610848600783612a76565b6060600480546107b190614a94565b600033816118d08286611c56565b9050838110156119305760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a20565b61193d8286868403611da9565b506001949350505050565b600033610842818585611f73565b81804211156119775760405162461bcd60e51b8152600401610a20906148be565b6119808761084e565b6119bc5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610a20565b6119d16001600160a01b03881633308961261c565b60006119e1338989898989612a65565b90506119ed818461222b565b6119f78888612454565b611a023387876129b2565b604080518681526020810188905233917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a25050505050505050565b8480421115611a685760405162461bcd60e51b8152600401610a20906148be565b611a718961084e565b611a8d5760405162461bcd60e51b8152600401610a20906148e8565b611aa26001600160a01b038a1633308b61261c565b6000611ad28a7f00000000000000000000000000000000000000000000000000000000000000008b8b8b8b6121e2565b9050611ade818661222b565b611aec876407915f3c801090565b15611b3d5742611b1f8b8b7f00000000000000000000000000000000000000000000000000000000000000008c8c61232a565b1015611b3d5760405162461bcd60e51b8152600401610a20906148be565b611b478a8a612454565b611b717f0000000000000000000000000000000000000000000000000000000000000000896124a0565b604051632e1a7d4d60e01b8152600481018990527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b50505050611bf58689612141565b856001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168b6001600160a01b0316600080516020614b208339815191528c8c8989604051610bbc9493929190614918565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03811660009081526009602052604081206001810154158015906109f857505442101592915050565b611cb9612527565b6001600160a01b038116611d1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a20565b610bed81612a13565b60006109f8836001600160a01b038416612a82565b60006001600160d81b03821115611da55760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663136206269747360c81b6064820152608401610a20565b5090565b6001600160a01b038316611e0b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a20565b6001600160a01b038216611e6c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a20565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038116600090815260018301602052604081205415156109f8565b6000610848825490565b6000611f058484611c56565b90506000198114611f6d5781811015611f605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a20565b611f6d8484848403611da9565b50505050565b6001600160a01b038316611fd75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a20565b6001600160a01b0382166120395760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a20565b6001600160a01b038316600090815260208190526040902054818110156120b15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a20565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120e8908490614955565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161213491815260200190565b60405180910390a3611f6d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461218e576040519150601f19603f3d011682016040523d82523d6000602084013e612193565b606091505b50509050806121dd5760405162461bcd60e51b815260206004820152601660248201527510d85b1b081dda5d1a081d985b1d594819985a5b195960521b6044820152606401610a20565b505050565b6000806121f3888888888888612ad1565b905061221f7f000000000000000000000000000000000000000000000000000000000000000082612c09565b98975050505050505050565b600060018361223d6020850185614781565b604080516000815260208181018084529490945260ff9092168282015291850135606082015290840135608082015260a0016020604051602081039080840390855afa158015612291573d6000803e3d6000fd5b5050506020604051035190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146121dd5760405162461bcd60e51b815260206004820152602360248201527f4d657373616765207369676e656420627920696e636f7272656374206164647260448201526265737360e81b6064820152608401610a20565b60006123576040518060800160405280600081526020016000815260200160008152602001600081525090565b60c083901c67ffffffffffffffff608085901c81169061ffff603087901c811691602088901c90911690604088901c166123908c612c49565b604088015286526123a08a612c49565b6060880152602087015260408601516123fc906123bd908d614a32565b6040880151885188916123cf91614a32565b868a606001518e6123e09190614a32565b898c606001518d602001516123f59190614a32565b8989612cde565b61243d5760405162461bcd60e51b815260206004820152601260248201527110db1a5c1c195c8e88125b9d985c9a585b9d60721b6044820152606401610a20565b505063ffffffff9095169998505050505050505050565b600080600061246285612e93565b9194509250905061247d83836124788785614955565b612f34565b6001600160a01b0390951660009081526006602052604090209490945550505050565b60008060006124ae85612e93565b9194509250905061247d83836124788785614a51565b6040516001600160a01b0383166024820152604481018290526121dd90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f77565b600a546001600160a01b0316331461170b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a20565b612600816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156125bd57600080fd5b505afa1580156125d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f5919061479d565b600061247884612654565b6001600160a01b03909116600090815260066020526040902055565b6040516001600160a01b0380851660248301528316604482015260648101829052611f6d9085906323b872dd60e01b906084016124f0565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1790529051600091829182916001600160a01b038616916126ab91906147e3565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126ff57506020815110155b61270857600080fd5b8080602001905181019061271c9190614769565b949350505050565b6000838314156127355750806109f8565b600084612747856402540be400614a32565b612751919061499b565b90506127666402540be4006302faf080614955565b811061279d576402540be40083612781826302faf080614955565b61278b9190614a32565b612795919061499b565b9150506109f8565b6402540be40061278b8483614a32565b6000806127b984612e93565b50915091506127c9828285612f34565b6001600160a01b03909416600090815260066020526040902093909355505050565b6001600160a01b03821661284b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a20565b6001600160a01b038216600090815260208190526040902054818110156128bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a20565b6001600160a01b03831660009081526020819052604081208383039055600280548492906128ee908490614a51565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600080600061294661085b565b90505b80821015611f6d57600061295c836118a6565b90506402540be40061296d82610e0b565b6129779087614a32565b612981919061499b565b935061298e813386613049565b8261299881614ac9565b93505050612949565b6000806121f38888888888886130c8565b816129c1576121dd83826131fc565b6121dd8383836132db565b6000806129dc878787878761344f565b9050612a087f000000000000000000000000000000000000000000000000000000000000000082612c09565b979650505050505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806121f388888888888861356c565b60006109f8838361366d565b6000818152600183016020526040812054612ac957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610848565b506000610848565b6000604051602001612b90907f4f66666572537472756374286164647265737320696e7075745f746f6b656e2c81527f61646472657373206f75747075745f746f6b656e2c75696e7432353620696e7060208201527f75745f616d6f756e742c75696e74323536206f75747075745f616d6f756e742c60408201527f75696e7432353620676f6f645f756e74696c2c6164647265737320646573746960608201526e6e6174696f6e5f616464726573732960881b6080820152608f0190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03808a169183019190915280881660608301526080820187905260a0820186905260c08201859052831660e0820152610100015b6040516020818303038152906040528051906020012090509695505050505050565b60405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6001600160a01b0381166000908152600660205260408120546001600160d81b038116919060f881901c6012811415612c855760019250612cd7565b6012811015612c9c5780601203600a0a9250612cd7565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420646563696d616c7360801b6044820152606401610a20565b5050915091565b60008080806305f5e100612cf28c8e614a32565b612cfc919061499b565b90506000612d13612d0d8c84614a32565b876136a5565b90508015612d455780612d2e83670de0b6b3a7640000614a32565b612d38919061499b565b612d429085614955565b93505b60006305f5e100612d568a8c614a32565b612d60919061499b565b90506000612d77612d718a84614a32565b896136a5565b90508015612da95780612d9283670de0b6b3a7640000614a32565b612d9c919061499b565b612da69087614955565b95505b5050505060006305f5e1008d8c612dc09190614955565b612dca908e614a32565b612dd4919061499b565b90506000612de5612d0d8c84614a32565b90508015612e175780612e0083670de0b6b3a7640000614a32565b612e0a919061499b565b612e149084614955565b92505b60006305f5e100612e288c8b614a51565b612e32908c614a32565b612e3c919061499b565b90506000612e4d612d718a84614a32565b90508015612e7f5780612e6883670de0b6b3a7640000614a32565b612e72919061499b565b612e7c9086614955565b94505b50505091109b9a5050505050505050505050565b6001600160a01b03811660009081526006602052604081205460f881901c91906001600160d81b0381169060d881901c612ecd3243614955565b93508063ffffffff168463ffffffff161415612f2b5760405162461bcd60e51b815260206004820152601d60248201527f436c69707065723a204661696c656420747820756e697175656e6573730000006044820152606401610a20565b50509193909250565b6000612f3f82611d3c565b6001600160d81b0316612f6d63ffffffff60d81b60d886901b166001600160f81b031960f888901b16614955565b61271c9190614955565b6000612fcc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136f19092919063ffffffff16565b8051909150156121dd5780806020019051810190612fea9190614731565b6121dd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a20565b6002600554141561309c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a20565b60026005556130b56001600160a01b03841683836124c4565b6130be83612581565b5050600160055550565b60008086866040516020016130de9291906147b9565b604051602081830303815290604052805190602001209050604051602001613190907f4465706f73697453747275637428616464726573732073656e6465722c75696e81527f743235365b5d206465706f7369745f616d6f756e74732c75696e74323536206460208201527f6179735f6c6f636b65642c75696e7432353620706f6f6c5f746f6b656e732c75604082015271696e7432353620676f6f645f756e74696c2960701b606082015260720190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038a1690820152606081018290526080810186905260a0810185905260c0810184905260e001604051602081830303815290604052805190602001209150509695505050505050565b6001600160a01b0382166132525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a20565b80600260008282546132649190614955565b90915550506001600160a01b03821660009081526020819052604081208054839290613291908490614955565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600082116133665760405162461bcd60e51b815260206004820152604c60248201527f436c69707065724469726563743a2043616e6e6f74206372656174652076657360448201527f74696e67206465706f73697420776974686f757420706f73697469766520766560648201526b1cdd1a5b99c81c195c9a5bd960a21b608482015260a401610a20565b6001600160a01b038316600090815260096020526040902060010154156133ee5760405162461bcd60e51b815260206004820152603660248201527f436c69707065724469726563743a204465706f7369746f7220616c7265616479604482015275081a185cc8185b881858dd1a5d994819195c1bdcda5d60521b6064820152608401610a20565b60006040518060400160405280846201518061340a9190614a32565b6134149042614955565b815260209081018490526001600160a01b0386166000908152600982526040902082518155908201516001909101559050611f6d30836131fc565b6000604051602001613505907f5769746864726177616c537472756374286164647265737320746f6b656e5f6881527f6f6c6465722c75696e7432353620706f6f6c5f746f6b656e5f616d6f756e745f60208201527f746f5f6275726e2c616464726573732061737365745f616464726573732c756960408201527f6e743235362061737365745f616d6f756e742c75696e7432353620676f6f645f606082015265756e74696c2960d01b608082015260860190565b60408051808303601f190181528282528051602091820120818401526001600160a01b039889168383015260608301979097529490961660808701525060a085019190915260c0808501919091528151808503909101815260e09093019052815191012090565b6000604051602001613613907f53696e676c654465706f73697453747275637428616464726573732073656e6481527f65722c6164647265737320746f6b656e2c75696e7432353620616d6f756e742c60208201527f75696e7432353620646179735f6c6f636b65642c75696e7432353620706f6f6c60408201527f5f746f6b656e732c75696e7432353620676f6f645f756e74696c2900000000006060820152607b0190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03808a1691830191909152871660608201526080810186905260a0810185905260c0810184905260e0810183905261010001612be7565b600082600001828154811061369257634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b6000826136b457506000610848565b6136ea670de0b6b3a76400006136d16136cc86613700565b61376a565b6136db90856149af565b6136e5919061496d565b613775565b9050610848565b606061271c8484600085613788565b60006001600160ff1b03821115611da55760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610a20565b6000610848826138ae565b60006108486137838361398d565b613a38565b6060824710156137e95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a20565b6001600160a01b0385163b6138405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a20565b600080866001600160a01b0316858760405161385c91906147e3565b60006040518083038185875af1925050503d8060008114613899576040519150601f19603f3d011682016040523d82523d6000602084013e61389e565b606091505b5091509150612a08828286613a8a565b60008082136138d35760405163309fa7dd60e11b815260048101839052602401610a20565b6000670de0b6b3a764000083126138ec57506001613906565b6000199050826ec097ce7bc90715b34b9f10000000000492505b600061391b670de0b6b3a76400008505613ac3565b670de0b6b3a7640000808202945090915084821d9081141561393f57505002919050565b6706f05b59d3b200005b600081131561398457670de0b6b3a7640000828002059150671bc16d674ec80000821261397c579384019360019190911d905b60011d613949565b50505002919050565b6000808212156139ef5768033dd1780914b97114198212156139b157506000919050565b6139bd8260000361398d565b6ec097ce7bc90715b34b9f1000000000816139e857634e487b7160e01b600052601260045260246000fd5b0592915050565b680a688906bd8b0000008212613a1b5760405163e69458f960e01b815260048101839052602401610a20565b670de0b6b3a7640000604083901b046109f881613ba7565b919050565b600080821215611da55760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610a20565b60608315613a995750816109f8565b825115613aa95782518084602001fd5b8160405162461bcd60e51b8152600401610a20919061488b565b6000600160801b8210613ae357608091821c91613ae09082614955565b90505b680100000000000000008210613b0657604091821c91613b039082614955565b90505b6401000000008210613b2557602091821c91613b229082614955565b90505b620100008210613b4257601091821c91613b3f9082614955565b90505b6101008210613b5e57600891821c91613b5b9082614955565b90505b60108210613b7957600491821c91613b769082614955565b90505b60048210613b9457600291821c91613b919082614955565b90505b60028210613a3357610848600182614955565b600160bf1b678000000000000000821615613bcb5768016a09e667f3bcc9090260401c5b674000000000000000821615613bea576801306fe0a31b7152df0260401c5b672000000000000000821615613c09576801172b83c7d517adce0260401c5b671000000000000000821615613c285768010b5586cf9890f62a0260401c5b670800000000000000821615613c47576801059b0d31585743ae0260401c5b670400000000000000821615613c6657680102c9a3e778060ee70260401c5b670200000000000000821615613c855768010163da9fb33356d80260401c5b670100000000000000821615613ca457680100b1afa5abcbed610260401c5b6680000000000000821615613cc25768010058c86da1c09ea20260401c5b6640000000000000821615613ce0576801002c605e2e8cec500260401c5b6620000000000000821615613cfe57680100162f3904051fa10260401c5b6610000000000000821615613d1c576801000b175effdc76ba0260401c5b6608000000000000821615613d3a57680100058ba01fb9f96d0260401c5b6604000000000000821615613d585768010002c5cc37da94920260401c5b6602000000000000821615613d76576801000162e525ee05470260401c5b6601000000000000821615613d945768010000b17255775c040260401c5b65800000000000821615613db1576801000058b91b5bc9ae0260401c5b65400000000000821615613dce57680100002c5c89d5ec6d0260401c5b65200000000000821615613deb5768010000162e43f4f8310260401c5b65100000000000821615613e0857680100000b1721bcfc9a0260401c5b65080000000000821615613e255768010000058b90cf1e6e0260401c5b65040000000000821615613e42576801000002c5c863b73f0260401c5b65020000000000821615613e5f57680100000162e430e5a20260401c5b65010000000000821615613e7c576801000000b1721835510260401c5b648000000000821615613e9857680100000058b90c0b490260401c5b644000000000821615613eb45768010000002c5c8601cc0260401c5b642000000000821615613ed0576801000000162e42fff00260401c5b641000000000821615613eec5768010000000b17217fbb0260401c5b640800000000821615613f08576801000000058b90bfce0260401c5b640400000000821615613f2457680100000002c5c85fe30260401c5b640200000000821615613f405768010000000162e42ff10260401c5b640100000000821615613f5c57680100000000b17217f80260401c5b6380000000821615613f775768010000000058b90bfc0260401c5b6340000000821615613f92576801000000002c5c85fe0260401c5b6320000000821615613fad57680100000000162e42ff0260401c5b6310000000821615613fc8576801000000000b17217f0260401c5b6308000000821615613fe357680100000000058b90c00260401c5b6304000000821615613ffe5768010000000002c5c8600260401c5b6302000000821615614019576801000000000162e4300260401c5b63010000008216156140345768010000000000b172180260401c5b6280000082161561404e576801000000000058b90c0260401c5b6240000082161561406857680100000000002c5c860260401c5b622000008216156140825768010000000000162e430260401c5b6210000082161561409c57680100000000000b17210260401c5b620800008216156140b65768010000000000058b910260401c5b620400008216156140d0576801000000000002c5c80260401c5b620200008216156140ea57680100000000000162e40260401c5b62010000821615614104576801000000000000b1720260401c5b61800082161561411d57680100000000000058b90260401c5b6140008216156141365768010000000000002c5d0260401c5b61200082161561414f576801000000000000162e0260401c5b6110008216156141685768010000000000000b170260401c5b610800821615614181576801000000000000058c0260401c5b61040082161561419a57680100000000000002c60260401c5b6102008216156141b357680100000000000001630260401c5b6101008216156141cc57680100000000000000b10260401c5b60808216156141e457680100000000000000590260401c5b60408216156141fc576801000000000000002c0260401c5b602082161561421457680100000000000000160260401c5b601082161561422c576801000000000000000b0260401c5b600882161561424457680100000000000000060260401c5b600482161561425c57680100000000000000030260401c5b600282161561427457680100000000000000010260401c5b600182161561428c57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b80356001600160a01b0381168114613a3357600080fd5b60008083601f8401126142cb578182fd5b50813567ffffffffffffffff8111156142e2578182fd5b6020830191508360208260051b85010111156142fd57600080fd5b9250929050565b60008083601f840112614315578182fd5b50813567ffffffffffffffff81111561432c578182fd5b6020830191508360208285010111156142fd57600080fd5b600060608284031215614355578081fd5b50919050565b60006020828403121561436c578081fd5b6109f8826142a3565b60008060408385031215614387578081fd5b614390836142a3565b915061439e602084016142a3565b90509250929050565b6000806000606084860312156143bb578081fd5b6143c4846142a3565b92506143d2602085016142a3565b9150604084013590509250925092565b60008060008060008060008060006101408a8c031215614400578485fd5b6144098a6142a3565b985061441760208b016142a3565b975060408a0135965060608a0135955060808a0135945061443a60a08b016142a3565b93506144498b60c08c01614344565b92506101208a013567ffffffffffffffff811115614465578283fd5b6144718c828d01614304565b915080935050809150509295985092959850929598565b6000806000806000806000610120888a0312156144a3578283fd5b6144ac886142a3565b96506144ba602089016142a3565b955060408801359450606088013593506080880135925060a088013591506144e58960c08a01614344565b905092959891949750929550565b6000806000806000806000610100888a03121561450e578283fd5b614517886142a3565b9650602088013567ffffffffffffffff811115614532578384fd5b61453e8a828b016142ba565b9097509550506040880135935060608801359250608088013591506144e58960a08a01614344565b60008060408385031215614578578182fd5b614581836142a3565b946020939093013593505050565b60008060008060008061010087890312156145a8578182fd5b6145b1876142a3565b9550602087013594506145c6604088016142a3565b935060608701359250608087013591506145e38860a08901614344565b90509295509295509295565b600080600080600080600080610120898b03121561460b578182fd5b614614896142a3565b975060208901359650604089013595506060890135945061463760808a016142a3565b93506146468a60a08b01614344565b925061010089013567ffffffffffffffff811115614662578283fd5b61466e8b828c01614304565b999c989b5096995094979396929594505050565b600080600080600080610100878903121561469b578384fd5b6146a4876142a3565b9550602087013594506040870135935060608701359250608087013591506145e38860a08901614344565b60008060008060008060e087890312156146e7578384fd5b863567ffffffffffffffff8111156146fd578485fd5b61470989828a016142ba565b9097509550506020870135935060408701359250606087013591506145e38860808901614344565b600060208284031215614742578081fd5b815180151581146109f8578182fd5b600060208284031215614762578081fd5b5035919050565b60006020828403121561477a578081fd5b5051919050565b600060208284031215614792578081fd5b81356109f881614b10565b6000602082840312156147ae578081fd5b81516109f881614b10565b60006001600160fb1b038311156147ce578081fd5b8260051b808584379190910190815292915050565b600082516147f5818460208701614a68565b9190910192915050565b606080825284519082018190526000906020906080840190828801845b828110156148385781518452928401929084019060010161481c565b50505083810382850152855180825286830191830190845b818110156148755783516001600160a01b031683529284019291840191600101614850565b5050809350505050826040830152949350505050565b60208152600082518060208401526148aa816040850160208701614a68565b601f01601f19169190910160400192915050565b60208082526010908201526f10db1a5c1c195c8e88115e1c1a5c995960821b604082015260600190565b60208082526016908201527521b634b83832b91d1024b73b30b634b2103a37b5b2b760511b604082015260600190565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6000821982111561496857614968614ae4565b500190565b60008261497c5761497c614afa565b600160ff1b82146000198414161561499657614996614ae4565b500590565b6000826149aa576149aa614afa565b500490565b60006001600160ff1b03818413828413808216868404861116156149d5576149d5614ae4565b600160ff1b848712828116878305891216156149f3576149f3614ae4565b858712925087820587128484161615614a0e57614a0e614ae4565b87850587128184161615614a2457614a24614ae4565b505050929093029392505050565b6000816000190483118215151615614a4c57614a4c614ae4565b500290565b600082821015614a6357614a63614ae4565b500390565b60005b83811015614a83578181015183820152602001614a6b565b83811115611f6d5750506000910152565b600181811c90821680614aa857607f821691505b6020821081141561435557634e487b7160e01b600052602260045260246000fd5b6000600019821415614add57614add614ae4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60ff81168114610bed57600080fdfe4be05c8d54f5e056ab2cfa033e9f582057001268c3e28561bb999d35d2c8f2c8a264697066735822122054eacf1c3231a2523257c519d79262964b4be9e403a0eb5ad3c52aa89ebbc4e264736f6c6343000804003300000000000000000000000008938a61ba9523298dbcacee0cda5b371fb7f1f8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000050000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x6080604052600436106102295760003560e01c80635250d7301161012357806395d89b41116100ab578063c72da66a1161006f578063c72da66a146106f5578063dd62ed3e14610715578063eb1c645314610735578063ecc7633d14610755578063f2fde38b1461078257600080fd5b806395d89b4114610637578063a457c2d71461064c578063a9059cbb1461066c578063c0d5ebfd1461068c578063c325a549146106ac57600080fd5b8063715018a6116100f2578063715018a61461059d57806387e08c25146105b25780638da5cb5b146105c55780638dda8f3f146105e357806392a91a3a1461061757600080fd5b80635250d730146104e85780635aecdda5146104fb57806362fb4e011461054757806370a082311461056757600080fd5b806329d0c8fc116101b15780633721f29c116101755780633721f29c146103f9578063377a368c1461047357806339509351146104885780633b26e4eb146104a85780634cb6864c146104c857600080fd5b806329d0c8fc1461035d5780632b651a6c1461037d578063313ce5671461039d57806334cb3d7f146103b9578063368dfc18146103d957600080fd5b80631b6a8759116101f85780631b6a8759146102cf5780631dc6f5a5146102e457806323b872dd1461030857806327a9b42414610328578063298410e51461033d57600080fd5b806306fdde0314610235578063095ea7b31461026057806318160ddd1461029057806319f37361146102af57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024a6107a2565b604051610257919061488b565b60405180910390f35b34801561026c57600080fd5b5061028061027b366004614566565b610834565b6040519015158152602001610257565b34801561029c57600080fd5b506002545b604051908152602001610257565b3480156102bb57600080fd5b506102806102ca36600461435b565b61084e565b3480156102db57600080fd5b506102a161085b565b3480156102f057600080fd5b506102f961086c565b604051610257939291906147ff565b34801561031457600080fd5b506102806103233660046143a7565b6109d9565b61033b6103363660046145ef565b6109ff565b005b34801561034957600080fd5b5061033b61035836600461435b565b610bd0565b34801561036957600080fd5b5061033b6103783660046146cf565b610bf0565b34801561038957600080fd5b5061033b6103983660046143e2565b610c7c565b3480156103a957600080fd5b5060405160128152602001610257565b3480156103c557600080fd5b506102a16103d436600461435b565b610e0b565b3480156103e557600080fd5b5061033b6103f4366004614751565b610e2f565b34801561040557600080fd5b5061044b610414366004614751565b60c081901c9167ffffffffffffffff608083901c81169261ffff603082901c811693602083901c9091169260409290921c90911690565b604080519586526020860194909452928401919091526060830152608082015260a001610257565b34801561047f57600080fd5b506102a1610ea7565b34801561049457600080fd5b506102806104a3366004614566565b610f3e565b3480156104b457600080fd5b5061033b6104c33660046143e2565b610f60565b3480156104d457600080fd5b5061033b6104e33660046145ef565b6110ce565b61033b6104f63660046144f3565b6112fb565b34801561050757600080fd5b5061052f7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b039091168152602001610257565b34801561055357600080fd5b5061033b61056236600461458f565b611508565b34801561057357600080fd5b506102a161058236600461435b565b6001600160a01b031660009081526020819052604090205490565b3480156105a957600080fd5b5061033b6116f9565b61033b6105c0366004614488565b61170d565b3480156105d157600080fd5b50600a546001600160a01b031661052f565b3480156105ef57600080fd5b5061052f7f00000000000000000000000008938a61ba9523298dbcacee0cda5b371fb7f1f881565b34801561062357600080fd5b5061052f610632366004614751565b6118a6565b34801561064357600080fd5b5061024a6118b3565b34801561065857600080fd5b50610280610667366004614566565b6118c2565b34801561067857600080fd5b50610280610687366004614566565b611948565b34801561069857600080fd5b5061033b6106a7366004614682565b611956565b3480156106b857600080fd5b506106e06106c736600461435b565b6009602052600090815260409020805460019091015482565b60408051928352602083019190915201610257565b34801561070157600080fd5b5061033b6107103660046145ef565b611a47565b34801561072157600080fd5b506102a1610730366004614375565b611c56565b34801561074157600080fd5b5061028061075036600461435b565b611c81565b34801561076157600080fd5b506102a161077036600461435b565b60066020526000908152604090205481565b34801561078e57600080fd5b5061033b61079d36600461435b565b611cb1565b6060600380546107b190614a94565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614a94565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b600033610842818585611da9565b60019150505b92915050565b6000610848600783611ecd565b60006108676007611eef565b905090565b60608060008061087a61085b565b905060008167ffffffffffffffff8111156108a557634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108ce578160200160208202803683370190505b50905060008267ffffffffffffffff8111156108fa57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610923578160200160208202803683370190505b50905060005b838110156109bf57600061093c826118a6565b905061094781610e0b565b84838151811061096757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508083838151811061099457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015250806109b781614ac9565b915050610929565b5081816109cb60025490565b955095509550505050909192565b6000336109e7858285611ef9565b6109f2858585611f73565b60019150505b9392505050565b8480421115610a295760405162461bcd60e51b8152600401610a20906148be565b60405180910390fd5b610a328961084e565b610a4e5760405162461bcd60e51b8152600401610a20906148e8565b610a787f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc289612141565b6000610aa87f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b8b8b8b8b6121e2565b9050610ab4818661222b565b610ac2876407915f3c801090565b15610b135742610af57f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b8d8c8c61232a565b1015610b135760405162461bcd60e51b8152600401610a20906148be565b610b3d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a612454565b610b478a896124a0565b610b5b6001600160a01b038b16878a6124c4565b856001600160a01b03168a6001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316600080516020614b208339815191528c8c8989604051610bbc9493929190614918565b60405180910390a450505050505050505050565b610bd8612527565b610be3600782611d27565b50610bed81612581565b50565b6000855b80821015610c63576000888884818110610c1e57634e487b7160e01b600052603260045260246000fd5b9050602002013590506000811115610c5057610c50333083610c3f876118a6565b6001600160a01b031692919061261c565b82610c5a81614ac9565b93505050610bf4565b610c72338989898989896112fb565b5050505050505050565b8480421115610c9d5760405162461bcd60e51b8152600401610a20906148be565b610ca68a61084e565b8015610cb65750610cb68961084e565b610cfc5760405162461bcd60e51b8152602060048201526017602482015276436c69707065723a20496e76616c696420746f6b656e7360481b6044820152606401610a20565b6000610d0c8b8b8b8b8b8b6121e2565b9050610d18818661222b565b506000610d248b612654565b90506000610d318c610e0b565b610d3b9083614a51565b90506000610d4a8b838c612724565b9050610d5a896407915f3c801090565b15610d8b5742610d6d8e848f858e61232a565b1015610d8b5760405162461bcd60e51b8152600401610a20906148be565b610d958d846127ad565b610d9f8c826124a0565b610db36001600160a01b038d1689836124c4565b876001600160a01b03168c6001600160a01b03168e6001600160a01b0316600080516020614b2083398151915285858b8b604051610df49493929190614918565b60405180910390a450505050505050505050505050565b6001600160a01b03166000908152600660205260409020546001600160d81b031690565b6000610e3a60025490565b610e49836402540be400614a32565b610e53919061499b565b9050610e5f33836127eb565b610e6881612939565b604080518381526020810183905233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6910160405180910390a25050565b6000610eb233611c81565b610f105760405162461bcd60e51b815260206004820152602960248201527f436c69707065724469726563743a204465706f7369742063616e6e6f74206265604482015268081d5b9b1bd8dad95960ba1b6064820152608401610a20565b50336000818152600960205260408120600181018054918390559190915590610f3b90309083611f73565b90565b600033610842818585610f518383611c56565b610f5b9190614955565b611da9565b8480421115610f815760405162461bcd60e51b8152600401610a20906148be565b610f8a8a61084e565b8015610f9a5750610f9a8961084e565b610fe05760405162461bcd60e51b8152602060048201526017602482015276436c69707065723a20496e76616c696420746f6b656e7360481b6044820152606401610a20565b610ff56001600160a01b038b1633308b61261c565b60006110058b8b8b8b8b8b6121e2565b9050611011818661222b565b61101f876407915f3c801090565b1561105057426110328c8b8d8c8c61232a565b10156110505760405162461bcd60e51b8152600401610a20906148be565b61105a8b8a612454565b6110648a896124a0565b6110786001600160a01b038b16878a6124c4565b856001600160a01b03168a6001600160a01b03168c6001600160a01b0316600080516020614b208339815191528c8c89896040516110b99493929190614918565b60405180910390a45050505050505050505050565b84804211156110ef5760405162461bcd60e51b8152600401610a20906148be565b6110f88961084e565b6111145760405162461bcd60e51b8152600401610a20906148e8565b60006111448a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b8b8b8b6121e2565b9050611150818661222b565b600061115b8b612654565b905060006111688c610e0b565b6111729083614a51565b905060006111818c838d612724565b90506111918a6407915f3c801090565b156111e257426111c48e847f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2858f61232a565b10156111e25760405162461bcd60e51b8152600401610a20906148be565b6111ec8d846127ad565b6112167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2826124a0565b604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b5050505061129a8982612141565b886001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168e6001600160a01b0316600080516020614b2083398151915285858c8c604051610df49493929190614918565b818042111561131c5760405162461bcd60e51b8152600401610a20906148be565b341561134c5761134c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc234612141565b336001600160a01b038916146113b45760405162461bcd60e51b815260206004820152602760248201527f4c69737465642073656e64657220646f6573206e6f74206d61746368206d73676044820152661739b2b73232b960c91b6064820152608401610a20565b60006113c48989898989896129a1565b90506113d0818461222b565b6000875b808210156114ac5760008a8a848181106113fe57634e487b7160e01b600052603260045260246000fd5b905060200201359050600081111561149957600061141b846118a6565b9050600061142882612654565b90508261143483610e0b565b61143e9083614a51565b101561148c5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e206465706f7369740000000000006044820152606401610a20565b61149682826127ad565b50505b826114a381614ac9565b935050506113d4565b6114b78b89896129b2565b60408051888152602081018a90526001600160a01b038d16917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a25050505050505050505050565b81804211156115295760405162461bcd60e51b8152600401610a20906148be565b336001600160a01b0388161461158f5760405162461bcd60e51b815260206004820152602560248201527f746f6b656e486f6c64657220646f6573206e6f74206d61746368206d73672e7360448201526432b73232b960d91b6064820152608401610a20565b60006001600160a01b0386166115c657507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2945060015b60006115d589898989896129cc565b90506115e1818561222b565b6115eb33896127eb565b6115f587876124a0565b811561168457604051632e1a7d4d60e01b8152600481018790527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b5050505061167f3387612141565b611698565b6116986001600160a01b03881633886124c4565b866001600160a01b0316896001600160a01b03167f41e79959bad1d45680578f8a544fb5af76d72b04090e65a51b4d0eaab959a9ab8a896040516116e6929190918252602082015260400190565b60405180910390a3505050505050505050565b611701612527565b61170b6000612a13565b565b818042111561172e5760405162461bcd60e51b8152600401610a20906148be565b341561175e5761175e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc234612141565b336001600160a01b03891614801561177a575061177a8761084e565b6117b65760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610a20565b60006117c6898989898989612a65565b90506117d2818461222b565b60006117dd89612654565b9050876117e98a610e0b565b6117f39083614a51565b10156118415760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e206465706f7369740000000000006044820152606401610a20565b61184b89826127ad565b6118568a88886129b2565b60408051878152602081018990526001600160a01b038c16917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a250505050505050505050565b6000610848600783612a76565b6060600480546107b190614a94565b600033816118d08286611c56565b9050838110156119305760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a20565b61193d8286868403611da9565b506001949350505050565b600033610842818585611f73565b81804211156119775760405162461bcd60e51b8152600401610a20906148be565b6119808761084e565b6119bc5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610a20565b6119d16001600160a01b03881633308961261c565b60006119e1338989898989612a65565b90506119ed818461222b565b6119f78888612454565b611a023387876129b2565b604080518681526020810188905233917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a25050505050505050565b8480421115611a685760405162461bcd60e51b8152600401610a20906148be565b611a718961084e565b611a8d5760405162461bcd60e51b8152600401610a20906148e8565b611aa26001600160a01b038a1633308b61261c565b6000611ad28a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b8b8b8b6121e2565b9050611ade818661222b565b611aec876407915f3c801090565b15611b3d5742611b1f8b8b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28c8c61232a565b1015611b3d5760405162461bcd60e51b8152600401610a20906148be565b611b478a8a612454565b611b717f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2896124a0565b604051632e1a7d4d60e01b8152600481018990527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b50505050611bf58689612141565b856001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168b6001600160a01b0316600080516020614b208339815191528c8c8989604051610bbc9493929190614918565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03811660009081526009602052604081206001810154158015906109f857505442101592915050565b611cb9612527565b6001600160a01b038116611d1e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a20565b610bed81612a13565b60006109f8836001600160a01b038416612a82565b60006001600160d81b03821115611da55760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663136206269747360c81b6064820152608401610a20565b5090565b6001600160a01b038316611e0b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a20565b6001600160a01b038216611e6c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a20565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038116600090815260018301602052604081205415156109f8565b6000610848825490565b6000611f058484611c56565b90506000198114611f6d5781811015611f605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a20565b611f6d8484848403611da9565b50505050565b6001600160a01b038316611fd75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a20565b6001600160a01b0382166120395760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a20565b6001600160a01b038316600090815260208190526040902054818110156120b15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a20565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120e8908490614955565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161213491815260200190565b60405180910390a3611f6d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461218e576040519150601f19603f3d011682016040523d82523d6000602084013e612193565b606091505b50509050806121dd5760405162461bcd60e51b815260206004820152601660248201527510d85b1b081dda5d1a081d985b1d594819985a5b195960521b6044820152606401610a20565b505050565b6000806121f3888888888888612ad1565b905061221f7faca1869732de658f8d0e60c8b1d1fe4261c5b45296c1b72dc1d035c354a49f1d82612c09565b98975050505050505050565b600060018361223d6020850185614781565b604080516000815260208181018084529490945260ff9092168282015291850135606082015290840135608082015260a0016020604051602081039080840390855afa158015612291573d6000803e3d6000fd5b5050506020604051035190507f00000000000000000000000008938a61ba9523298dbcacee0cda5b371fb7f1f86001600160a01b0316816001600160a01b0316146121dd5760405162461bcd60e51b815260206004820152602360248201527f4d657373616765207369676e656420627920696e636f7272656374206164647260448201526265737360e81b6064820152608401610a20565b60006123576040518060800160405280600081526020016000815260200160008152602001600081525090565b60c083901c67ffffffffffffffff608085901c81169061ffff603087901c811691602088901c90911690604088901c166123908c612c49565b604088015286526123a08a612c49565b6060880152602087015260408601516123fc906123bd908d614a32565b6040880151885188916123cf91614a32565b868a606001518e6123e09190614a32565b898c606001518d602001516123f59190614a32565b8989612cde565b61243d5760405162461bcd60e51b815260206004820152601260248201527110db1a5c1c195c8e88125b9d985c9a585b9d60721b6044820152606401610a20565b505063ffffffff9095169998505050505050505050565b600080600061246285612e93565b9194509250905061247d83836124788785614955565b612f34565b6001600160a01b0390951660009081526006602052604090209490945550505050565b60008060006124ae85612e93565b9194509250905061247d83836124788785614a51565b6040516001600160a01b0383166024820152604481018290526121dd90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f77565b600a546001600160a01b0316331461170b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a20565b612600816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156125bd57600080fd5b505afa1580156125d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f5919061479d565b600061247884612654565b6001600160a01b03909116600090815260066020526040902055565b6040516001600160a01b0380851660248301528316604482015260648101829052611f6d9085906323b872dd60e01b906084016124f0565b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1790529051600091829182916001600160a01b038616916126ab91906147e3565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126ff57506020815110155b61270857600080fd5b8080602001905181019061271c9190614769565b949350505050565b6000838314156127355750806109f8565b600084612747856402540be400614a32565b612751919061499b565b90506127666402540be4006302faf080614955565b811061279d576402540be40083612781826302faf080614955565b61278b9190614a32565b612795919061499b565b9150506109f8565b6402540be40061278b8483614a32565b6000806127b984612e93565b50915091506127c9828285612f34565b6001600160a01b03909416600090815260066020526040902093909355505050565b6001600160a01b03821661284b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a20565b6001600160a01b038216600090815260208190526040902054818110156128bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a20565b6001600160a01b03831660009081526020819052604081208383039055600280548492906128ee908490614a51565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600080600061294661085b565b90505b80821015611f6d57600061295c836118a6565b90506402540be40061296d82610e0b565b6129779087614a32565b612981919061499b565b935061298e813386613049565b8261299881614ac9565b93505050612949565b6000806121f38888888888886130c8565b816129c1576121dd83826131fc565b6121dd8383836132db565b6000806129dc878787878761344f565b9050612a087faca1869732de658f8d0e60c8b1d1fe4261c5b45296c1b72dc1d035c354a49f1d82612c09565b979650505050505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806121f388888888888861356c565b60006109f8838361366d565b6000818152600183016020526040812054612ac957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610848565b506000610848565b6000604051602001612b90907f4f66666572537472756374286164647265737320696e7075745f746f6b656e2c81527f61646472657373206f75747075745f746f6b656e2c75696e7432353620696e7060208201527f75745f616d6f756e742c75696e74323536206f75747075745f616d6f756e742c60408201527f75696e7432353620676f6f645f756e74696c2c6164647265737320646573746960608201526e6e6174696f6e5f616464726573732960881b6080820152608f0190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03808a169183019190915280881660608301526080820187905260a0820186905260c08201859052831660e0820152610100015b6040516020818303038152906040528051906020012090509695505050505050565b60405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6001600160a01b0381166000908152600660205260408120546001600160d81b038116919060f881901c6012811415612c855760019250612cd7565b6012811015612c9c5780601203600a0a9250612cd7565b60405162461bcd60e51b815260206004820152601060248201526f496e76616c696420646563696d616c7360801b6044820152606401610a20565b5050915091565b60008080806305f5e100612cf28c8e614a32565b612cfc919061499b565b90506000612d13612d0d8c84614a32565b876136a5565b90508015612d455780612d2e83670de0b6b3a7640000614a32565b612d38919061499b565b612d429085614955565b93505b60006305f5e100612d568a8c614a32565b612d60919061499b565b90506000612d77612d718a84614a32565b896136a5565b90508015612da95780612d9283670de0b6b3a7640000614a32565b612d9c919061499b565b612da69087614955565b95505b5050505060006305f5e1008d8c612dc09190614955565b612dca908e614a32565b612dd4919061499b565b90506000612de5612d0d8c84614a32565b90508015612e175780612e0083670de0b6b3a7640000614a32565b612e0a919061499b565b612e149084614955565b92505b60006305f5e100612e288c8b614a51565b612e32908c614a32565b612e3c919061499b565b90506000612e4d612d718a84614a32565b90508015612e7f5780612e6883670de0b6b3a7640000614a32565b612e72919061499b565b612e7c9086614955565b94505b50505091109b9a5050505050505050505050565b6001600160a01b03811660009081526006602052604081205460f881901c91906001600160d81b0381169060d881901c612ecd3243614955565b93508063ffffffff168463ffffffff161415612f2b5760405162461bcd60e51b815260206004820152601d60248201527f436c69707065723a204661696c656420747820756e697175656e6573730000006044820152606401610a20565b50509193909250565b6000612f3f82611d3c565b6001600160d81b0316612f6d63ffffffff60d81b60d886901b166001600160f81b031960f888901b16614955565b61271c9190614955565b6000612fcc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136f19092919063ffffffff16565b8051909150156121dd5780806020019051810190612fea9190614731565b6121dd5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a20565b6002600554141561309c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a20565b60026005556130b56001600160a01b03841683836124c4565b6130be83612581565b5050600160055550565b60008086866040516020016130de9291906147b9565b604051602081830303815290604052805190602001209050604051602001613190907f4465706f73697453747275637428616464726573732073656e6465722c75696e81527f743235365b5d206465706f7369745f616d6f756e74732c75696e74323536206460208201527f6179735f6c6f636b65642c75696e7432353620706f6f6c5f746f6b656e732c75604082015271696e7432353620676f6f645f756e74696c2960701b606082015260720190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038a1690820152606081018290526080810186905260a0810185905260c0810184905260e001604051602081830303815290604052805190602001209150509695505050505050565b6001600160a01b0382166132525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a20565b80600260008282546132649190614955565b90915550506001600160a01b03821660009081526020819052604081208054839290613291908490614955565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600082116133665760405162461bcd60e51b815260206004820152604c60248201527f436c69707065724469726563743a2043616e6e6f74206372656174652076657360448201527f74696e67206465706f73697420776974686f757420706f73697469766520766560648201526b1cdd1a5b99c81c195c9a5bd960a21b608482015260a401610a20565b6001600160a01b038316600090815260096020526040902060010154156133ee5760405162461bcd60e51b815260206004820152603660248201527f436c69707065724469726563743a204465706f7369746f7220616c7265616479604482015275081a185cc8185b881858dd1a5d994819195c1bdcda5d60521b6064820152608401610a20565b60006040518060400160405280846201518061340a9190614a32565b6134149042614955565b815260209081018490526001600160a01b0386166000908152600982526040902082518155908201516001909101559050611f6d30836131fc565b6000604051602001613505907f5769746864726177616c537472756374286164647265737320746f6b656e5f6881527f6f6c6465722c75696e7432353620706f6f6c5f746f6b656e5f616d6f756e745f60208201527f746f5f6275726e2c616464726573732061737365745f616464726573732c756960408201527f6e743235362061737365745f616d6f756e742c75696e7432353620676f6f645f606082015265756e74696c2960d01b608082015260860190565b60408051808303601f190181528282528051602091820120818401526001600160a01b039889168383015260608301979097529490961660808701525060a085019190915260c0808501919091528151808503909101815260e09093019052815191012090565b6000604051602001613613907f53696e676c654465706f73697453747275637428616464726573732073656e6481527f65722c6164647265737320746f6b656e2c75696e7432353620616d6f756e742c60208201527f75696e7432353620646179735f6c6f636b65642c75696e7432353620706f6f6c60408201527f5f746f6b656e732c75696e7432353620676f6f645f756e74696c2900000000006060820152607b0190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03808a1691830191909152871660608201526080810186905260a0810185905260c0810184905260e0810183905261010001612be7565b600082600001828154811061369257634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b6000826136b457506000610848565b6136ea670de0b6b3a76400006136d16136cc86613700565b61376a565b6136db90856149af565b6136e5919061496d565b613775565b9050610848565b606061271c8484600085613788565b60006001600160ff1b03821115611da55760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610a20565b6000610848826138ae565b60006108486137838361398d565b613a38565b6060824710156137e95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a20565b6001600160a01b0385163b6138405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a20565b600080866001600160a01b0316858760405161385c91906147e3565b60006040518083038185875af1925050503d8060008114613899576040519150601f19603f3d011682016040523d82523d6000602084013e61389e565b606091505b5091509150612a08828286613a8a565b60008082136138d35760405163309fa7dd60e11b815260048101839052602401610a20565b6000670de0b6b3a764000083126138ec57506001613906565b6000199050826ec097ce7bc90715b34b9f10000000000492505b600061391b670de0b6b3a76400008505613ac3565b670de0b6b3a7640000808202945090915084821d9081141561393f57505002919050565b6706f05b59d3b200005b600081131561398457670de0b6b3a7640000828002059150671bc16d674ec80000821261397c579384019360019190911d905b60011d613949565b50505002919050565b6000808212156139ef5768033dd1780914b97114198212156139b157506000919050565b6139bd8260000361398d565b6ec097ce7bc90715b34b9f1000000000816139e857634e487b7160e01b600052601260045260246000fd5b0592915050565b680a688906bd8b0000008212613a1b5760405163e69458f960e01b815260048101839052602401610a20565b670de0b6b3a7640000604083901b046109f881613ba7565b919050565b600080821215611da55760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610a20565b60608315613a995750816109f8565b825115613aa95782518084602001fd5b8160405162461bcd60e51b8152600401610a20919061488b565b6000600160801b8210613ae357608091821c91613ae09082614955565b90505b680100000000000000008210613b0657604091821c91613b039082614955565b90505b6401000000008210613b2557602091821c91613b229082614955565b90505b620100008210613b4257601091821c91613b3f9082614955565b90505b6101008210613b5e57600891821c91613b5b9082614955565b90505b60108210613b7957600491821c91613b769082614955565b90505b60048210613b9457600291821c91613b919082614955565b90505b60028210613a3357610848600182614955565b600160bf1b678000000000000000821615613bcb5768016a09e667f3bcc9090260401c5b674000000000000000821615613bea576801306fe0a31b7152df0260401c5b672000000000000000821615613c09576801172b83c7d517adce0260401c5b671000000000000000821615613c285768010b5586cf9890f62a0260401c5b670800000000000000821615613c47576801059b0d31585743ae0260401c5b670400000000000000821615613c6657680102c9a3e778060ee70260401c5b670200000000000000821615613c855768010163da9fb33356d80260401c5b670100000000000000821615613ca457680100b1afa5abcbed610260401c5b6680000000000000821615613cc25768010058c86da1c09ea20260401c5b6640000000000000821615613ce0576801002c605e2e8cec500260401c5b6620000000000000821615613cfe57680100162f3904051fa10260401c5b6610000000000000821615613d1c576801000b175effdc76ba0260401c5b6608000000000000821615613d3a57680100058ba01fb9f96d0260401c5b6604000000000000821615613d585768010002c5cc37da94920260401c5b6602000000000000821615613d76576801000162e525ee05470260401c5b6601000000000000821615613d945768010000b17255775c040260401c5b65800000000000821615613db1576801000058b91b5bc9ae0260401c5b65400000000000821615613dce57680100002c5c89d5ec6d0260401c5b65200000000000821615613deb5768010000162e43f4f8310260401c5b65100000000000821615613e0857680100000b1721bcfc9a0260401c5b65080000000000821615613e255768010000058b90cf1e6e0260401c5b65040000000000821615613e42576801000002c5c863b73f0260401c5b65020000000000821615613e5f57680100000162e430e5a20260401c5b65010000000000821615613e7c576801000000b1721835510260401c5b648000000000821615613e9857680100000058b90c0b490260401c5b644000000000821615613eb45768010000002c5c8601cc0260401c5b642000000000821615613ed0576801000000162e42fff00260401c5b641000000000821615613eec5768010000000b17217fbb0260401c5b640800000000821615613f08576801000000058b90bfce0260401c5b640400000000821615613f2457680100000002c5c85fe30260401c5b640200000000821615613f405768010000000162e42ff10260401c5b640100000000821615613f5c57680100000000b17217f80260401c5b6380000000821615613f775768010000000058b90bfc0260401c5b6340000000821615613f92576801000000002c5c85fe0260401c5b6320000000821615613fad57680100000000162e42ff0260401c5b6310000000821615613fc8576801000000000b17217f0260401c5b6308000000821615613fe357680100000000058b90c00260401c5b6304000000821615613ffe5768010000000002c5c8600260401c5b6302000000821615614019576801000000000162e4300260401c5b63010000008216156140345768010000000000b172180260401c5b6280000082161561404e576801000000000058b90c0260401c5b6240000082161561406857680100000000002c5c860260401c5b622000008216156140825768010000000000162e430260401c5b6210000082161561409c57680100000000000b17210260401c5b620800008216156140b65768010000000000058b910260401c5b620400008216156140d0576801000000000002c5c80260401c5b620200008216156140ea57680100000000000162e40260401c5b62010000821615614104576801000000000000b1720260401c5b61800082161561411d57680100000000000058b90260401c5b6140008216156141365768010000000000002c5d0260401c5b61200082161561414f576801000000000000162e0260401c5b6110008216156141685768010000000000000b170260401c5b610800821615614181576801000000000000058c0260401c5b61040082161561419a57680100000000000002c60260401c5b6102008216156141b357680100000000000001630260401c5b6101008216156141cc57680100000000000000b10260401c5b60808216156141e457680100000000000000590260401c5b60408216156141fc576801000000000000002c0260401c5b602082161561421457680100000000000000160260401c5b601082161561422c576801000000000000000b0260401c5b600882161561424457680100000000000000060260401c5b600482161561425c57680100000000000000030260401c5b600282161561427457680100000000000000010260401c5b600182161561428c57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b80356001600160a01b0381168114613a3357600080fd5b60008083601f8401126142cb578182fd5b50813567ffffffffffffffff8111156142e2578182fd5b6020830191508360208260051b85010111156142fd57600080fd5b9250929050565b60008083601f840112614315578182fd5b50813567ffffffffffffffff81111561432c578182fd5b6020830191508360208285010111156142fd57600080fd5b600060608284031215614355578081fd5b50919050565b60006020828403121561436c578081fd5b6109f8826142a3565b60008060408385031215614387578081fd5b614390836142a3565b915061439e602084016142a3565b90509250929050565b6000806000606084860312156143bb578081fd5b6143c4846142a3565b92506143d2602085016142a3565b9150604084013590509250925092565b60008060008060008060008060006101408a8c031215614400578485fd5b6144098a6142a3565b985061441760208b016142a3565b975060408a0135965060608a0135955060808a0135945061443a60a08b016142a3565b93506144498b60c08c01614344565b92506101208a013567ffffffffffffffff811115614465578283fd5b6144718c828d01614304565b915080935050809150509295985092959850929598565b6000806000806000806000610120888a0312156144a3578283fd5b6144ac886142a3565b96506144ba602089016142a3565b955060408801359450606088013593506080880135925060a088013591506144e58960c08a01614344565b905092959891949750929550565b6000806000806000806000610100888a03121561450e578283fd5b614517886142a3565b9650602088013567ffffffffffffffff811115614532578384fd5b61453e8a828b016142ba565b9097509550506040880135935060608801359250608088013591506144e58960a08a01614344565b60008060408385031215614578578182fd5b614581836142a3565b946020939093013593505050565b60008060008060008061010087890312156145a8578182fd5b6145b1876142a3565b9550602087013594506145c6604088016142a3565b935060608701359250608087013591506145e38860a08901614344565b90509295509295509295565b600080600080600080600080610120898b03121561460b578182fd5b614614896142a3565b975060208901359650604089013595506060890135945061463760808a016142a3565b93506146468a60a08b01614344565b925061010089013567ffffffffffffffff811115614662578283fd5b61466e8b828c01614304565b999c989b5096995094979396929594505050565b600080600080600080610100878903121561469b578384fd5b6146a4876142a3565b9550602087013594506040870135935060608701359250608087013591506145e38860a08901614344565b60008060008060008060e087890312156146e7578384fd5b863567ffffffffffffffff8111156146fd578485fd5b61470989828a016142ba565b9097509550506020870135935060408701359250606087013591506145e38860808901614344565b600060208284031215614742578081fd5b815180151581146109f8578182fd5b600060208284031215614762578081fd5b5035919050565b60006020828403121561477a578081fd5b5051919050565b600060208284031215614792578081fd5b81356109f881614b10565b6000602082840312156147ae578081fd5b81516109f881614b10565b60006001600160fb1b038311156147ce578081fd5b8260051b808584379190910190815292915050565b600082516147f5818460208701614a68565b9190910192915050565b606080825284519082018190526000906020906080840190828801845b828110156148385781518452928401929084019060010161481c565b50505083810382850152855180825286830191830190845b818110156148755783516001600160a01b031683529284019291840191600101614850565b5050809350505050826040830152949350505050565b60208152600082518060208401526148aa816040850160208701614a68565b601f01601f19169190910160400192915050565b60208082526010908201526f10db1a5c1c195c8e88115e1c1a5c995960821b604082015260600190565b60208082526016908201527521b634b83832b91d1024b73b30b634b2103a37b5b2b760511b604082015260600190565b84815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b6000821982111561496857614968614ae4565b500190565b60008261497c5761497c614afa565b600160ff1b82146000198414161561499657614996614ae4565b500590565b6000826149aa576149aa614afa565b500490565b60006001600160ff1b03818413828413808216868404861116156149d5576149d5614ae4565b600160ff1b848712828116878305891216156149f3576149f3614ae4565b858712925087820587128484161615614a0e57614a0e614ae4565b87850587128184161615614a2457614a24614ae4565b505050929093029392505050565b6000816000190483118215151615614a4c57614a4c614ae4565b500290565b600082821015614a6357614a63614ae4565b500390565b60005b83811015614a83578181015183820152602001614a6b565b83811115611f6d5750506000910152565b600181811c90821680614aa857607f821691505b6020821081141561435557634e487b7160e01b600052602260045260246000fd5b6000600019821415614add57614add614ae4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60ff81168114610bed57600080fdfe4be05c8d54f5e056ab2cfa033e9f582057001268c3e28561bb999d35d2c8f2c8a264697066735822122054eacf1c3231a2523257c519d79262964b4be9e403a0eb5ad3c52aa89ebbc4e264736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000008938a61ba9523298dbcacee0cda5b371fb7f1f8000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000050000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : theSigner (address): 0x08938a61BA9523298dbCAceE0cda5B371FB7f1F8
Arg [1] : theWrapper (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : tokens (address[]): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7,0x6B175474E89094C44Da98b954EedeAC495271d0F,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000008938a61ba9523298dbcacee0cda5b371fb7f1f8
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [5] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [6] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [7] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [8] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Block Age Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
0xE7b0CE0526fbE3969035a145C9e9691d4d9D216c
Showing 14 tokens with a value of $16,788
View full multichain balance on Blockscan
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.