More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 38,680 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit Native | 19066801 | 421 days ago | IN | 0.02 ETH | 0.00018808 | ||||
Transfer | 17007594 | 710 days ago | IN | 0.006 ETH | 0.00044239 | ||||
Pause | 17005701 | 710 days ago | IN | 0 ETH | 0.00078989 | ||||
Send Funds To Us... | 17002339 | 711 days ago | IN | 0 ETH | 0.0025566 | ||||
Update Token Cap | 17002321 | 711 days ago | IN | 0 ETH | 0.000869 | ||||
Transfer | 16752436 | 746 days ago | IN | 0.33 ETH | 0.00042133 | ||||
Deposit Native | 16557131 | 773 days ago | IN | 0.0298 ETH | 0.00061328 | ||||
Send Funds To Us... | 16021000 | 848 days ago | IN | 0 ETH | 0.00135778 | ||||
Change Admin Fee | 16020995 | 848 days ago | IN | 0 ETH | 0.00041433 | ||||
Withdraw Erc20Ga... | 16020963 | 848 days ago | IN | 0 ETH | 0.00068914 | ||||
Withdraw Erc20Ad... | 16020962 | 848 days ago | IN | 0 ETH | 0.00091016 | ||||
Withdraw Native ... | 16020952 | 848 days ago | IN | 0 ETH | 0.00037449 | ||||
Withdraw Native ... | 16020950 | 848 days ago | IN | 0 ETH | 0.00041699 | ||||
Send Funds To Us... | 16020945 | 848 days ago | IN | 0 ETH | 0.0011798 | ||||
Add Supported To... | 16020937 | 848 days ago | IN | 0 ETH | 0.00047617 | ||||
Transfer | 16019980 | 848 days ago | IN | 45.00604198 ETH | 0.00040545 | ||||
Deposit Native | 15940812 | 859 days ago | IN | 0.0417 ETH | 0.00162737 | ||||
Deposit Native | 15771732 | 883 days ago | IN | 0.0515 ETH | 0.00051912 | ||||
Transfer | 15735794 | 888 days ago | IN | 0.00354701 ETH | 0.00036509 | ||||
Deposit Native | 15601950 | 907 days ago | IN | 0.1 ETH | 0.00018071 | ||||
Send Funds To Us... | 15595899 | 907 days ago | IN | 0 ETH | 0.00067808 | ||||
Send Funds To Us... | 15592835 | 908 days ago | IN | 0 ETH | 0.00058121 | ||||
Deposit Native | 15592358 | 908 days ago | IN | 0.105 ETH | 0.00018982 | ||||
Send Funds To Us... | 15592197 | 908 days ago | IN | 0 ETH | 0.00058121 | ||||
Send Funds To Us... | 15592031 | 908 days ago | IN | 0 ETH | 0.00125914 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 17002339 | 711 days ago | 0.3308105 ETH | ||||
Deposit Native | 16240029 | 817 days ago | 0.02 ETH | ||||
Deposit Native | 16240029 | 817 days ago | 0.02018783 ETH | ||||
Transfer | 16021000 | 848 days ago | 8.43503902 ETH | ||||
Transfer | 16020952 | 848 days ago | 1.30094582 ETH | ||||
Transfer | 16020950 | 848 days ago | 4.4087942 ETH | ||||
Transfer | 16020945 | 848 days ago | 39.96 ETH | ||||
Transfer | 15595899 | 907 days ago | 0.09922191 ETH | ||||
Transfer | 15592835 | 908 days ago | 0.06834978 ETH | ||||
Transfer | 15592197 | 908 days ago | 0.04437378 ETH | ||||
Transfer | 15592031 | 908 days ago | 0.0347047 ETH | ||||
Transfer | 15590629 | 908 days ago | 0.09873757 ETH | ||||
Transfer | 15589953 | 908 days ago | 0.03242822 ETH | ||||
Transfer | 15589901 | 908 days ago | 0.03821635 ETH | ||||
Transfer | 15589661 | 908 days ago | 0.06073326 ETH | ||||
Transfer | 15589542 | 908 days ago | 0.78714847 ETH | ||||
Transfer | 15589529 | 908 days ago | 0.8448937 ETH | ||||
Transfer | 15589521 | 908 days ago | 0.19265872 ETH | ||||
Transfer | 15589492 | 908 days ago | 0.4258132 ETH | ||||
Transfer | 15589255 | 908 days ago | 0.01910817 ETH | ||||
Transfer | 15589156 | 908 days ago | 1.99664383 ETH | ||||
Transfer | 15589054 | 908 days ago | 0.03149577 ETH | ||||
Transfer | 15588038 | 908 days ago | 0.34906878 ETH | ||||
Transfer | 15586806 | 909 days ago | 0.05207517 ETH | ||||
Transfer | 15586676 | 909 days ago | 0.06535278 ETH |
Loading...
Loading
Contract Name:
LiquidityPoolManager
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-13 */ // SPDX-License-Identifier: MIT AND Apache-2.0 // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts/6/interfaces/IRelayRecipient.sol pragma solidity 0.7.6; /** * a contract must implement this interface in order to support relayed transaction. * It is better to inherit the BaseRelayRecipient as its implementation. */ abstract contract IRelayRecipient { /** * return if the forwarder is trusted to forward relayed transactions to us. * the forwarder is required to verify the sender's signature, and verify * the call is not a replay. */ function isTrustedForwarder(address forwarder) public virtual view returns(bool); /** * return the sender of this call. * if the call came through our trusted forwarder, then the real sender is appended as the last 20 bytes * of the msg.data. * otherwise, return `msg.sender` * should be used in the contract anywhere instead of msg.sender */ function _msgSender() internal virtual view returns (address payable); function versionRecipient() external virtual view returns (string memory); } // File: contracts/6/libs/BaseRelayRecipient.sol pragma solidity 0.7.6; /** * A base contract to be inherited by any contract that want to receive relayed transactions * A subclass must use "_msgSender()" instead of "msg.sender" */ abstract contract BaseRelayRecipient is IRelayRecipient { /* * Forwarder singleton we accept calls from */ address public trustedForwarder; /* * require a function to be called through GSN only */ modifier trustedForwarderOnly() { require(msg.sender == address(trustedForwarder), "Function can only be called through the trusted Forwarder"); _; } function isTrustedForwarder(address forwarder) public override view returns(bool) { return forwarder == trustedForwarder; } /** * return the sender of this call. * if the call came through our trusted forwarder, return the original sender. * otherwise, return `msg.sender`. * should be used in the contract anywhere instead of msg.sender */ function _msgSender() internal override virtual view returns (address payable ret) { if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) { // At this point we know that the sender is a trusted forwarder, // so we trust that the last bytes of msg.data are the verified sender address. // extract sender address from the end of msg.data assembly { ret := shr(96,calldataload(sub(calldatasize(),20))) } } else { return msg.sender; } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @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 SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/6/insta-swaps/ReentrancyGuard.sol pragma solidity 0.7.6; /** * @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]. */ 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 // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/6/libs/Pausable.sol pragma solidity >=0.6.0 <0.8.0; // import "../GSN/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); event PauserChanged( address indexed previousPauser, address indexed newPauser ); bool private _paused; address private _pauser; /** * @dev The pausable constructor sets the original `pauser` of the contract to the sender * account & Initializes the contract in unpaused state.. */ constructor(address pauser) { require(pauser != address(0), "Pauser Address cannot be 0"); _pauser = pauser; _paused = false; } /** * @dev Throws if called by any account other than the pauser. */ modifier onlyPauser() { require( isPauser(), "Only pauser is allowed to perform this operation" ); _; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @return the address of the owner. */ function getPauser() public view returns (address) { return _pauser; } /** * @return true if `msg.sender` is the owner of the contract. */ function isPauser() public view returns (bool) { return msg.sender == _pauser; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function isPaused() public view returns (bool) { return _paused; } /** * @dev Allows the current pauser to transfer control of the contract to a newPauser. * @param newPauser The address to transfer pauserShip to. */ function changePauser(address newPauser) public onlyPauser { _changePauser(newPauser); } /** * @dev Transfers control of the contract to a newPauser. * @param newPauser The address to transfer ownership to. */ function _changePauser(address newPauser) internal { require(newPauser != address(0)); emit PauserChanged(_pauser, newPauser); _pauser = newPauser; } function renouncePauser() external virtual onlyPauser { emit PauserChanged(_pauser, address(0)); _pauser = address(0); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(_pauser); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(_pauser); } } // File: contracts/6/libs/Ownable.sol pragma solidity 0.7.6; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ abstract contract Ownable { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor(address owner) { require(owner != address(0), "Owner Address cannot be 0"); _owner = owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require( isOwner(), "Only contract owner is allowed to perform this operation" ); _; } /** * @return the address of the owner. */ function getOwner() public view returns (address) { return _owner; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/6/ExecutorManager.sol pragma solidity 0.7.6; contract ExecutorManager is Ownable { address[] internal executors; mapping(address => bool) internal executorStatus; event ExecutorAdded(address executor, address owner); event ExecutorRemoved(address executor, address owner); // MODIFIERS modifier onlyExecutor() { require( executorStatus[msg.sender], "You are not allowed to perform this operation" ); _; } constructor(address owner) Ownable(owner) { require( owner != address(0), "owner cannot be zero"); } function getExecutorStatus(address executor) public view returns (bool status) { status = executorStatus[executor]; } function getAllExecutors() public view returns (address[] memory) { return executors; } //Register new Executors function addExecutors(address[] calldata executorArray) external onlyOwner { for (uint256 i = 0; i < executorArray.length; i++) { addExecutor(executorArray[i]); } } // Register single executor function addExecutor(address executorAddress) public onlyOwner { require(executorAddress != address(0), "executor address can not be 0"); executors.push(executorAddress); executorStatus[executorAddress] = true; emit ExecutorAdded(executorAddress, msg.sender); } //Remove registered Executors function removeExecutors(address[] calldata executorArray) external onlyOwner { for (uint256 i = 0; i < executorArray.length; i++) { removeExecutor(executorArray[i]); } } // Remove Register single executor function removeExecutor(address executorAddress) public onlyOwner { require(executorAddress != address(0), "executor address can not be 0"); executorStatus[executorAddress] = false; emit ExecutorRemoved(executorAddress, msg.sender); } } // File: contracts/6/interfaces/IERC20Permit.sol pragma solidity 0.7.6; interface IERC20Detailed is IERC20 { function name() external view returns(string memory); function decimals() external view returns(uint256); } interface IERC20Nonces is IERC20Detailed { function nonces(address holder) external view returns(uint); } interface IERC20Permit is IERC20Nonces { function permit(address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external; function permit(address holder, address spender, uint256 value, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external; } // File: contracts/6/insta-swaps/LiquidityPoolManager.sol pragma solidity 0.7.6; pragma abicoder v2; contract LiquidityPoolManager is ReentrancyGuard, Ownable, BaseRelayRecipient, Pausable { using SafeMath for uint256; address private constant NATIVE = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; uint256 public baseGas; ExecutorManager private executorManager; uint256 public adminFee; struct TokenInfo { uint256 transferOverhead; bool supportedToken; uint256 minCap; uint256 maxCap; uint256 liquidity; mapping(address => uint256) liquidityProvider; } struct PermitRequest { uint256 nonce; uint256 expiry; bool allowed; uint8 v; bytes32 r; bytes32 s; } mapping ( address => TokenInfo ) public tokensInfo; mapping ( bytes32 => bool ) public processedHash; mapping ( address => uint256 ) public gasFeeAccumulatedByToken; mapping ( address => uint256 ) public adminFeeAccumulatedByToken; event AssetSent(address indexed asset, uint256 indexed amount, uint256 indexed transferredAmount, address target, bytes depositHash); event Received(address indexed from, uint256 indexed amount); event Deposit(address indexed from, address indexed tokenAddress, address indexed receiver, uint256 toChainId, uint256 amount); event LiquidityAdded(address indexed from, address indexed tokenAddress, address indexed receiver, uint256 amount); event LiquidityRemoved(address indexed tokenAddress, uint256 indexed amount, address indexed sender); event fundsWithdraw(address indexed tokenAddress, address indexed owner, uint256 indexed amount); event AdminFeeWithdraw(address indexed tokenAddress, address indexed owner, uint256 indexed amount); event GasFeeWithdraw(address indexed tokenAddress, address indexed owner, uint256 indexed amount); event AdminFeeChanged(uint256 indexed newAdminFee); event TrustedForwarderChanged(address indexed forwarderAddress); event EthReceived(address, uint); // MODIFIERS modifier onlyExecutor() { require(executorManager.getExecutorStatus(_msgSender()), "You are not allowed to perform this operation" ); _; } modifier tokenChecks(address tokenAddress){ require(tokenAddress != address(0), "Token address cannot be 0"); require(tokensInfo[tokenAddress].supportedToken, "Token not supported"); _; } constructor(address _executorManagerAddress, address owner, address pauser, address _trustedForwarder, uint256 _adminFee) Ownable(owner) Pausable(pauser) { require(_executorManagerAddress != address(0), "ExecutorManager Contract Address cannot be 0"); require(_trustedForwarder != address(0), "TrustedForwarder Contract Address cannot be 0"); require(_adminFee != 0, "AdminFee cannot be 0"); executorManager = ExecutorManager(_executorManagerAddress); trustedForwarder = _trustedForwarder; adminFee = _adminFee; baseGas = 21000; } function renounceOwnership() external override onlyOwner { revert ("can't renounceOwnership here"); // not possible within this smart contract } function renouncePauser() external override onlyPauser { revert ("can't renouncePauser here"); // not possible within this smart contract } function getAdminFee() public view returns (uint256 ) { return adminFee; } function changeAdminFee(uint256 newAdminFee) external onlyOwner whenNotPaused { require(newAdminFee != 0, "Admin Fee cannot be 0"); adminFee = newAdminFee; emit AdminFeeChanged(newAdminFee); } function versionRecipient() external override virtual view returns (string memory){ return "1"; } function setBaseGas(uint128 gas) external onlyOwner{ baseGas = gas; } function getExecutorManager() public view returns (address){ return address(executorManager); } function setExecutorManager(address _executorManagerAddress) external onlyOwner { require(_executorManagerAddress != address(0), "Executor Manager Address cannot be 0"); executorManager = ExecutorManager(_executorManagerAddress); } function setTrustedForwarder( address forwarderAddress ) external onlyOwner { require(forwarderAddress != address(0), "Forwarder Address cannot be 0"); trustedForwarder = forwarderAddress; emit TrustedForwarderChanged(forwarderAddress); } function setTokenTransferOverhead( address tokenAddress, uint256 gasOverhead ) external tokenChecks(tokenAddress) onlyOwner { tokensInfo[tokenAddress].transferOverhead = gasOverhead; } function addSupportedToken( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit ) external onlyOwner { require(tokenAddress != address(0), "Token address cannot be 0"); require(maxCapLimit > minCapLimit, "maxCapLimit cannot be smaller than minCapLimit"); tokensInfo[tokenAddress].supportedToken = true; tokensInfo[tokenAddress].minCap = minCapLimit; tokensInfo[tokenAddress].maxCap = maxCapLimit; } function removeSupportedToken( address tokenAddress ) external tokenChecks(tokenAddress) onlyOwner { tokensInfo[tokenAddress].supportedToken = false; } function updateTokenCap( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit ) external tokenChecks(tokenAddress) onlyOwner { require(maxCapLimit > minCapLimit, "maxCapLimit cannot be smaller than minCapLimit"); tokensInfo[tokenAddress].minCap = minCapLimit; tokensInfo[tokenAddress].maxCap = maxCapLimit; } function addNativeLiquidity() external payable whenNotPaused { require(msg.value != 0, "Amount cannot be 0"); address payable sender = _msgSender(); tokensInfo[NATIVE].liquidityProvider[sender] = tokensInfo[NATIVE].liquidityProvider[sender].add(msg.value); tokensInfo[NATIVE].liquidity = tokensInfo[NATIVE].liquidity.add(msg.value); emit LiquidityAdded(sender, NATIVE, address(this), msg.value); } function removeNativeLiquidity(uint256 amount) external nonReentrant { require(amount != 0 , "Amount cannot be 0"); address payable sender = _msgSender(); require(tokensInfo[NATIVE].liquidityProvider[sender] >= amount, "Not enough balance"); tokensInfo[NATIVE].liquidityProvider[sender] = tokensInfo[NATIVE].liquidityProvider[sender].sub(amount); tokensInfo[NATIVE].liquidity = tokensInfo[NATIVE].liquidity.sub(amount); bool success = sender.send(amount); require(success, "Native Transfer Failed"); emit LiquidityRemoved( NATIVE, amount, sender); } function addTokenLiquidity( address tokenAddress, uint256 amount ) external tokenChecks(tokenAddress) whenNotPaused { require(amount != 0, "Amount cannot be 0"); address payable sender = _msgSender(); tokensInfo[tokenAddress].liquidityProvider[sender] = tokensInfo[tokenAddress].liquidityProvider[sender].add(amount); tokensInfo[tokenAddress].liquidity = tokensInfo[tokenAddress].liquidity.add(amount); SafeERC20.safeTransferFrom(IERC20(tokenAddress), sender, address(this), amount); emit LiquidityAdded(sender, tokenAddress, address(this), amount); } function removeTokenLiquidity( address tokenAddress, uint256 amount ) external tokenChecks(tokenAddress) { require(amount != 0, "Amount cannot be 0"); address payable sender = _msgSender(); require(tokensInfo[tokenAddress].liquidityProvider[sender] >= amount, "Not enough balance"); tokensInfo[tokenAddress].liquidityProvider[sender] = tokensInfo[tokenAddress].liquidityProvider[sender].sub(amount); tokensInfo[tokenAddress].liquidity = tokensInfo[tokenAddress].liquidity.sub(amount); SafeERC20.safeTransfer(IERC20(tokenAddress), sender, amount); emit LiquidityRemoved( tokenAddress, amount, sender); } function getLiquidity(address liquidityProviderAddress, address tokenAddress) public view returns (uint256 ) { return tokensInfo[tokenAddress].liquidityProvider[liquidityProviderAddress]; } function depositErc20( address tokenAddress, address receiver, uint256 amount, uint256 toChainId ) public tokenChecks(tokenAddress) whenNotPaused { require(tokensInfo[tokenAddress].minCap <= amount && tokensInfo[tokenAddress].maxCap >= amount, "Deposit amount should be within allowed Cap limits"); require(receiver != address(0), "Receiver address cannot be 0"); require(amount != 0, "Amount cannot be 0"); address payable sender = _msgSender(); SafeERC20.safeTransferFrom(IERC20(tokenAddress), sender, address(this),amount); emit Deposit(sender, tokenAddress, receiver, toChainId, amount); } /** * DAI permit and Deposit. */ function permitAndDepositErc20( address tokenAddress, address receiver, uint256 amount, uint256 toChainId, PermitRequest calldata permitOptions ) external { IERC20Permit(tokenAddress).permit(_msgSender(), address(this), permitOptions.nonce, permitOptions.expiry, permitOptions.allowed, permitOptions.v, permitOptions.r, permitOptions.s); depositErc20(tokenAddress, receiver, amount, toChainId); } /** * EIP2612 and Deposit. */ function permitEIP2612AndDepositErc20( address tokenAddress, address receiver, uint256 amount, uint256 toChainId, PermitRequest calldata permitOptions ) external { IERC20Permit(tokenAddress).permit(_msgSender(), address(this), amount, permitOptions.expiry, permitOptions.v, permitOptions.r, permitOptions.s); depositErc20(tokenAddress, receiver, amount, toChainId); } function depositNative( address receiver, uint256 toChainId ) external whenNotPaused payable { require(tokensInfo[NATIVE].minCap <= msg.value && tokensInfo[NATIVE].maxCap >= msg.value, "Deposit amount should be within allowed Cap limit"); require(receiver != address(0), "Receiver address cannot be 0"); require(msg.value != 0, "Amount cannot be 0"); emit Deposit(_msgSender(), NATIVE, receiver, toChainId, msg.value); } function sendFundsToUser( address tokenAddress, uint256 amount, address payable receiver, bytes memory depositHash, uint256 tokenGasPrice ) external nonReentrant onlyExecutor tokenChecks(tokenAddress) whenNotPaused { uint256 initialGas = gasleft(); require(tokensInfo[tokenAddress].minCap <= amount && tokensInfo[tokenAddress].maxCap >= amount, "Withdraw amount should be within allowed Cap limits"); require(receiver != address(0), "Bad receiver address"); (bytes32 hashSendTransaction, bool status) = checkHashStatus(tokenAddress, amount, receiver, depositHash); require(!status, "Already Processed"); processedHash[hashSendTransaction] = true; uint256 calculateAdminFee = amount.mul(adminFee).div(10000); adminFeeAccumulatedByToken[tokenAddress] = adminFeeAccumulatedByToken[tokenAddress].add(calculateAdminFee); uint256 totalGasUsed = (initialGas.sub(gasleft())); totalGasUsed = totalGasUsed.add(tokensInfo[tokenAddress].transferOverhead); totalGasUsed = totalGasUsed.add(baseGas); gasFeeAccumulatedByToken[tokenAddress] = gasFeeAccumulatedByToken[tokenAddress].add(totalGasUsed.mul(tokenGasPrice)); uint256 amountToTransfer = amount.sub(calculateAdminFee.add(totalGasUsed.mul(tokenGasPrice))); if (tokenAddress == NATIVE) { require(address(this).balance >= amountToTransfer, "Not Enough Balance"); bool success = receiver.send(amountToTransfer); require(success, "Native Transfer Failed"); } else { require(IERC20(tokenAddress).balanceOf(address(this)) >= amountToTransfer, "Not Enough Balance"); SafeERC20.safeTransfer(IERC20(tokenAddress), receiver, amountToTransfer); } emit AssetSent(tokenAddress, amount, amountToTransfer, receiver, depositHash); } function checkHashStatus(address tokenAddress, uint256 amount, address payable receiver, bytes memory depositHash) public view returns(bytes32 hashSendTransaction, bool status){ hashSendTransaction = keccak256( abi.encode( tokenAddress, amount, receiver, keccak256(depositHash) ) ); status = processedHash[hashSendTransaction]; } function withdrawErc20(address tokenAddress) external onlyOwner whenNotPaused { uint256 profitEarned = (IERC20(tokenAddress).balanceOf(address(this))) .sub(tokensInfo[tokenAddress].liquidity) .sub(adminFeeAccumulatedByToken[tokenAddress]) .sub(gasFeeAccumulatedByToken[tokenAddress]); require(profitEarned != 0, "Profit earned is 0"); address payable sender = _msgSender(); SafeERC20.safeTransfer(IERC20(tokenAddress), sender, profitEarned); emit fundsWithdraw(tokenAddress, sender, profitEarned); } function withdrawErc20AdminFee(address tokenAddress, address receiver) external onlyOwner whenNotPaused { require(tokenAddress != NATIVE, "Use withdrawNativeAdminFee() for native token"); uint256 adminFeeAccumulated = adminFeeAccumulatedByToken[tokenAddress]; require(adminFeeAccumulated != 0, "Admin Fee earned is 0"); adminFeeAccumulatedByToken[tokenAddress] = 0; SafeERC20.safeTransfer(IERC20(tokenAddress), receiver, adminFeeAccumulated); emit AdminFeeWithdraw(tokenAddress, receiver, adminFeeAccumulated); } function withdrawErc20GasFee(address tokenAddress, address receiver) external onlyOwner whenNotPaused { require(tokenAddress != NATIVE, "Use withdrawNativeGasFee() for native token"); uint256 gasFeeAccumulated = gasFeeAccumulatedByToken[tokenAddress]; require(gasFeeAccumulated != 0, "Gas Fee earned is 0"); gasFeeAccumulatedByToken[tokenAddress] = 0; SafeERC20.safeTransfer(IERC20(tokenAddress), receiver, gasFeeAccumulated); emit GasFeeWithdraw(tokenAddress, receiver, gasFeeAccumulated); } function withdrawNative() external onlyOwner whenNotPaused { uint256 profitEarned = (address(this).balance) .sub(tokensInfo[NATIVE].liquidity) .sub(adminFeeAccumulatedByToken[NATIVE]) .sub(gasFeeAccumulatedByToken[NATIVE]); require(profitEarned != 0, "Profit earned is 0"); address payable sender = _msgSender(); bool success = sender.send(profitEarned); require(success, "Native Transfer Failed"); emit fundsWithdraw(address(this), sender, profitEarned); } function withdrawNativeAdminFee(address payable receiver) external onlyOwner whenNotPaused { uint256 adminFeeAccumulated = adminFeeAccumulatedByToken[NATIVE]; require(adminFeeAccumulated != 0, "Admin Fee earned is 0"); adminFeeAccumulatedByToken[NATIVE] = 0; bool success = receiver.send(adminFeeAccumulated); require(success, "Native Transfer Failed"); emit AdminFeeWithdraw(address(this), receiver, adminFeeAccumulated); } function withdrawNativeGasFee(address payable receiver) external onlyOwner whenNotPaused { uint256 gasFeeAccumulated = gasFeeAccumulatedByToken[NATIVE]; require(gasFeeAccumulated != 0, "Gas Fee earned is 0"); gasFeeAccumulatedByToken[NATIVE] = 0; bool success = receiver.send(gasFeeAccumulated); require(success, "Native Transfer Failed"); emit GasFeeWithdraw(address(this), receiver, gasFeeAccumulated); } receive() external payable { emit EthReceived(_msgSender(), msg.value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_executorManagerAddress","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"pauser","type":"address"},{"internalType":"address","name":"_trustedForwarder","type":"address"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"AdminFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminFeeWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"transferredAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"depositHash","type":"bytes"}],"name":"AssetSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"toChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"EthReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GasFeeWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousPauser","type":"address"},{"indexed":true,"internalType":"address","name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"forwarderAddress","type":"address"}],"name":"TrustedForwarderChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fundsWithdraw","type":"event"},{"inputs":[],"name":"addNativeLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addTokenLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adminFeeAccumulatedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"changeAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPauser","type":"address"}],"name":"changePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"bytes","name":"depositHash","type":"bytes"}],"name":"checkHashStatus","outputs":[{"internalType":"bytes32","name":"hashSendTransaction","type":"bytes32"},{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"depositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"depositNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gasFeeAccumulatedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExecutorManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityProviderAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LiquidityPoolManager.PermitRequest","name":"permitOptions","type":"tuple"}],"name":"permitAndDepositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LiquidityPoolManager.PermitRequest","name":"permitOptions","type":"tuple"}],"name":"permitEIP2612AndDepositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processedHash","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeNativeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"removeSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeTokenLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"bytes","name":"depositHash","type":"bytes"},{"internalType":"uint256","name":"tokenGasPrice","type":"uint256"}],"name":"sendFundsToUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"gas","type":"uint128"}],"name":"setBaseGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_executorManagerAddress","type":"address"}],"name":"setExecutorManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"gasOverhead","type":"uint256"}],"name":"setTokenTransferOverhead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarderAddress","type":"address"}],"name":"setTrustedForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensInfo","outputs":[{"internalType":"uint256","name":"transferOverhead","type":"uint256"},{"internalType":"bool","name":"supportedToken","type":"bool"},{"internalType":"uint256","name":"minCap","type":"uint256"},{"internalType":"uint256","name":"maxCap","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"}],"name":"updateTokenCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"versionRecipient","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"withdrawErc20AdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"withdrawErc20GasFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"withdrawNativeAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"receiver","type":"address"}],"name":"withdrawNativeGasFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003df538038062003df583398101604081905262000034916200019b565b600160005582846001600160a01b0381166200006d5760405162461bcd60e51b8152600401620000649062000238565b60405180910390fd5b600180546001600160a01b0319166001600160a01b039283161790558116620000aa5760405162461bcd60e51b815260040162000064906200026f565b600380546001600160a01b0319166001600160a01b039283161790556002805460ff60a01b191690558516620000f45760405162461bcd60e51b81526004016200006490620002f3565b6001600160a01b0382166200011d5760405162461bcd60e51b81526004016200006490620002a6565b806200013d5760405162461bcd60e51b8152600401620000649062000201565b600580546001600160a01b039687166001600160a01b031991821617909155600280549390961692169190911790935550506006556152086004556200033f565b80516001600160a01b03811681146200019657600080fd5b919050565b600080600080600060a08688031215620001b3578081fd5b620001be866200017e565b9450620001ce602087016200017e565b9350620001de604087016200017e565b9250620001ee606087016200017e565b9150608086015190509295509295909350565b60208082526014908201527f41646d696e4665652063616e6e6f742062652030000000000000000000000000604082015260600190565b60208082526019908201527f4f776e657220416464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601a908201527f50617573657220416464726573732063616e6e6f742062652030000000000000604082015260600190565b6020808252602d908201527f54727573746564466f7277617264657220436f6e74726163742041646472657360408201526c0732063616e6e6f74206265203609c1b606082015260800190565b6020808252602c908201527f4578656375746f724d616e6167657220436f6e7472616374204164647265737360408201526b02063616e6e6f7420626520360a41b606082015260800190565b613aa6806200034f6000396000f3fe60806040526004361061028c5760003560e01c806384d936121161015a578063c7e42b1b116100c1578063ef0d45721161007a578063ef0d457214610781578063f2fde38b146107a1578063f72780ef146107c1578063fa181699146107e1578063fc07ec2514610801578063fcc4d59a14610821576102d3565b8063c7e42b1b146106c1578063ccb844e1146106e1578063da74222814610701578063e06179fe14610721578063ea526de714610741578063edd9587b14610761576102d3565b8063a0be06f911610113578063a0be06f914610629578063ab1635b71461063e578063b187bd2614610653578063b238b53314610668578063b6632cb314610670578063ba8dbea214610690576102d3565b806384d936121461057157806385a25597146105915780638909bb83146105bf578063893d20e8146105df5780638b56d0b7146105f45780638f32d59b14610614576102d3565b806356e3866d116101fe5780637008b548116101b75780637008b548146104d0578063715018a6146104f2578063760d098a1461050757806376319190146105275780637da0a877146105475780638456cb591461055c576102d3565b806356e3866d14610424578063572b6c0514610444578063583bbc40146104715780636125ca02146104865780636a8a3b96146104a65780636ef8d66d146104bb576102d3565b806323868d6c1161025057806323868d6c1461036d5780632a905ccc1461038d5780632cd271e7146103b85780633f4ba83a146103d8578063486ff0cd146103ed57806350431ce41461040f576102d3565b806302279b4a146102d857806313fe24e1146102ed57806314fe72aa1461030d5780631a2b43811461032d5780631ff148601461034d576102d3565b366102d3577f85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f866956102ba610841565b346040516102c9929190613106565b60405180910390a1005b600080fd5b6102eb6102e6366004612e11565b610872565b005b3480156102f957600080fd5b506102eb610308366004612d66565b6109eb565b34801561031957600080fd5b506102eb610328366004612e11565b610b93565b34801561033957600080fd5b506102eb610348366004612d2e565b610d41565b34801561035957600080fd5b506102eb610368366004612d2e565b610e66565b34801561037957600080fd5b506102eb610388366004612d12565b610f8b565b34801561039957600080fd5b506103a26110ea565b6040516103af9190613987565b60405180910390f35b3480156103c457600080fd5b506102eb6103d3366004612d12565b6110f0565b3480156103e457600080fd5b506102eb611120565b3480156103f957600080fd5b506104026111c1565b6040516103af9190613188565b34801561041b57600080fd5b506102eb6111dc565b34801561043057600080fd5b506102eb61043f366004612f18565b61135f565b34801561045057600080fd5b5061046461045f366004612d12565b61142c565b6040516103af919061316d565b34801561047d57600080fd5b506103a2611440565b34801561049257600080fd5b506102eb6104a1366004612dab565b611446565b3480156104b257600080fd5b506104646114e5565b3480156104c757600080fd5b506102eb6114f6565b3480156104dc57600080fd5b506104e5611532565b6040516103af9190613044565b3480156104fe57600080fd5b506102eb611541565b34801561051357600080fd5b50610464610522366004612f84565b61157d565b34801561053357600080fd5b506102eb610542366004612d12565b611592565b34801561055357600080fd5b506104e561163d565b34801561056857600080fd5b506102eb61164c565b34801561057d57600080fd5b506102eb61058c366004612e11565b6116ea565b34801561059d57600080fd5b506105b16105ac366004612e3c565b6118a2565b6040516103af929190613178565b3480156105cb57600080fd5b506102eb6105da366004612ea6565b6118f9565b3480156105eb57600080fd5b506104e5611dc1565b34801561060057600080fd5b506102eb61060f366004612e11565b611dd0565b34801561062057600080fd5b50610464611e73565b34801561063557600080fd5b506103a2611e84565b34801561064a57600080fd5b506104e5611e8a565b34801561065f57600080fd5b50610464611e99565b6102eb611ea9565b34801561067c57600080fd5b506102eb61068b366004612f84565b611ffc565b34801561069c57600080fd5b506106b06106ab366004612d12565b61209a565b6040516103af959493929190613990565b3480156106cd57600080fd5b506102eb6106dc366004612d12565b6120cd565b3480156106ed57600080fd5b506102eb6106fc366004612f9c565b61224a565b34801561070d57600080fd5b506102eb61071c366004612d12565b61227c565b34801561072d57600080fd5b506103a261073c366004612d12565b612310565b34801561074d57600080fd5b506103a261075c366004612d2e565b612322565b34801561076d57600080fd5b506102eb61077c366004612f18565b612353565b34801561078d57600080fd5b506102eb61079c366004612d12565b6123f3565b3480156107ad57600080fd5b506102eb6107bc366004612d12565b61245f565b3480156107cd57600080fd5b506102eb6107dc366004612f84565b61248c565b3480156107ed57600080fd5b506102eb6107fc366004612d12565b61266c565b34801561080d57600080fd5b506102eb61081c366004612dab565b6127cd565b34801561082d57600080fd5b506103a261083c366004612d12565b612839565b60006018361080159061085857506108583361142c565b1561086c575060131936013560601c61086f565b50335b90565b600254600160a01b900460ff16156108a55760405162461bcd60e51b815260040161089c90613496565b60405180910390fd5b600080516020613a5183398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d105434108015906109255750600080516020613a5183398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d11543411155b6109415760405162461bcd60e51b815260040161089c906134c0565b6001600160a01b0382166109675760405162461bcd60e51b815260040161089c906135ff565b346109845760405162461bcd60e51b815260040161089c90613636565b6001600160a01b038216600080516020613a518339815191526109a5610841565b6001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d5984346040516109df9291906139b3565b60405180910390a45050565b836001600160a01b038116610a125760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16610a4d5760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615610a775760405162461bcd60e51b815260040161089c90613496565b6001600160a01b0385166000908152600760205260409020600201548310801590610abd57506001600160a01b0385166000908152600760205260409020600301548311155b610ad95760405162461bcd60e51b815260040161089c90613321565b6001600160a01b038416610aff5760405162461bcd60e51b815260040161089c906135ff565b82610b1c5760405162461bcd60e51b815260040161089c90613636565b6000610b26610841565b9050610b348682308761284b565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d598688604051610b839291906139b3565b60405180910390a4505050505050565b816001600160a01b038116610bba5760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16610bf55760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615610c1f5760405162461bcd60e51b815260040161089c90613496565b81610c3c5760405162461bcd60e51b815260040161089c90613636565b6000610c46610841565b6001600160a01b0380861660009081526007602090815260408083209385168352600590930190522054909150610c7d90846128a9565b6001600160a01b038086166000818152600760208181526040808420958816845260058601825283209590955591905290915260040154610cbe90846128a9565b6001600160a01b038516600090815260076020526040902060040155610ce68482308661284b565b306001600160a01b0316846001600160a01b0316826001600160a01b03167f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e86604051610d339190613987565b60405180910390a450505050565b610d49611e73565b610d655760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610d8f5760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038216600080516020613a518339815191521415610dc65760405162461bcd60e51b815260040161089c9061323c565b6001600160a01b03821660009081526009602052604090205480610dfc5760405162461bcd60e51b815260040161089c90613373565b6001600160a01b038316600090815260096020526040812055610e208383836128d5565b80826001600160a01b0316846001600160a01b03167fc129cf8730ce23dfea8953a499f9b276ad5777855ff41fafe198ebc2a0d2324360405160405180910390a4505050565b610e6e611e73565b610e8a5760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610eb45760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038216600080516020613a518339815191521415610eeb5760405162461bcd60e51b815260040161089c9061368f565b6001600160a01b0382166000908152600a602052604090205480610f215760405162461bcd60e51b815260040161089c906137ee565b6001600160a01b0383166000908152600a6020526040812055610f458383836128d5565b80826001600160a01b0316846001600160a01b03167f524ce1e12cd0eb0a42db4a3933bb1dbbe91edfe70b281be691fe5a2003ef904e60405160405180910390a4505050565b610f93611e73565b610faf5760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610fd95760405162461bcd60e51b815260040161089c90613496565b600080516020613a5183398151915260005260096020527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf406261742548061102e5760405162461bcd60e51b815260040161089c90613373565b600080516020613a51833981519152600090815260096020527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf4062617428190556040516001600160a01b0384169083156108fc0290849084818181858888f193505050509050806110ad5760405162461bcd60e51b815260040161089c90613739565b60405182906001600160a01b0385169030907fc129cf8730ce23dfea8953a499f9b276ad5777855ff41fafe198ebc2a0d2324390600090a4505050565b60065490565b6110f86114e5565b6111145760405162461bcd60e51b815260040161089c90613900565b61111d816128f9565b50565b6111286114e5565b6111445760405162461bcd60e51b815260040161089c90613900565b600254600160a01b900460ff1661116d5760405162461bcd60e51b815260040161089c9061319b565b6002805460ff60a01b191690556003546040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa916111b7916001600160a01b0390911690613044565b60405180910390a1565b6040805180820190915260018152603160f81b602082015290565b6111e4611e73565b6112005760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561122a5760405162461bcd60e51b815260040161089c90613496565b600080516020613a5183398151915260009081527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf406261742547f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a75546007602052600080516020613a11833981519152546112ae92916112a89182904790612968565b90612968565b9050806112cd5760405162461bcd60e51b815260040161089c90613592565b60006112d7610841565b90506000816001600160a01b03166108fc849081150290604051600060405180830381858888f193505050509050806113225760405162461bcd60e51b815260040161089c90613739565b60405183906001600160a01b0384169030907f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d90600090a4505050565b826001600160a01b0381166113865760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff166113c15760405162461bcd60e51b815260040161089c90613662565b6113c9611e73565b6113e55760405162461bcd60e51b815260040161089c906136dc565b8282116114045760405162461bcd60e51b815260040161089c906137a0565b506001600160a01b039092166000908152600760205260409020600281019190915560030155565b6002546001600160a01b0390811691161490565b60045481565b846001600160a01b031663d505accf61145d610841565b308660208601356114746080880160608901612fdb565b87608001358860a001356040518863ffffffff1660e01b81526004016114a097969594939291906130a1565b600060405180830381600087803b1580156114ba57600080fd5b505af11580156114ce573d6000803e3d6000fd5b505050506114de858585856109eb565b5050505050565b6003546001600160a01b0316331490565b6114fe6114e5565b61151a5760405162461bcd60e51b815260040161089c90613900565b60405162461bcd60e51b815260040161089c9061381d565b6003546001600160a01b031690565b611549611e73565b6115655760405162461bcd60e51b815260040161089c906136dc565b60405162461bcd60e51b815260040161089c906133a0565b60086020526000908152604090205460ff1681565b806001600160a01b0381166115b95760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff166115f45760405162461bcd60e51b815260040161089c90613662565b6115fc611e73565b6116185760405162461bcd60e51b815260040161089c906136dc565b506001600160a01b03166000908152600760205260409020600101805460ff19169055565b6002546001600160a01b031681565b6116546114e5565b6116705760405162461bcd60e51b815260040161089c90613900565b600254600160a01b900460ff161561169a5760405162461bcd60e51b815260040161089c90613496565b6002805460ff60a01b1916600160a01b1790556003546040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258916111b7916001600160a01b0390911690613044565b816001600160a01b0381166117115760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff1661174c5760405162461bcd60e51b815260040161089c90613662565b816117695760405162461bcd60e51b815260040161089c90613636565b6000611773610841565b6001600160a01b03808616600090815260076020908152604080832093851683526005909301905220549091508311156117bf5760405162461bcd60e51b815260040161089c9061346a565b6001600160a01b03808516600090815260076020908152604080832093851683526005909301905220546117f39084612968565b6001600160a01b0380861660008181526007602081815260408084209588168452600586018252832095909555919052909152600401546118349084612968565b6001600160a01b03851660009081526007602052604090206004015561185b8482856128d5565b806001600160a01b031683856001600160a01b03167f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e60405160405180910390a450505050565b60008085858585805190602001206040516020016118c39493929190613143565b60408051601f19818403018152918152815160209283012060008181526008909352912054909760ff9091169650945050505050565b6002600054141561191c5760405162461bcd60e51b815260040161089c9061389e565b60026000556005546001600160a01b0316630768d65c61193a610841565b6040518263ffffffff1660e01b81526004016119569190613044565b60206040518083038186803b15801561196e57600080fd5b505afa158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190612f68565b6119c25760405162461bcd60e51b815260040161089c9061341d565b846001600160a01b0381166119e95760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16611a245760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615611a4e5760405162461bcd60e51b815260040161089c90613496565b60005a6001600160a01b0388166000908152600760205260409020600201549091508610801590611a9a57506001600160a01b0387166000908152600760205260409020600301548611155b611ab65760405162461bcd60e51b815260040161089c90613511565b6001600160a01b038516611adc5760405162461bcd60e51b815260040161089c90613564565b600080611aeb898989896118a2565b915091508015611b0d5760405162461bcd60e51b815260040161089c906138d5565b6000828152600860205260408120805460ff19166001179055600654611b429061271090611b3c908c906129aa565b906129e4565b6001600160a01b038b166000908152600a6020526040902054909150611b6890826128a9565b6001600160a01b038b166000908152600a6020526040812091909155611b8f5a8690612968565b6001600160a01b038c16600090815260076020526040902054909150611bb69082906128a9565b9050611bcd600454826128a990919063ffffffff16565b9050611bfb611bdc82896129aa565b6001600160a01b038d16600090815260096020526040902054906128a9565b6001600160a01b038c16600090815260096020526040812091909155611c35611c2e611c27848b6129aa565b85906128a9565b8c90612968565b90506001600160a01b038c16600080516020613a518339815191521415611cc25780471015611c765760405162461bcd60e51b815260040161089c906132f5565b6040516000906001600160a01b038c169083156108fc0290849084818181858888f19350505050905080611cbc5760405162461bcd60e51b815260040161089c90613739565b50611d69565b6040516370a0823160e01b815281906001600160a01b038e16906370a0823190611cf0903090600401613044565b60206040518083038186803b158015611d0857600080fd5b505afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190612fc3565b1015611d5e5760405162461bcd60e51b815260040161089c906132f5565b611d698c8b836128d5565b808b8d6001600160a01b03167fec1dcc5633614eade4a5730f51adc7444a5103a8477965a32f2e886f5b20f6948d8d604051611da69291906130e2565b60405180910390a45050600160005550505050505050505050565b6001546001600160a01b031690565b816001600160a01b038116611df75760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16611e325760405162461bcd60e51b815260040161089c90613662565b611e3a611e73565b611e565760405162461bcd60e51b815260040161089c906136dc565b506001600160a01b03909116600090815260076020526040902055565b6001546001600160a01b0316331490565b60065481565b6005546001600160a01b031690565b600254600160a01b900460ff1690565b600254600160a01b900460ff1615611ed35760405162461bcd60e51b815260040161089c90613496565b34611ef05760405162461bcd60e51b815260040161089c90613636565b6000611efa610841565b6001600160a01b0381166000908152600080516020613a318339815191526020526040902054909150611f2d90346128a9565b6001600160a01b0382166000908152600080516020613a3183398151915260209081526040822092909255600080516020613a51833981519152905260079052600080516020613a1183398151915254611f8790346128a9565b600080516020613a5183398151915260008190526007602052600080516020613a11833981519152919091556040513091906001600160a01b038416907f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e90611ff1903490613987565b60405180910390a450565b612004611e73565b6120205760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561204a5760405162461bcd60e51b815260040161089c90613496565b806120675760405162461bcd60e51b815260040161089c906131c9565b600681905560405181907f11a80b766155f9b8f16a7da44d66269fd694cb1c247f4814244586f68dd5348790600090a250565b60076020526000908152604090208054600182015460028301546003840154600490940154929360ff9092169290919085565b6120d5611e73565b6120f15760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561211b5760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038116600081815260096020908152604080832054600a835281842054600790935281842060049081015492516370a0823160e01b815294956121ce9592946112a894909385939192916370a082319161217e91309101613044565b60206040518083038186803b15801561219657600080fd5b505afa1580156121aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190612fc3565b9050806121ed5760405162461bcd60e51b815260040161089c90613592565b60006121f7610841565b90506122048382846128d5565b81816001600160a01b0316846001600160a01b03167f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d60405160405180910390a4505050565b612252611e73565b61226e5760405162461bcd60e51b815260040161089c906136dc565b6001600160801b0316600455565b612284611e73565b6122a05760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b0381166122c65760405162461bcd60e51b815260040161089c90613950565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f871264f4293af7d2865ae7eae628b228f4991c57cb45b39c99f0b774ebe2901890600090a250565b60096020526000908152604090205481565b6001600160a01b03808216600090815260076020908152604080832093861683526005909301905220545b92915050565b61235b611e73565b6123775760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b03831661239d5760405162461bcd60e51b815260040161089c906132be565b8181116123bc5760405162461bcd60e51b815260040161089c906137a0565b6001600160a01b0390921660009081526007602052604090206001818101805460ff19169091179055600281019190915560030155565b6123fb611e73565b6124175760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b03811661243d5760405162461bcd60e51b815260040161089c906131f8565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b612467611e73565b6124835760405162461bcd60e51b815260040161089c906136dc565b61111d81612a26565b600260005414156124af5760405162461bcd60e51b815260040161089c9061389e565b6002600055806124d15760405162461bcd60e51b815260040161089c90613636565b60006124db610841565b6001600160a01b0381166000908152600080516020613a3183398151915260205260409020549091508211156125235760405162461bcd60e51b815260040161089c9061346a565b6001600160a01b0381166000908152600080516020613a3183398151915260205260409020546125539083612968565b6001600160a01b0382166000908152600080516020613a3183398151915260209081526040822092909255600080516020613a51833981519152905260079052600080516020613a11833981519152546125ad9083612968565b600080516020613a5183398151915260009081526007602052600080516020613a11833981519152919091556040516001600160a01b0383169084156108fc0290859084818181858888f1935050505090508061261c5760405162461bcd60e51b815260040161089c90613739565b6040516001600160a01b038316908490600080516020613a51833981519152907f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e90600090a45050600160005550565b612674611e73565b6126905760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff16156126ba5760405162461bcd60e51b815260040161089c90613496565b600080516020613a51833981519152600052600a6020527f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a7554806127105760405162461bcd60e51b815260040161089c906137ee565b600080516020613a518339815191526000908152600a6020527f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a758190556040516001600160a01b0384169083156108fc0290849084818181858888f193505050509050806127905760405162461bcd60e51b815260040161089c90613739565b60405182906001600160a01b0385169030907f524ce1e12cd0eb0a42db4a3933bb1dbbe91edfe70b281be691fe5a2003ef904e90600090a4505050565b846001600160a01b0316638fcbaf0c6127e4610841565b30843560208601356127fc6060880160408901612f4c565b61280c6080890160608a01612fdb565b88608001358960a001356040518963ffffffff1660e01b81526004016114a0989796959493929190613058565b600a6020526000908152604090205481565b6128a3846323b872dd60e01b85858560405160240161286c9392919061311f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a95565b50505050565b6000828201838110156128ce5760405162461bcd60e51b815260040161089c90613287565b9392505050565b6128f48363a9059cbb60e01b848460405160240161286c929190613106565b505050565b6001600160a01b03811661290c57600080fd5b6003546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006128ce83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b24565b6000826129b95750600061234d565b828202828482816129c657fe5b04146128ce5760405162461bcd60e51b815260040161089c906135be565b60006128ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b50565b6001600160a01b038116612a3957600080fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000612aea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b879092919063ffffffff16565b8051909150156128f45780806020019051810190612b089190612f68565b6128f45760405162461bcd60e51b815260040161089c90613854565b60008184841115612b485760405162461bcd60e51b815260040161089c9190613188565b505050900390565b60008183612b715760405162461bcd60e51b815260040161089c9190613188565b506000838581612b7d57fe5b0495945050505050565b6060612b968484600085612b9e565b949350505050565b606082471015612bc05760405162461bcd60e51b815260040161089c906133d7565b612bc985612c5e565b612be55760405162461bcd60e51b815260040161089c90613769565b600080866001600160a01b03168587604051612c019190613028565b60006040518083038185875af1925050503d8060008114612c3e576040519150601f19603f3d011682016040523d82523d6000602084013e612c43565b606091505b5091509150612c53828286612c64565b979650505050505050565b3b151590565b60608315612c735750816128ce565b825115612c835782518084602001fd5b8160405162461bcd60e51b815260040161089c9190613188565b600082601f830112612cad578081fd5b813567ffffffffffffffff80821115612cc257fe5b604051601f8301601f191681016020018281118282101715612ce057fe5b604052828152848301602001861015612cf7578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215612d23578081fd5b81356128ce816139ed565b60008060408385031215612d40578081fd5b8235612d4b816139ed565b91506020830135612d5b816139ed565b809150509250929050565b60008060008060808587031215612d7b578182fd5b8435612d86816139ed565b93506020850135612d96816139ed565b93969395505050506040820135916060013590565b6000806000806000858703610140811215612dc4578182fd5b8635612dcf816139ed565b95506020870135612ddf816139ed565b9450604087013593506060870135925060c0607f1982011215612e00578182fd5b506080860190509295509295909350565b60008060408385031215612e23578182fd5b8235612e2e816139ed565b946020939093013593505050565b60008060008060808587031215612e51578384fd5b8435612e5c816139ed565b9350602085013592506040850135612e73816139ed565b9150606085013567ffffffffffffffff811115612e8e578182fd5b612e9a87828801612c9d565b91505092959194509250565b600080600080600060a08688031215612ebd578081fd5b8535612ec8816139ed565b9450602086013593506040860135612edf816139ed565b9250606086013567ffffffffffffffff811115612efa578182fd5b612f0688828901612c9d565b95989497509295608001359392505050565b600080600060608486031215612f2c578283fd5b8335612f37816139ed565b95602085013595506040909401359392505050565b600060208284031215612f5d578081fd5b81356128ce81613a02565b600060208284031215612f79578081fd5b81516128ce81613a02565b600060208284031215612f95578081fd5b5035919050565b600060208284031215612fad578081fd5b81356001600160801b03811681146128ce578182fd5b600060208284031215612fd4578081fd5b5051919050565b600060208284031215612fec578081fd5b813560ff811681146128ce578182fd5b600081518084526130148160208601602086016139c1565b601f01601f19169290920160200192915050565b6000825161303a8184602087016139c1565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0383168152604060208201819052600090612b9690830184612ffc565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039485168152602081019390935292166040820152606081019190915260800190565b901515815260200190565b9182521515602082015260400190565b6000602082526128ce6020830184612ffc565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b602080825260159082015274041646d696e204665652063616e6e6f74206265203605c1b604082015260600190565b60208082526024908201527f4578656375746f72204d616e6167657220416464726573732063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252602b908201527f5573652077697468647261774e6174697665476173466565282920666f72206e60408201526a30ba34bb32903a37b5b2b760a91b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601290820152714e6f7420456e6f7567682042616c616e636560701b604082015260600190565b60208082526032908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015271616c6c6f77656420436170206c696d69747360701b606082015260800190565b602080825260139082015272047617320466565206561726e6564206973203606c1b604082015260600190565b6020808252601c908201527f63616e27742072656e6f756e63654f776e657273686970206865726500000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602d908201527f596f7520617265206e6f7420616c6c6f77656420746f20706572666f726d207460408201526c3434b99037b832b930ba34b7b760991b606082015260800190565b6020808252601290820152714e6f7420656e6f7567682062616c616e636560701b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526031908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015270185b1b1bddd9590810d85c081b1a5b5a5d607a1b606082015260800190565b60208082526033908201527f576974686472617720616d6f756e742073686f756c642062652077697468696e60408201527220616c6c6f77656420436170206c696d69747360681b606082015260800190565b602080825260149082015273426164207265636569766572206164647265737360601b604082015260600190565b602080825260129082015271050726f666974206561726e656420697320360741b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601c908201527f526563656976657220616464726573732063616e6e6f74206265203000000000604082015260600190565b6020808252601290820152710416d6f756e742063616e6e6f7420626520360741b604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b6020808252602d908201527f5573652077697468647261774e617469766541646d696e466565282920666f7260408201526c103730ba34bb32903a37b5b2b760991b606082015260800190565b60208082526038908201527f4f6e6c7920636f6e7472616374206f776e657220697320616c6c6f776564207460408201527f6f20706572666f726d2074686973206f7065726174696f6e0000000000000000606082015260800190565b60208082526016908201527513985d1a5d9948151c985b9cd9995c8811985a5b195960521b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602e908201527f6d61784361704c696d69742063616e6e6f7420626520736d616c6c657220746860408201526d185b881b5a5b90d85c131a5b5a5d60921b606082015260800190565b602080825260159082015274041646d696e20466565206561726e6564206973203605c1b604082015260600190565b60208082526019908201527f63616e27742072656e6f756e6365506175736572206865726500000000000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260119082015270105b1c9958591e48141c9bd8d95cdcd959607a1b604082015260600190565b60208082526030908201527f4f6e6c792070617573657220697320616c6c6f77656420746f20706572666f7260408201526f36903a3434b99037b832b930ba34b7b760811b606082015260800190565b6020808252601d908201527f466f7277617264657220416464726573732063616e6e6f742062652030000000604082015260600190565b90815260200190565b948552921515602085015260408401919091526060830152608082015260a00190565b918252602082015260400190565b60005b838110156139dc5781810151838201526020016139c4565b838111156128a35750506000910152565b6001600160a01b038116811461111d57600080fd5b801515811461111d57600080fdfeb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d12b2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d13000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea26469706673582212201141730766b471ff25cb6b82a3ced58edd31585bb92d4ca555406b9a67577cc564736f6c63430007060033000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca000000000000000000000000f9bc6309fae18d29bf2ba0fa46afda9a8bb5b37c000000000000000000000000129443ca2a9dec2020808a2868b38dda457eacc700000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x60806040526004361061028c5760003560e01c806384d936121161015a578063c7e42b1b116100c1578063ef0d45721161007a578063ef0d457214610781578063f2fde38b146107a1578063f72780ef146107c1578063fa181699146107e1578063fc07ec2514610801578063fcc4d59a14610821576102d3565b8063c7e42b1b146106c1578063ccb844e1146106e1578063da74222814610701578063e06179fe14610721578063ea526de714610741578063edd9587b14610761576102d3565b8063a0be06f911610113578063a0be06f914610629578063ab1635b71461063e578063b187bd2614610653578063b238b53314610668578063b6632cb314610670578063ba8dbea214610690576102d3565b806384d936121461057157806385a25597146105915780638909bb83146105bf578063893d20e8146105df5780638b56d0b7146105f45780638f32d59b14610614576102d3565b806356e3866d116101fe5780637008b548116101b75780637008b548146104d0578063715018a6146104f2578063760d098a1461050757806376319190146105275780637da0a877146105475780638456cb591461055c576102d3565b806356e3866d14610424578063572b6c0514610444578063583bbc40146104715780636125ca02146104865780636a8a3b96146104a65780636ef8d66d146104bb576102d3565b806323868d6c1161025057806323868d6c1461036d5780632a905ccc1461038d5780632cd271e7146103b85780633f4ba83a146103d8578063486ff0cd146103ed57806350431ce41461040f576102d3565b806302279b4a146102d857806313fe24e1146102ed57806314fe72aa1461030d5780631a2b43811461032d5780631ff148601461034d576102d3565b366102d3577f85177f287940f2f05425a4029951af0e047a7f9c4eaa9a6e6917bcd869f866956102ba610841565b346040516102c9929190613106565b60405180910390a1005b600080fd5b6102eb6102e6366004612e11565b610872565b005b3480156102f957600080fd5b506102eb610308366004612d66565b6109eb565b34801561031957600080fd5b506102eb610328366004612e11565b610b93565b34801561033957600080fd5b506102eb610348366004612d2e565b610d41565b34801561035957600080fd5b506102eb610368366004612d2e565b610e66565b34801561037957600080fd5b506102eb610388366004612d12565b610f8b565b34801561039957600080fd5b506103a26110ea565b6040516103af9190613987565b60405180910390f35b3480156103c457600080fd5b506102eb6103d3366004612d12565b6110f0565b3480156103e457600080fd5b506102eb611120565b3480156103f957600080fd5b506104026111c1565b6040516103af9190613188565b34801561041b57600080fd5b506102eb6111dc565b34801561043057600080fd5b506102eb61043f366004612f18565b61135f565b34801561045057600080fd5b5061046461045f366004612d12565b61142c565b6040516103af919061316d565b34801561047d57600080fd5b506103a2611440565b34801561049257600080fd5b506102eb6104a1366004612dab565b611446565b3480156104b257600080fd5b506104646114e5565b3480156104c757600080fd5b506102eb6114f6565b3480156104dc57600080fd5b506104e5611532565b6040516103af9190613044565b3480156104fe57600080fd5b506102eb611541565b34801561051357600080fd5b50610464610522366004612f84565b61157d565b34801561053357600080fd5b506102eb610542366004612d12565b611592565b34801561055357600080fd5b506104e561163d565b34801561056857600080fd5b506102eb61164c565b34801561057d57600080fd5b506102eb61058c366004612e11565b6116ea565b34801561059d57600080fd5b506105b16105ac366004612e3c565b6118a2565b6040516103af929190613178565b3480156105cb57600080fd5b506102eb6105da366004612ea6565b6118f9565b3480156105eb57600080fd5b506104e5611dc1565b34801561060057600080fd5b506102eb61060f366004612e11565b611dd0565b34801561062057600080fd5b50610464611e73565b34801561063557600080fd5b506103a2611e84565b34801561064a57600080fd5b506104e5611e8a565b34801561065f57600080fd5b50610464611e99565b6102eb611ea9565b34801561067c57600080fd5b506102eb61068b366004612f84565b611ffc565b34801561069c57600080fd5b506106b06106ab366004612d12565b61209a565b6040516103af959493929190613990565b3480156106cd57600080fd5b506102eb6106dc366004612d12565b6120cd565b3480156106ed57600080fd5b506102eb6106fc366004612f9c565b61224a565b34801561070d57600080fd5b506102eb61071c366004612d12565b61227c565b34801561072d57600080fd5b506103a261073c366004612d12565b612310565b34801561074d57600080fd5b506103a261075c366004612d2e565b612322565b34801561076d57600080fd5b506102eb61077c366004612f18565b612353565b34801561078d57600080fd5b506102eb61079c366004612d12565b6123f3565b3480156107ad57600080fd5b506102eb6107bc366004612d12565b61245f565b3480156107cd57600080fd5b506102eb6107dc366004612f84565b61248c565b3480156107ed57600080fd5b506102eb6107fc366004612d12565b61266c565b34801561080d57600080fd5b506102eb61081c366004612dab565b6127cd565b34801561082d57600080fd5b506103a261083c366004612d12565b612839565b60006018361080159061085857506108583361142c565b1561086c575060131936013560601c61086f565b50335b90565b600254600160a01b900460ff16156108a55760405162461bcd60e51b815260040161089c90613496565b60405180910390fd5b600080516020613a5183398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d105434108015906109255750600080516020613a5183398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d11543411155b6109415760405162461bcd60e51b815260040161089c906134c0565b6001600160a01b0382166109675760405162461bcd60e51b815260040161089c906135ff565b346109845760405162461bcd60e51b815260040161089c90613636565b6001600160a01b038216600080516020613a518339815191526109a5610841565b6001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d5984346040516109df9291906139b3565b60405180910390a45050565b836001600160a01b038116610a125760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16610a4d5760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615610a775760405162461bcd60e51b815260040161089c90613496565b6001600160a01b0385166000908152600760205260409020600201548310801590610abd57506001600160a01b0385166000908152600760205260409020600301548311155b610ad95760405162461bcd60e51b815260040161089c90613321565b6001600160a01b038416610aff5760405162461bcd60e51b815260040161089c906135ff565b82610b1c5760405162461bcd60e51b815260040161089c90613636565b6000610b26610841565b9050610b348682308761284b565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d598688604051610b839291906139b3565b60405180910390a4505050505050565b816001600160a01b038116610bba5760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16610bf55760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615610c1f5760405162461bcd60e51b815260040161089c90613496565b81610c3c5760405162461bcd60e51b815260040161089c90613636565b6000610c46610841565b6001600160a01b0380861660009081526007602090815260408083209385168352600590930190522054909150610c7d90846128a9565b6001600160a01b038086166000818152600760208181526040808420958816845260058601825283209590955591905290915260040154610cbe90846128a9565b6001600160a01b038516600090815260076020526040902060040155610ce68482308661284b565b306001600160a01b0316846001600160a01b0316826001600160a01b03167f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e86604051610d339190613987565b60405180910390a450505050565b610d49611e73565b610d655760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610d8f5760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038216600080516020613a518339815191521415610dc65760405162461bcd60e51b815260040161089c9061323c565b6001600160a01b03821660009081526009602052604090205480610dfc5760405162461bcd60e51b815260040161089c90613373565b6001600160a01b038316600090815260096020526040812055610e208383836128d5565b80826001600160a01b0316846001600160a01b03167fc129cf8730ce23dfea8953a499f9b276ad5777855ff41fafe198ebc2a0d2324360405160405180910390a4505050565b610e6e611e73565b610e8a5760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610eb45760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038216600080516020613a518339815191521415610eeb5760405162461bcd60e51b815260040161089c9061368f565b6001600160a01b0382166000908152600a602052604090205480610f215760405162461bcd60e51b815260040161089c906137ee565b6001600160a01b0383166000908152600a6020526040812055610f458383836128d5565b80826001600160a01b0316846001600160a01b03167f524ce1e12cd0eb0a42db4a3933bb1dbbe91edfe70b281be691fe5a2003ef904e60405160405180910390a4505050565b610f93611e73565b610faf5760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff1615610fd95760405162461bcd60e51b815260040161089c90613496565b600080516020613a5183398151915260005260096020527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf406261742548061102e5760405162461bcd60e51b815260040161089c90613373565b600080516020613a51833981519152600090815260096020527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf4062617428190556040516001600160a01b0384169083156108fc0290849084818181858888f193505050509050806110ad5760405162461bcd60e51b815260040161089c90613739565b60405182906001600160a01b0385169030907fc129cf8730ce23dfea8953a499f9b276ad5777855ff41fafe198ebc2a0d2324390600090a4505050565b60065490565b6110f86114e5565b6111145760405162461bcd60e51b815260040161089c90613900565b61111d816128f9565b50565b6111286114e5565b6111445760405162461bcd60e51b815260040161089c90613900565b600254600160a01b900460ff1661116d5760405162461bcd60e51b815260040161089c9061319b565b6002805460ff60a01b191690556003546040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa916111b7916001600160a01b0390911690613044565b60405180910390a1565b6040805180820190915260018152603160f81b602082015290565b6111e4611e73565b6112005760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561122a5760405162461bcd60e51b815260040161089c90613496565b600080516020613a5183398151915260009081527ea206b70d87cacff7a19f3d98e0957b781c25fb4ae954252c87bcf406261742547f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a75546007602052600080516020613a11833981519152546112ae92916112a89182904790612968565b90612968565b9050806112cd5760405162461bcd60e51b815260040161089c90613592565b60006112d7610841565b90506000816001600160a01b03166108fc849081150290604051600060405180830381858888f193505050509050806113225760405162461bcd60e51b815260040161089c90613739565b60405183906001600160a01b0384169030907f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d90600090a4505050565b826001600160a01b0381166113865760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff166113c15760405162461bcd60e51b815260040161089c90613662565b6113c9611e73565b6113e55760405162461bcd60e51b815260040161089c906136dc565b8282116114045760405162461bcd60e51b815260040161089c906137a0565b506001600160a01b039092166000908152600760205260409020600281019190915560030155565b6002546001600160a01b0390811691161490565b60045481565b846001600160a01b031663d505accf61145d610841565b308660208601356114746080880160608901612fdb565b87608001358860a001356040518863ffffffff1660e01b81526004016114a097969594939291906130a1565b600060405180830381600087803b1580156114ba57600080fd5b505af11580156114ce573d6000803e3d6000fd5b505050506114de858585856109eb565b5050505050565b6003546001600160a01b0316331490565b6114fe6114e5565b61151a5760405162461bcd60e51b815260040161089c90613900565b60405162461bcd60e51b815260040161089c9061381d565b6003546001600160a01b031690565b611549611e73565b6115655760405162461bcd60e51b815260040161089c906136dc565b60405162461bcd60e51b815260040161089c906133a0565b60086020526000908152604090205460ff1681565b806001600160a01b0381166115b95760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff166115f45760405162461bcd60e51b815260040161089c90613662565b6115fc611e73565b6116185760405162461bcd60e51b815260040161089c906136dc565b506001600160a01b03166000908152600760205260409020600101805460ff19169055565b6002546001600160a01b031681565b6116546114e5565b6116705760405162461bcd60e51b815260040161089c90613900565b600254600160a01b900460ff161561169a5760405162461bcd60e51b815260040161089c90613496565b6002805460ff60a01b1916600160a01b1790556003546040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258916111b7916001600160a01b0390911690613044565b816001600160a01b0381166117115760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff1661174c5760405162461bcd60e51b815260040161089c90613662565b816117695760405162461bcd60e51b815260040161089c90613636565b6000611773610841565b6001600160a01b03808616600090815260076020908152604080832093851683526005909301905220549091508311156117bf5760405162461bcd60e51b815260040161089c9061346a565b6001600160a01b03808516600090815260076020908152604080832093851683526005909301905220546117f39084612968565b6001600160a01b0380861660008181526007602081815260408084209588168452600586018252832095909555919052909152600401546118349084612968565b6001600160a01b03851660009081526007602052604090206004015561185b8482856128d5565b806001600160a01b031683856001600160a01b03167f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e60405160405180910390a450505050565b60008085858585805190602001206040516020016118c39493929190613143565b60408051601f19818403018152918152815160209283012060008181526008909352912054909760ff9091169650945050505050565b6002600054141561191c5760405162461bcd60e51b815260040161089c9061389e565b60026000556005546001600160a01b0316630768d65c61193a610841565b6040518263ffffffff1660e01b81526004016119569190613044565b60206040518083038186803b15801561196e57600080fd5b505afa158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190612f68565b6119c25760405162461bcd60e51b815260040161089c9061341d565b846001600160a01b0381166119e95760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16611a245760405162461bcd60e51b815260040161089c90613662565b600254600160a01b900460ff1615611a4e5760405162461bcd60e51b815260040161089c90613496565b60005a6001600160a01b0388166000908152600760205260409020600201549091508610801590611a9a57506001600160a01b0387166000908152600760205260409020600301548611155b611ab65760405162461bcd60e51b815260040161089c90613511565b6001600160a01b038516611adc5760405162461bcd60e51b815260040161089c90613564565b600080611aeb898989896118a2565b915091508015611b0d5760405162461bcd60e51b815260040161089c906138d5565b6000828152600860205260408120805460ff19166001179055600654611b429061271090611b3c908c906129aa565b906129e4565b6001600160a01b038b166000908152600a6020526040902054909150611b6890826128a9565b6001600160a01b038b166000908152600a6020526040812091909155611b8f5a8690612968565b6001600160a01b038c16600090815260076020526040902054909150611bb69082906128a9565b9050611bcd600454826128a990919063ffffffff16565b9050611bfb611bdc82896129aa565b6001600160a01b038d16600090815260096020526040902054906128a9565b6001600160a01b038c16600090815260096020526040812091909155611c35611c2e611c27848b6129aa565b85906128a9565b8c90612968565b90506001600160a01b038c16600080516020613a518339815191521415611cc25780471015611c765760405162461bcd60e51b815260040161089c906132f5565b6040516000906001600160a01b038c169083156108fc0290849084818181858888f19350505050905080611cbc5760405162461bcd60e51b815260040161089c90613739565b50611d69565b6040516370a0823160e01b815281906001600160a01b038e16906370a0823190611cf0903090600401613044565b60206040518083038186803b158015611d0857600080fd5b505afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190612fc3565b1015611d5e5760405162461bcd60e51b815260040161089c906132f5565b611d698c8b836128d5565b808b8d6001600160a01b03167fec1dcc5633614eade4a5730f51adc7444a5103a8477965a32f2e886f5b20f6948d8d604051611da69291906130e2565b60405180910390a45050600160005550505050505050505050565b6001546001600160a01b031690565b816001600160a01b038116611df75760405162461bcd60e51b815260040161089c906132be565b6001600160a01b03811660009081526007602052604090206001015460ff16611e325760405162461bcd60e51b815260040161089c90613662565b611e3a611e73565b611e565760405162461bcd60e51b815260040161089c906136dc565b506001600160a01b03909116600090815260076020526040902055565b6001546001600160a01b0316331490565b60065481565b6005546001600160a01b031690565b600254600160a01b900460ff1690565b600254600160a01b900460ff1615611ed35760405162461bcd60e51b815260040161089c90613496565b34611ef05760405162461bcd60e51b815260040161089c90613636565b6000611efa610841565b6001600160a01b0381166000908152600080516020613a318339815191526020526040902054909150611f2d90346128a9565b6001600160a01b0382166000908152600080516020613a3183398151915260209081526040822092909255600080516020613a51833981519152905260079052600080516020613a1183398151915254611f8790346128a9565b600080516020613a5183398151915260008190526007602052600080516020613a11833981519152919091556040513091906001600160a01b038416907f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e90611ff1903490613987565b60405180910390a450565b612004611e73565b6120205760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561204a5760405162461bcd60e51b815260040161089c90613496565b806120675760405162461bcd60e51b815260040161089c906131c9565b600681905560405181907f11a80b766155f9b8f16a7da44d66269fd694cb1c247f4814244586f68dd5348790600090a250565b60076020526000908152604090208054600182015460028301546003840154600490940154929360ff9092169290919085565b6120d5611e73565b6120f15760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff161561211b5760405162461bcd60e51b815260040161089c90613496565b6001600160a01b038116600081815260096020908152604080832054600a835281842054600790935281842060049081015492516370a0823160e01b815294956121ce9592946112a894909385939192916370a082319161217e91309101613044565b60206040518083038186803b15801561219657600080fd5b505afa1580156121aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190612fc3565b9050806121ed5760405162461bcd60e51b815260040161089c90613592565b60006121f7610841565b90506122048382846128d5565b81816001600160a01b0316846001600160a01b03167f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d60405160405180910390a4505050565b612252611e73565b61226e5760405162461bcd60e51b815260040161089c906136dc565b6001600160801b0316600455565b612284611e73565b6122a05760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b0381166122c65760405162461bcd60e51b815260040161089c90613950565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f871264f4293af7d2865ae7eae628b228f4991c57cb45b39c99f0b774ebe2901890600090a250565b60096020526000908152604090205481565b6001600160a01b03808216600090815260076020908152604080832093861683526005909301905220545b92915050565b61235b611e73565b6123775760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b03831661239d5760405162461bcd60e51b815260040161089c906132be565b8181116123bc5760405162461bcd60e51b815260040161089c906137a0565b6001600160a01b0390921660009081526007602052604090206001818101805460ff19169091179055600281019190915560030155565b6123fb611e73565b6124175760405162461bcd60e51b815260040161089c906136dc565b6001600160a01b03811661243d5760405162461bcd60e51b815260040161089c906131f8565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b612467611e73565b6124835760405162461bcd60e51b815260040161089c906136dc565b61111d81612a26565b600260005414156124af5760405162461bcd60e51b815260040161089c9061389e565b6002600055806124d15760405162461bcd60e51b815260040161089c90613636565b60006124db610841565b6001600160a01b0381166000908152600080516020613a3183398151915260205260409020549091508211156125235760405162461bcd60e51b815260040161089c9061346a565b6001600160a01b0381166000908152600080516020613a3183398151915260205260409020546125539083612968565b6001600160a01b0382166000908152600080516020613a3183398151915260209081526040822092909255600080516020613a51833981519152905260079052600080516020613a11833981519152546125ad9083612968565b600080516020613a5183398151915260009081526007602052600080516020613a11833981519152919091556040516001600160a01b0383169084156108fc0290859084818181858888f1935050505090508061261c5760405162461bcd60e51b815260040161089c90613739565b6040516001600160a01b038316908490600080516020613a51833981519152907f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e90600090a45050600160005550565b612674611e73565b6126905760405162461bcd60e51b815260040161089c906136dc565b600254600160a01b900460ff16156126ba5760405162461bcd60e51b815260040161089c90613496565b600080516020613a51833981519152600052600a6020527f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a7554806127105760405162461bcd60e51b815260040161089c906137ee565b600080516020613a518339815191526000908152600a6020527f3e65e660a0d3d61f62bb0309259c5a3ded6558e90d0e8aff997e553e7b030a758190556040516001600160a01b0384169083156108fc0290849084818181858888f193505050509050806127905760405162461bcd60e51b815260040161089c90613739565b60405182906001600160a01b0385169030907f524ce1e12cd0eb0a42db4a3933bb1dbbe91edfe70b281be691fe5a2003ef904e90600090a4505050565b846001600160a01b0316638fcbaf0c6127e4610841565b30843560208601356127fc6060880160408901612f4c565b61280c6080890160608a01612fdb565b88608001358960a001356040518963ffffffff1660e01b81526004016114a0989796959493929190613058565b600a6020526000908152604090205481565b6128a3846323b872dd60e01b85858560405160240161286c9392919061311f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a95565b50505050565b6000828201838110156128ce5760405162461bcd60e51b815260040161089c90613287565b9392505050565b6128f48363a9059cbb60e01b848460405160240161286c929190613106565b505050565b6001600160a01b03811661290c57600080fd5b6003546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006128ce83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b24565b6000826129b95750600061234d565b828202828482816129c657fe5b04146128ce5760405162461bcd60e51b815260040161089c906135be565b60006128ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b50565b6001600160a01b038116612a3957600080fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000612aea826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612b879092919063ffffffff16565b8051909150156128f45780806020019051810190612b089190612f68565b6128f45760405162461bcd60e51b815260040161089c90613854565b60008184841115612b485760405162461bcd60e51b815260040161089c9190613188565b505050900390565b60008183612b715760405162461bcd60e51b815260040161089c9190613188565b506000838581612b7d57fe5b0495945050505050565b6060612b968484600085612b9e565b949350505050565b606082471015612bc05760405162461bcd60e51b815260040161089c906133d7565b612bc985612c5e565b612be55760405162461bcd60e51b815260040161089c90613769565b600080866001600160a01b03168587604051612c019190613028565b60006040518083038185875af1925050503d8060008114612c3e576040519150601f19603f3d011682016040523d82523d6000602084013e612c43565b606091505b5091509150612c53828286612c64565b979650505050505050565b3b151590565b60608315612c735750816128ce565b825115612c835782518084602001fd5b8160405162461bcd60e51b815260040161089c9190613188565b600082601f830112612cad578081fd5b813567ffffffffffffffff80821115612cc257fe5b604051601f8301601f191681016020018281118282101715612ce057fe5b604052828152848301602001861015612cf7578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215612d23578081fd5b81356128ce816139ed565b60008060408385031215612d40578081fd5b8235612d4b816139ed565b91506020830135612d5b816139ed565b809150509250929050565b60008060008060808587031215612d7b578182fd5b8435612d86816139ed565b93506020850135612d96816139ed565b93969395505050506040820135916060013590565b6000806000806000858703610140811215612dc4578182fd5b8635612dcf816139ed565b95506020870135612ddf816139ed565b9450604087013593506060870135925060c0607f1982011215612e00578182fd5b506080860190509295509295909350565b60008060408385031215612e23578182fd5b8235612e2e816139ed565b946020939093013593505050565b60008060008060808587031215612e51578384fd5b8435612e5c816139ed565b9350602085013592506040850135612e73816139ed565b9150606085013567ffffffffffffffff811115612e8e578182fd5b612e9a87828801612c9d565b91505092959194509250565b600080600080600060a08688031215612ebd578081fd5b8535612ec8816139ed565b9450602086013593506040860135612edf816139ed565b9250606086013567ffffffffffffffff811115612efa578182fd5b612f0688828901612c9d565b95989497509295608001359392505050565b600080600060608486031215612f2c578283fd5b8335612f37816139ed565b95602085013595506040909401359392505050565b600060208284031215612f5d578081fd5b81356128ce81613a02565b600060208284031215612f79578081fd5b81516128ce81613a02565b600060208284031215612f95578081fd5b5035919050565b600060208284031215612fad578081fd5b81356001600160801b03811681146128ce578182fd5b600060208284031215612fd4578081fd5b5051919050565b600060208284031215612fec578081fd5b813560ff811681146128ce578182fd5b600081518084526130148160208601602086016139c1565b601f01601f19169290920160200192915050565b6000825161303a8184602087016139c1565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0383168152604060208201819052600090612b9690830184612ffc565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039485168152602081019390935292166040820152606081019190915260800190565b901515815260200190565b9182521515602082015260400190565b6000602082526128ce6020830184612ffc565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b602080825260159082015274041646d696e204665652063616e6e6f74206265203605c1b604082015260600190565b60208082526024908201527f4578656375746f72204d616e6167657220416464726573732063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252602b908201527f5573652077697468647261774e6174697665476173466565282920666f72206e60408201526a30ba34bb32903a37b5b2b760a91b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601290820152714e6f7420456e6f7567682042616c616e636560701b604082015260600190565b60208082526032908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015271616c6c6f77656420436170206c696d69747360701b606082015260800190565b602080825260139082015272047617320466565206561726e6564206973203606c1b604082015260600190565b6020808252601c908201527f63616e27742072656e6f756e63654f776e657273686970206865726500000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602d908201527f596f7520617265206e6f7420616c6c6f77656420746f20706572666f726d207460408201526c3434b99037b832b930ba34b7b760991b606082015260800190565b6020808252601290820152714e6f7420656e6f7567682062616c616e636560701b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526031908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015270185b1b1bddd9590810d85c081b1a5b5a5d607a1b606082015260800190565b60208082526033908201527f576974686472617720616d6f756e742073686f756c642062652077697468696e60408201527220616c6c6f77656420436170206c696d69747360681b606082015260800190565b602080825260149082015273426164207265636569766572206164647265737360601b604082015260600190565b602080825260129082015271050726f666974206561726e656420697320360741b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601c908201527f526563656976657220616464726573732063616e6e6f74206265203000000000604082015260600190565b6020808252601290820152710416d6f756e742063616e6e6f7420626520360741b604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b6020808252602d908201527f5573652077697468647261774e617469766541646d696e466565282920666f7260408201526c103730ba34bb32903a37b5b2b760991b606082015260800190565b60208082526038908201527f4f6e6c7920636f6e7472616374206f776e657220697320616c6c6f776564207460408201527f6f20706572666f726d2074686973206f7065726174696f6e0000000000000000606082015260800190565b60208082526016908201527513985d1a5d9948151c985b9cd9995c8811985a5b195960521b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602e908201527f6d61784361704c696d69742063616e6e6f7420626520736d616c6c657220746860408201526d185b881b5a5b90d85c131a5b5a5d60921b606082015260800190565b602080825260159082015274041646d696e20466565206561726e6564206973203605c1b604082015260600190565b60208082526019908201527f63616e27742072656e6f756e6365506175736572206865726500000000000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260119082015270105b1c9958591e48141c9bd8d95cdcd959607a1b604082015260600190565b60208082526030908201527f4f6e6c792070617573657220697320616c6c6f77656420746f20706572666f7260408201526f36903a3434b99037b832b930ba34b7b760811b606082015260800190565b6020808252601d908201527f466f7277617264657220416464726573732063616e6e6f742062652030000000604082015260600190565b90815260200190565b948552921515602085015260408401919091526060830152608082015260a00190565b918252602082015260400190565b60005b838110156139dc5781810151838201526020016139c4565b838111156128a35750506000910152565b6001600160a01b038116811461111d57600080fd5b801515811461111d57600080fdfeb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d12b2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d13000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea26469706673582212201141730766b471ff25cb6b82a3ced58edd31585bb92d4ca555406b9a67577cc564736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca000000000000000000000000f9bc6309fae18d29bf2ba0fa46afda9a8bb5b37c000000000000000000000000129443ca2a9dec2020808a2868b38dda457eacc700000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : _executorManagerAddress (address): 0xEeD0c0AA1d73Ed0F48559e6CC2C762D4Ed5ca1Ca
Arg [1] : owner (address): 0xF9bc6309FAe18d29bF2Ba0FA46aFDa9A8bb5B37c
Arg [2] : pauser (address): 0x129443cA2a9Dec2020808a2868b38dDA457eaCC7
Arg [3] : _trustedForwarder (address): 0x84a0856b038eaAd1cC7E297cF34A7e72685A8693
Arg [4] : _adminFee (uint256): 10
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca
Arg [1] : 000000000000000000000000f9bc6309fae18d29bf2ba0fa46afda9a8bb5b37c
Arg [2] : 000000000000000000000000129443ca2a9dec2020808a2868b38dda457eacc7
Arg [3] : 00000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
33619:16574:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50146:36;50158:12;:10;:12::i;:::-;50172:9;50146:36;;;;;;;:::i;:::-;;;;;;;;33619:16574;;;;;43825:463;;;;;;:::i;:::-;;:::i;:::-;;42083:656;;;;;;;;;;-1:-1:-1;42083:656:0;;;;;:::i;:::-;;:::i;40560:620::-;;;;;;;;;;-1:-1:-1;40560:620:0;;;;;:::i;:::-;;:::i;47911:555::-;;;;;;;;;;-1:-1:-1;47911:555:0;;;;;:::i;:::-;;:::i;47328:575::-;;;;;;;;;;-1:-1:-1;47328:575:0;;;;;:::i;:::-;;:::i;49620:475::-;;;;;;;;;;-1:-1:-1;49620:475:0;;;;;:::i;:::-;;:::i;37024:88::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27246:102;;;;;;;;;;-1:-1:-1;27246:102:0;;;;;:::i;:::-;;:::i;28234:115::-;;;;;;;;;;;;;:::i;37352:111::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;48474:637::-;;;;;;;;;;;;;:::i;39075:374::-;;;;;;;;;;-1:-1:-1;39075:374:0;;;;;:::i;:::-;;:::i;7168:137::-;;;;;;;;;;-1:-1:-1;7168:137:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33832:22::-;;;;;;;;;;;;;:::i;43344:473::-;;;;;;;;;;-1:-1:-1;43344:473:0;;;;;:::i;:::-;;:::i;26791:94::-;;;;;;;;;;;;;:::i;36863:153::-;;;;;;;;;;;;;:::i;26614:84::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36697:158::-;;;;;;;;;;;;;:::i;34405:48::-;;;;;;;;;;-1:-1:-1;34405:48:0;;;;;:::i;:::-;;:::i;38902:165::-;;;;;;;;;;-1:-1:-1;38902:165:0;;;;;:::i;:::-;;:::i;6874:31::-;;;;;;;;;;;;;:::i;27980:113::-;;;;;;;;;;;;;:::i;41188:676::-;;;;;;;;;;-1:-1:-1;41188:676:0;;;;;:::i;:::-;;:::i;46202:457::-;;;;;;;;;;-1:-1:-1;46202:457:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;44296:1898::-;;;;;;;;;;-1:-1:-1;44296:1898:0;;;;;:::i;:::-;;:::i;29385:82::-;;;;;;;;;;;;;:::i;38219:198::-;;;;;;;;;;-1:-1:-1;38219:198:0;;;;;:::i;:::-;;:::i;29560:92::-;;;;;;;;;;;;;:::i;33913:23::-;;;;;;;;;;;;;:::i;37562:109::-;;;;;;;;;;;;;:::i;26985:80::-;;;;;;;;;;;;;:::i;39457:449::-;;;:::i;37120:224::-;;;;;;;;;;-1:-1:-1;37120:224:0;;;;;:::i;:::-;;:::i;34348:50::-;;;;;;;;;;-1:-1:-1;34348:50:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;46667:653::-;;;;;;;;;;-1:-1:-1;46667:653:0;;;;;:::i;:::-;;:::i;37471:83::-;;;;;;;;;;-1:-1:-1;37471:83:0;;;;;:::i;:::-;;:::i;37941:270::-;;;;;;;;;;-1:-1:-1;37941:270:0;;;;;:::i;:::-;;:::i;34460:62::-;;;;;;;;;;-1:-1:-1;34460:62:0;;;;;:::i;:::-;;:::i;41872:203::-;;;;;;;;;;-1:-1:-1;41872:203:0;;;;;:::i;:::-;;:::i;38425:469::-;;;;;;;;;;-1:-1:-1;38425:469:0;;;;;:::i;:::-;;:::i;37679:254::-;;;;;;;;;;-1:-1:-1;37679:254:0;;;;;:::i;:::-;;:::i;30265:109::-;;;;;;;;;;-1:-1:-1;30265:109:0;;;;;:::i;:::-;;:::i;39914:638::-;;;;;;;;;;-1:-1:-1;39914:638:0;;;;;:::i;:::-;;:::i;49119:493::-;;;;;;;;;;-1:-1:-1;49119:493:0;;;;;:::i;:::-;;:::i;42798:490::-;;;;;;;;;;-1:-1:-1;42798:490:0;;;;;:::i;:::-;;:::i;34529:64::-;;;;;;;;;;-1:-1:-1;34529:64:0;;;;;:::i;:::-;;:::i;7565:567::-;7627:19;7682:2;7663:8;:21;;;;:55;;;7688:30;7707:10;7688:18;:30::i;:::-;7659:466;;;-1:-1:-1;;;8029:14:0;8025:22;8012:36;8009:2;8005:44;7979:85;;;-1:-1:-1;8103:10:0;7659:466;7565:567;:::o;43825:463::-;26218:7;;-1:-1:-1;;;26218:7:0;;;;26217:8;26209:37;;;;-1:-1:-1;;;26209:37:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;;;;;;43937:18:0::1;::::0;:10:::1;:18;::::0;:25;;43966:9:::1;-1:-1:-1::0;43937:38:0;::::1;::::0;:80:::1;;-1:-1:-1::0;;;;;;;;;;;;43979:18:0::1;::::0;:10:::1;:18;::::0;:25;;44008:9:::1;-1:-1:-1::0;43979:38:0::1;43937:80;43929:142;;;;-1:-1:-1::0;;;43929:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44090:22:0;::::1;44082:63;;;;-1:-1:-1::0;;;44082:63:0::1;;;;;;;:::i;:::-;44164:9;44156:45;;;;-1:-1:-1::0;;;44156:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44219:61:0;::::1;-1:-1:-1::0;;;;;;;;;;;44227:12:0::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;44219:61:0::1;;44259:9;44270;44219:61;;;;;;;:::i;:::-;;;;;;;;43825:463:::0;;:::o;42083:656::-;42201:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42248:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;;::::0;:41;-1:-1:-1;42248:41:0;::::2;::::0;:86:::2;;-1:-1:-1::0;;;;;;42293:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;;::::0;:41;-1:-1:-1;42293:41:0::2;42248:86;42240:149;;;;-1:-1:-1::0;;;42240:149:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42408:22:0;::::2;42400:63;;;;-1:-1:-1::0;;;42400:63:0::2;;;;;;;:::i;:::-;42482:11:::0;42474:42:::2;;;;-1:-1:-1::0;;;42474:42:0::2;;;;;;;:::i;:::-;42529:22;42554:12;:10;:12::i;:::-;42529:37;;42579:78;42613:12;42628:6;42644:4;42650:6;42579:26;:78::i;:::-;42703:8;-1:-1:-1::0;;;;;42673:58:0::2;42689:12;-1:-1:-1::0;;;;;42673:58:0::2;42681:6;-1:-1:-1::0;;;;;42673:58:0::2;;42713:9;42724:6;42673:58;;;;;;;:::i;:::-;;;;;;;;26257:1;42083:656:::0;;;;;:::o;40560:620::-;40648:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;40695:11:::0;40687:42:::2;;;;-1:-1:-1::0;;;40687:42:0::2;;;;;;;:::i;:::-;40740:22;40765:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;40841:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;;::::2;:50:::0;;;;40740:37;;-1:-1:-1;40841:62:0::2;::::0;40896:6;40841:54:::2;:62::i;:::-;-1:-1:-1::0;;;;;40788:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;::::2;:50:::0;;;;:115;;;;40951:24;;;;;;:34:::2;;::::0;:46:::2;::::0;40990:6;40951:38:::2;:46::i;:::-;-1:-1:-1::0;;;;;40914:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:34:::2;;:83:::0;41018:79:::2;40925:12:::0;41067:6;41083:4:::2;41090:6:::0;41018:26:::2;:79::i;:::-;41158:4;-1:-1:-1::0;;;;;41113:59:0::2;41136:12;-1:-1:-1::0;;;;;41113:59:0::2;41128:6;-1:-1:-1::0;;;;;41113:59:0::2;;41165:6;41113:59;;;;;;:::i;:::-;;;;;;;;26257:1;40560:620:::0;;;:::o;47911:555::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48032:22:0;::::2;-1:-1:-1::0;;;;;;;;;;;48032:22:0::2;;48024:78;;;;-1:-1:-1::0;;;48024:78:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48141:38:0;::::2;48113:25;48141:38:::0;;;:24:::2;:38;::::0;;;;;48198:22;48190:54:::2;;;;-1:-1:-1::0;;;48190:54:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48257:38:0;::::2;48298:1;48257:38:::0;;;:24:::2;:38;::::0;;;;:42;48312:73:::2;48282:12:::0;48357:8;48367:17;48312:22:::2;:73::i;:::-;48440:17;48430:8;-1:-1:-1::0;;;;;48401:57:0::2;48416:12;-1:-1:-1::0;;;;;48401:57:0::2;;;;;;;;;;;26257:1;47911:555:::0;;:::o;47328:575::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47451:22:0;::::2;-1:-1:-1::0;;;;;;;;;;;47451:22:0::2;;47443:80;;;;-1:-1:-1::0;;;47443:80:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47564:40:0;::::2;47534:27;47564:40:::0;;;:26:::2;:40;::::0;;;;;47623:24;47615:58:::2;;;;-1:-1:-1::0;;;47615:58:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47686:40:0;::::2;47729:1;47686:40:::0;;;:26:::2;:40;::::0;;;;:44;47743:75:::2;47713:12:::0;47788:8;47798:19;47743:22:::2;:75::i;:::-;47875:19;47865:8;-1:-1:-1::0;;;;;47834:61:0::2;47851:12;-1:-1:-1::0;;;;;47834:61:0::2;;;;;;;;;;;26257:1;47328:575:::0;;:::o;49620:475::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49720:25:0::2;49748:32:::0;:24:::2;:32;::::0;;;49799:22;49791:54:::2;;;;-1:-1:-1::0;;;49791:54:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49891:1:0::2;49856:32:::0;;;:24:::2;:32;::::0;;:36;;;:32;49918;-1:-1:-1;;;;;49918:13:0;::::2;::::0;:32;::::2;;;::::0;49932:17;;49891:1;49918:32;49891:1;49918:32;49932:17;49918:13;:32;::::2;;;;;;49903:47;;49969:7;49961:42;;;;-1:-1:-1::0;;;49961:42:0::2;;;;;;;:::i;:::-;50029:58;::::0;50069:17;;-1:-1:-1;;;;;50029:58:0;::::2;::::0;50052:4:::2;::::0;50029:58:::2;::::0;;;::::2;26257:1;;49620:475:::0;:::o;37024:88::-;37096:8;;37024:88;:::o;27246:102::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;27316:24:::1;27330:9;27316:13;:24::i;:::-;27246:102:::0;:::o;28234:115::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;26494:7:::1;::::0;-1:-1:-1;;;26494:7:0;::::1;;;26486:40;;;;-1:-1:-1::0;;;26486:40:0::1;;;;;;;:::i;:::-;28293:7:::2;:15:::0;;-1:-1:-1;;;;28293:15:0::2;::::0;;28333:7:::2;::::0;28324:17:::2;::::0;::::2;::::0;::::2;::::0;-1:-1:-1;;;;;28333:7:0;;::::2;::::0;28324:17:::2;:::i;:::-;;;;;;;;28234:115::o:0;37352:111::-;37445:10;;;;;;;;;;;;-1:-1:-1;;;37445:10:0;;;;37352:111;:::o;48474:637::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;48544:20:0::2;48771:32:::0;;;;;48697:34;;48629:10:::2;48771:32;48629:18:::0;-1:-1:-1;;;;;;;;;;;48629:28:0;48567:237:::2;::::0;48771:32;48567:165:::2;::::0;;;48568:21:::2;::::0;48567:61:::2;:91::i;:::-;:129:::0;::::2;:165::i;:237::-;48544:260:::0;-1:-1:-1;48833:17:0;48825:48:::2;;;;-1:-1:-1::0;;;48825:48:0::2;;;;;;;:::i;:::-;48886:22;48911:12;:10;:12::i;:::-;48886:37;;48934:12;48949:6;-1:-1:-1::0;;;;;48949:11:0::2;:25;48961:12;48949:25;;;;;;;;;;;;;;;;;;;;;;;48934:40;;48993:7;48985:42;;;;-1:-1:-1::0;;;48985:42:0::2;;;;;;;:::i;:::-;49053:50;::::0;49090:12;;-1:-1:-1;;;;;49053:50:0;::::2;::::0;49075:4:::2;::::0;49053:50:::2;::::0;;;::::2;26257:1;;;48474:637::o:0;39075:374::-;39186:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;29204:9:::1;:7;:9::i;:::-;29182:115;;;;-1:-1:-1::0;;;29182:115:0::1;;;;;;;:::i;:::-;39243:11:::2;39229;:25;39221:84;;;;-1:-1:-1::0;;;39221:84:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;39332:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;::::0;::::2;:45:::0;;;;39396:31:::2;;:45:::0;39075:374::o;7168:137::-;7281:16;;-1:-1:-1;;;;;7281:16:0;;;7268:29;;;;7168:137::o;33832:22::-;;;;:::o;43344:473::-;43597:12;-1:-1:-1;;;;;43584:33:0;;43618:12;:10;:12::i;:::-;43640:4;43647:6;43655:20;;;;43677:15;;;;;;;;:::i;:::-;43694:13;:15;;;43711:13;:15;;;43584:143;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43742:55;43755:12;43769:8;43779:6;43787:9;43742:12;:55::i;:::-;43344:473;;;;;:::o;26791:94::-;26870:7;;-1:-1:-1;;;;;26870:7:0;26856:10;:21;;26791:94::o;36863:153::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;36929:36:::1;;-1:-1:-1::0;;;36929:36:0::1;;;;;;;:::i;26614:84::-:0;26683:7;;-1:-1:-1;;;;;26683:7:0;26614:84;:::o;36697:158::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;36765:39:::1;;-1:-1:-1::0;;;36765:39:0::1;;;;;;;:::i;34405:48::-:0;;;;;;;;;;;;;;;:::o;38902:165::-;38977:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;29204:9:::1;:7;:9::i;:::-;29182:115;;;;-1:-1:-1::0;;;29182:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;39012:24:0::2;39054:5;39012:24:::0;;;:10:::2;:24;::::0;;;;:39:::2;;:47:::0;;-1:-1:-1;;39012:47:0::2;::::0;;38902:165::o;6874:31::-;;;-1:-1:-1;;;;;6874:31:0;;:::o;27980:113::-;25872:10;:8;:10::i;:::-;25850:108;;;;-1:-1:-1;;;25850:108:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;28040:7:::2;:14:::0;;-1:-1:-1;;;;28040:14:0::2;-1:-1:-1::0;;;28040:14:0::2;::::0;;28077:7:::2;::::0;28070:15:::2;::::0;::::2;::::0;::::2;::::0;-1:-1:-1;;;;;28077:7:0;;::::2;::::0;28070:15:::2;:::i;41188:676::-:0;41279:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;41312:11;41304:42:::1;;;;-1:-1:-1::0;;;41304:42:0::1;;;;;;;:::i;:::-;41357:22;41382:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;41413:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;;;;:50;;::::1;::::0;;:42:::1;::::0;;::::1;:50:::0;;;;41357:37;;-1:-1:-1;41413:60:0;-1:-1:-1;41413:60:0::1;41405:91;;;;-1:-1:-1::0;;;41405:91:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41562:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;;;;:50;;::::1;::::0;;:42:::1;::::0;;::::1;:50:::0;;;;:62:::1;::::0;41617:6;41562:54:::1;:62::i;:::-;-1:-1:-1::0;;;;;41509:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;;;;:50;;::::1;::::0;;:42:::1;::::0;::::1;:50:::0;;;;:115;;;;41672:24;;;;;;:34:::1;;::::0;:46:::1;::::0;41711:6;41672:38:::1;:46::i;:::-;-1:-1:-1::0;;;;;41635:24:0;::::1;;::::0;;;:10:::1;:24;::::0;;;;:34:::1;;:83:::0;41731:60:::1;41646:12:::0;41776:6;41784;41731:22:::1;:60::i;:::-;41847:6;-1:-1:-1::0;;;;;41807:47:0::1;41839:6;41825:12;-1:-1:-1::0;;;;;41807:47:0::1;;;;;;;;;;;36074:1;41188:676:::0;;;:::o;46202:457::-;46337:27;46366:11;46464:12;46495:6;46520:8;46557:11;46547:22;;;;;;46435:149;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46435:149:0;;;;;;;;;46411:184;;46435:149;46411:184;;;;46617:34;;;;:13;:34;;;;;;46411:184;;46617:34;;;;;-1:-1:-1;46202:457:0;-1:-1:-1;;;;;46202:457:0:o;44296:1898::-;23438:1;24034:7;;:19;;24026:63;;;;-1:-1:-1;;;24026:63:0;;;;;;;:::i;:::-;23438:1;24167:7;:18;35714:15:::1;::::0;-1:-1:-1;;;;;35714:15:0::1;:33;35748:12;:10;:12::i;:::-;35714:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35706:128;;;;-1:-1:-1::0;;;35706:128:0::1;;;;;;;:::i;:::-;44483:12:::0;-1:-1:-1;;;;;35923:26:0;::::2;35915:64;;;;-1:-1:-1::0;;;35915:64:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35998:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:39:::2;;::::0;::::2;;35990:71;;;;-1:-1:-1::0;;;35990:71:0::2;;;;;;;:::i;:::-;26218:7:::3;::::0;-1:-1:-1;;;26218:7:0;::::3;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::3;;;;;;;:::i;:::-;44522:18:::4;44543:9;-1:-1:-1::0;;;;;44571:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:31:::4;;::::0;44522:30;;-1:-1:-1;44571:41:0;-1:-1:-1;44571:41:0;::::4;::::0;:86:::4;;-1:-1:-1::0;;;;;;44616:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:31:::4;;::::0;:41;-1:-1:-1;44616:41:0::4;44571:86;44563:150;;;;-1:-1:-1::0;;;44563:150:0::4;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44732:22:0;::::4;44724:55;;;;-1:-1:-1::0;;;44724:55:0::4;;;;;;;:::i;:::-;44793:27;44822:11:::0;44837:60:::4;44853:12;44867:6;44875:8;44885:11;44837:15;:60::i;:::-;44792:105;;;;44919:6;44918:7;44910:37;;;;-1:-1:-1::0;;;44910:37:0::4;;;;;;;:::i;:::-;44958:34;::::0;;;:13:::4;:34;::::0;;;;:41;;-1:-1:-1;;44958:41:0::4;44995:4;44958:41;::::0;;45051:8:::4;::::0;45040:31:::4;::::0;45065:5:::4;::::0;45040:20:::4;::::0;:6;;:10:::4;:20::i;:::-;:24:::0;::::4;:31::i;:::-;-1:-1:-1::0;;;;;45127:40:0;::::4;;::::0;;;:26:::4;:40;::::0;;;;;45012:59;;-1:-1:-1;45127:63:0::4;::::0;45012:59;45127:44:::4;:63::i;:::-;-1:-1:-1::0;;;;;45084:40:0;::::4;;::::0;;;:26:::4;:40;::::0;;;;:106;;;;45228:25:::4;45243:9;45228:10:::0;;:14:::4;:25::i;:::-;-1:-1:-1::0;;;;;45297:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:41;45204:50;;-1:-1:-1;45280:59:0::4;::::0;45204:50;;45280:16:::4;:59::i;:::-;45265:74;;45365:25;45382:7;;45365:12;:16;;:25;;;;:::i;:::-;45350:40:::0;-1:-1:-1;45444:75:0::4;45487:31;45350:40:::0;45504:13;45487:16:::4;:31::i;:::-;-1:-1:-1::0;;;;;45444:38:0;::::4;;::::0;;;:24:::4;:38;::::0;;;;;;:42:::4;:75::i;:::-;-1:-1:-1::0;;;;;45403:38:0;::::4;;::::0;;;:24:::4;:38;::::0;;;;:116;;;;45557:66:::4;45568:54;45590:31;:12:::0;45607:13;45590:16:::4;:31::i;:::-;45568:17:::0;;:21:::4;:54::i;:::-;45557:6:::0;;:10:::4;:66::i;:::-;45530:93:::0;-1:-1:-1;;;;;;45640:22:0;::::4;-1:-1:-1::0;;;;;;;;;;;45640:22:0::4;45636:461;;;45712:16;45687:21;:41;;45679:72;;;;-1:-1:-1::0;;;45679:72:0::4;;;;;;;:::i;:::-;45781:31;::::0;45766:12:::4;::::0;-1:-1:-1;;;;;45781:13:0;::::4;::::0;:31;::::4;;;::::0;45795:16;;45766:12;45781:31;45766:12;45781:31;45795:16;45781:13;:31;::::4;;;;;;45766:46;;45835:7;45827:42;;;;-1:-1:-1::0;;;45827:42:0::4;;;;;;;:::i;:::-;45636:461;;;;45910:45;::::0;-1:-1:-1;;;45910:45:0;;45959:16;;-1:-1:-1;;;;;45910:30:0;::::4;::::0;::::4;::::0;:45:::4;::::0;45949:4:::4;::::0;45910:45:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;45902:96;;;;-1:-1:-1::0;;;45902:96:0::4;;;;;;;:::i;:::-;46013:72;46043:12;46058:8;46068:16;46013:22;:72::i;:::-;46146:16;46138:6;46124:12;-1:-1:-1::0;;;;;46114:72:0::4;;46164:8;46174:11;46114:72;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;23394:1:0;24346:7;:22;-1:-1:-1;;;;;;;;;;44296:1898:0:o;29385:82::-;29453:6;;-1:-1:-1;;;;;29453:6:0;29385:82;:::o;38219:198::-;38319:12;-1:-1:-1;;;;;35923:26:0;;35915:64;;;;-1:-1:-1;;;35915:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35998:24:0;;;;;;:10;:24;;;;;:39;;;;;35990:71;;;;-1:-1:-1;;;35990:71:0;;;;;;;:::i;:::-;29204:9:::1;:7;:9::i;:::-;29182:115;;;;-1:-1:-1::0;;;29182:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;38354:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;:55;38219:198::o;29560:92::-;29638:6;;-1:-1:-1;;;;;29638:6:0;29624:10;:20;;29560:92::o;33913:23::-;;;;:::o;37562:109::-;37647:15;;-1:-1:-1;;;;;37647:15:0;37562:109;:::o;26985:80::-;27050:7;;-1:-1:-1;;;27050:7:0;;;;;26985:80::o;39457:449::-;26218:7;;-1:-1:-1;;;26218:7:0;;;;26217:8;26209:37;;;;-1:-1:-1;;;26209:37:0;;;;;;;:::i;:::-;39537:9:::1;39529:45;;;;-1:-1:-1::0;;;39529:45:0::1;;;;;;;:::i;:::-;39585:22;39610:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;39680:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;39680:18:0::1;:44:::0;:18;:44;;;39585:37;;-1:-1:-1;39680:59:0::1;::::0;39729:9:::1;39680:48;:59::i;:::-;-1:-1:-1::0;;;;;39633:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;39633:18:0::1;:44:::0;;;:18;:44;;:106;;;;-1:-1:-1;;;;;;;;;;;39781:18:0;;39633:10:::1;39781:18:::0;;-1:-1:-1;;;;;;;;;;;39781:28:0;:43:::1;::::0;39814:9:::1;39781:32;:43::i;:::-;-1:-1:-1::0;;;;;;;;;;;39750:18:0::1;::::0;;;:10:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;39750:74:0;;;;:18;39842:56;39881:4:::1;::::0;33783:42;-1:-1:-1;;;;;39842:56:0;::::1;::::0;::::1;::::0;::::1;::::0;39888:9:::1;::::0;39842:56:::1;:::i;:::-;;;;;;;;26257:1;39457:449::o:0;37120:224::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;37217:16:::0;37209:50:::2;;;;-1:-1:-1::0;;;37209:50:0::2;;;;;;;:::i;:::-;37270:8;:22:::0;;;37308:28:::2;::::0;37281:11;;37308:28:::2;::::0;;;::::2;37120:224:::0;:::o;34348:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46667:653::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47019:38:0;::::2;46756:20;47019:38:::0;;;:24:::2;:38;::::0;;;;;;;;46939:26:::2;:40:::0;;;;;;46865:10:::2;:24:::0;;;;;;:34:::2;::::0;;::::2;::::0;46780:45;;-1:-1:-1;;;46780:45:0;;46756:20;;46779:279:::2;::::0;47019:38;;46779:201:::2;::::0;46939:40;;46779:201;;46865:34;;47019:38;46780:30:::2;::::0;:45:::2;::::0;46819:4:::2;::::0;46780:45:::2;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46779:279::-;46756:302:::0;-1:-1:-1;47077:17:0;47069:48:::2;;;;-1:-1:-1::0;;;47069:48:0::2;;;;;;;:::i;:::-;47128:22;47153:12;:10;:12::i;:::-;47128:37;;47178:66;47208:12;47223:6;47231:12;47178:22;:66::i;:::-;47299:12;47290:6;-1:-1:-1::0;;;;;47262:50:0::2;47276:12;-1:-1:-1::0;;;;;47262:50:0::2;;;;;;;;;;;26257:1;;46667:653:::0;:::o;37471:83::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37533:13:0::1;:7;:13:::0;37471:83::o;37941:270::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38036:30:0;::::1;38028:72;;;;-1:-1:-1::0;;;38028:72:0::1;;;;;;;:::i;:::-;38111:16;:35:::0;;-1:-1:-1;;;;;;38111:35:0::1;-1:-1:-1::0;;;;;38111:35:0;::::1;::::0;;::::1;::::0;;;38162:41:::1;::::0;::::1;::::0;-1:-1:-1;;38162:41:0::1;37941:270:::0;:::o;34460:62::-;;;;;;;;;;;;;:::o;41872:203::-;-1:-1:-1;;;;;41999:24:0;;;41971:7;41999:24;;;:10;:24;;;;;;;;:68;;;;;:42;;;;:68;;;;41872:203;;;;;:::o;38425:469::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38556:26:0;::::1;38548:64;;;;-1:-1:-1::0;;;38548:64:0::1;;;;;;;:::i;:::-;38647:11;38633;:25;38625:84;;;;-1:-1:-1::0;;;38625:84:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38728:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;38770:4:::1;38728:39:::0;;::::1;:46:::0;;-1:-1:-1;;38728:46:0::1;::::0;;::::1;::::0;;38785:31:::1;::::0;::::1;:45:::0;;;;38841:31:::1;;:45:::0;38425:469::o;37679:254::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37778:37:0;::::1;37770:86;;;;-1:-1:-1::0;;;37770:86:0::1;;;;;;;:::i;:::-;37867:15;:58:::0;;-1:-1:-1;;;;;;37867:58:0::1;-1:-1:-1::0;;;;;37867:58:0;;;::::1;::::0;;;::::1;::::0;;37679:254::o;30265:109::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;30338:28:::1;30357:8;30338:18;:28::i;39914:638::-:0;23438:1;24034:7;;:19;;24026:63;;;;-1:-1:-1;;;24026:63:0;;;;;;;:::i;:::-;23438:1;24167:7;:18;40002:11;39994:43:::1;;;;-1:-1:-1::0;;;39994:43:0::1;;;;;;;:::i;:::-;40048:22;40073:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;40104:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;40104:18:0::1;:44:::0;:18;:44;;;40048:37;;-1:-1:-1;40104:54:0;-1:-1:-1;40104:54:0::1;40096:85;;;;-1:-1:-1::0;;;40096:85:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40239:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;40239:18:0::1;:44:::0;:18;:44;;;:56:::1;::::0;40288:6;40239:48:::1;:56::i;:::-;-1:-1:-1::0;;;;;40192:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;40192:18:0::1;:44:::0;;;:18;:44;;:103;;;;-1:-1:-1;;;;;;;;;;;40337:18:0;;40192:10:::1;40337:18:::0;;-1:-1:-1;;;;;;;;;;;40337:28:0;:40:::1;::::0;40370:6;40337:32:::1;:40::i;:::-;-1:-1:-1::0;;;;;;;;;;;40306:18:0::1;::::0;;;:10:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;40306:71:0;;;;:18;40413:19;-1:-1:-1;;;;;40413:11:0;::::1;::::0;:19;::::1;;;::::0;40425:6;;40306:18;40413:19;40306:18;40413:19;40425:6;40413:11;:19;::::1;;;;;;40398:34;;40451:7;40443:42;;;;-1:-1:-1::0;;;40443:42:0::1;;;;;;;:::i;:::-;40503:41;::::0;-1:-1:-1;;;;;40503:41:0;::::1;::::0;40529:6;;-1:-1:-1;;;;;;;;;;;33783:42:0;40503:41:::1;::::0;;;::::1;-1:-1:-1::0;;23394:1:0;24346:7;:22;-1:-1:-1;39914:638:0:o;49119:493::-;29204:9;:7;:9::i;:::-;29182:115;;;;-1:-1:-1;;;29182:115:0;;;;;;;:::i;:::-;26218:7:::1;::::0;-1:-1:-1;;;26218:7:0;::::1;;;26217:8;26209:37;;;;-1:-1:-1::0;;;26209:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49221:27:0::2;49251:34:::0;:26:::2;:34;::::0;;;49304:24;49296:58:::2;;;;-1:-1:-1::0;;;49296:58:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;49402:1:0::2;49365:34:::0;;;:26:::2;:34;::::0;;:38;;;:34;49429;-1:-1:-1;;;;;49429:13:0;::::2;::::0;:34;::::2;;;::::0;49443:19;;49402:1;49429:34;49402:1;49429:34;49443:19;49429:13;:34;::::2;;;;;;49414:49;;49482:7;49474:42;;;;-1:-1:-1::0;;;49474:42:0::2;;;;;;;:::i;:::-;49542:62;::::0;49584:19;;-1:-1:-1;;;;;49542:62:0;::::2;::::0;49567:4:::2;::::0;49542:62:::2;::::0;;;::::2;26257:1;;49119:493:::0;:::o;42798:490::-;43044:12;-1:-1:-1;;;;;43031:33:0;;43065:12;:10;:12::i;:::-;43087:4;43094:19;;43115:20;;;;43137:21;;;;;;;;:::i;:::-;43160:15;;;;;;;;:::i;:::-;43177:13;:15;;;43194:13;:15;;;43031:179;;;;;;;;;;;;;;;;;;;;;;:::i;34529:64::-;;;;;;;;;;;;;:::o;18824:205::-;18925:96;18945:5;18975:27;;;19004:4;19010:2;19014:5;18952:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;18952:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;18952:68:0;-1:-1:-1;;;;;;18952:68:0;;;;;;;;;;18925:19;:96::i;:::-;18824:205;;;;:::o;979:181::-;1037:7;1069:5;;;1093:6;;;;1085:46;;;;-1:-1:-1;;;1085:46:0;;;;;;;:::i;:::-;1151:1;979:181;-1:-1:-1;;;979:181:0:o;18639:177::-;18722:86;18742:5;18772:23;;;18797:2;18801:5;18749:58;;;;;;;;;:::i;18722:86::-;18639:177;;;:::o;27500:181::-;-1:-1:-1;;;;;27570:23:0;;27562:32;;;;;;27624:7;;27610:33;;-1:-1:-1;;;;;27610:33:0;;;;27624:7;;27610:33;;27624:7;;27610:33;27654:7;:19;;-1:-1:-1;;;;;;27654:19:0;-1:-1:-1;;;;;27654:19:0;;;;;;;;;;27500:181::o;1443:136::-;1501:7;1528:43;1532:1;1535;1528:43;;;;;;;;;;;;;;;;;:3;:43::i;2333:471::-;2391:7;2636:6;2632:47;;-1:-1:-1;2666:1:0;2659:8;;2632:47;2703:5;;;2707:1;2703;:5;:1;2727:5;;;;;:10;2719:56;;;;-1:-1:-1;;;2719:56:0;;;;;;;:::i;3280:132::-;3338:7;3365:39;3369:1;3372;3365:39;;;;;;;;;;;;;;;;;:3;:39::i;30524:187::-;-1:-1:-1;;;;;30598:22:0;;30590:31;;;;;;30658:6;;30637:38;;-1:-1:-1;;;;;30637:38:0;;;;30658:6;;30637:38;;30658:6;;30637:38;30686:6;:17;;-1:-1:-1;;;;;;30686:17:0;-1:-1:-1;;;;;30686:17:0;;;;;;;;;;30524:187::o;20944:761::-;21368:23;21394:69;21422:4;21394:69;;;;;;;;;;;;;;;;;21402:5;-1:-1:-1;;;;;21394:27:0;;;:69;;;;;:::i;:::-;21478:17;;21368:95;;-1:-1:-1;21478:21:0;21474:224;;21620:10;21609:30;;;;;;;;;;;;:::i;:::-;21601:85;;;;-1:-1:-1;;;21601:85:0;;;;;;;:::i;1882:192::-;1968:7;2004:12;1996:6;;;;1988:29;;;;-1:-1:-1;;;1988:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2040:5:0;;;1882:192::o;3908:278::-;3994:7;4029:12;4022:5;4014:28;;;;-1:-1:-1;;;4014:28:0;;;;;;;;:::i;:::-;;4053:9;4069:1;4065;:5;;;;;;;3908:278;-1:-1:-1;;;;;3908:278:0:o;14638:195::-;14741:12;14773:52;14795:6;14803:4;14809:1;14812:12;14773:21;:52::i;:::-;14766:59;14638:195;-1:-1:-1;;;;14638:195:0:o;15690:530::-;15817:12;15875:5;15850:21;:30;;15842:81;;;;-1:-1:-1;;;15842:81:0;;;;;;;:::i;:::-;15942:18;15953:6;15942:10;:18::i;:::-;15934:60;;;;-1:-1:-1;;;15934:60:0;;;;;;;:::i;:::-;16068:12;16082:23;16109:6;-1:-1:-1;;;;;16109:11:0;16129:5;16137:4;16109:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16067:75;;;;16160:52;16178:7;16187:10;16199:12;16160:17;:52::i;:::-;16153:59;15690:530;-1:-1:-1;;;;;;;15690:530:0:o;11720:422::-;12087:20;12126:8;;;11720:422::o;17226:742::-;17341:12;17370:7;17366:595;;;-1:-1:-1;17401:10:0;17394:17;;17366:595;17515:17;;:21;17511:439;;17778:10;17772:17;17839:15;17826:10;17822:2;17818:19;17811:44;17726:148;17921:12;17914:20;;-1:-1:-1;;;17914:20:0;;;;;;;;:::i;14:694:1:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;199:18;236:2;232;229:10;226:2;;;242:9;226:2;282;276:9;351:2;332:13;;-1:-1:-1;;328:27:1;316:40;;358:4;312:51;378:18;;;398:22;;;375:46;372:2;;;424:9;372:2;451;444:22;475:18;;;512:15;;;529:4;508:26;505:35;-1:-1:-1;502:2:1;;;557:5;550;543:20;502:2;625;618:4;610:6;606:17;599:4;591:6;587:17;574:54;648:15;;;665:4;644:26;637:41;;;;652:6;68:640;-1:-1:-1;;;68:640:1:o;713:259::-;;825:2;813:9;804:7;800:23;796:32;793:2;;;846:6;838;831:22;793:2;890:9;877:23;909:33;936:5;909:33;:::i;1249:402::-;;;1378:2;1366:9;1357:7;1353:23;1349:32;1346:2;;;1399:6;1391;1384:22;1346:2;1443:9;1430:23;1462:33;1489:5;1462:33;:::i;:::-;1514:5;-1:-1:-1;1571:2:1;1556:18;;1543:32;1584:35;1543:32;1584:35;:::i;:::-;1638:7;1628:17;;;1336:315;;;;;:::o;1656:539::-;;;;;1819:3;1807:9;1798:7;1794:23;1790:33;1787:2;;;1841:6;1833;1826:22;1787:2;1885:9;1872:23;1904:33;1931:5;1904:33;:::i;:::-;1956:5;-1:-1:-1;2013:2:1;1998:18;;1985:32;2026:35;1985:32;2026:35;:::i;:::-;1777:418;;2080:7;;-1:-1:-1;;;;2134:2:1;2119:18;;2106:32;;2185:2;2170:18;2157:32;;1777:418::o;2200:714::-;;;;;;2404:9;2395:7;2391:23;2434:3;2430:2;2426:12;2423:2;;;2456:6;2448;2441:22;2423:2;2500:9;2487:23;2519:33;2546:5;2519:33;:::i;:::-;2571:5;-1:-1:-1;2628:2:1;2613:18;;2600:32;2641:35;2600:32;2641:35;:::i;:::-;2695:7;-1:-1:-1;2749:2:1;2734:18;;2721:32;;-1:-1:-1;2800:2:1;2785:18;;2772:32;;-1:-1:-1;2839:3:1;-1:-1:-1;;2820:17:1;;2816:27;2813:2;;;2861:6;2853;2846:22;2813:2;;2904:3;2893:9;2889:19;2879:29;;2371:543;;;;;;;;:::o;2919:327::-;;;3048:2;3036:9;3027:7;3023:23;3019:32;3016:2;;;3069:6;3061;3054:22;3016:2;3113:9;3100:23;3132:33;3159:5;3132:33;:::i;:::-;3184:5;3236:2;3221:18;;;;3208:32;;-1:-1:-1;;;3006:240:1:o;3251:699::-;;;;;3431:3;3419:9;3410:7;3406:23;3402:33;3399:2;;;3453:6;3445;3438:22;3399:2;3497:9;3484:23;3516:33;3543:5;3516:33;:::i;:::-;3568:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;;-1:-1:-1;3676:2:1;3661:18;;3648:32;3689:35;3648:32;3689:35;:::i;:::-;3743:7;-1:-1:-1;3801:2:1;3786:18;;3773:32;3828:18;3817:30;;3814:2;;;3865:6;3857;3850:22;3814:2;3893:51;3936:7;3927:6;3916:9;3912:22;3893:51;:::i;:::-;3883:61;;;3389:561;;;;;;;:::o;3955:768::-;;;;;;4152:3;4140:9;4131:7;4127:23;4123:33;4120:2;;;4174:6;4166;4159:22;4120:2;4218:9;4205:23;4237:33;4264:5;4237:33;:::i;:::-;4289:5;-1:-1:-1;4341:2:1;4326:18;;4313:32;;-1:-1:-1;4397:2:1;4382:18;;4369:32;4410:35;4369:32;4410:35;:::i;:::-;4464:7;-1:-1:-1;4522:2:1;4507:18;;4494:32;4549:18;4538:30;;4535:2;;;4586:6;4578;4571:22;4535:2;4614:51;4657:7;4648:6;4637:9;4633:22;4614:51;:::i;:::-;4110:613;;;;-1:-1:-1;4110:613:1;;4712:3;4697:19;4684:33;;4110:613;-1:-1:-1;;;4110:613:1:o;4728:395::-;;;;4874:2;4862:9;4853:7;4849:23;4845:32;4842:2;;;4895:6;4887;4880:22;4842:2;4939:9;4926:23;4958:33;4985:5;4958:33;:::i;:::-;5010:5;5062:2;5047:18;;5034:32;;-1:-1:-1;5113:2:1;5098:18;;;5085:32;;4832:291;-1:-1:-1;;;4832:291:1:o;5128:253::-;;5237:2;5225:9;5216:7;5212:23;5208:32;5205:2;;;5258:6;5250;5243:22;5205:2;5302:9;5289:23;5321:30;5345:5;5321:30;:::i;5386:257::-;;5506:2;5494:9;5485:7;5481:23;5477:32;5474:2;;;5527:6;5519;5512:22;5474:2;5564:9;5558:16;5583:30;5607:5;5583:30;:::i;5648:190::-;;5760:2;5748:9;5739:7;5735:23;5731:32;5728:2;;;5781:6;5773;5766:22;5728:2;-1:-1:-1;5809:23:1;;5718:120;-1:-1:-1;5718:120:1:o;5843:321::-;;5955:2;5943:9;5934:7;5930:23;5926:32;5923:2;;;5976:6;5968;5961:22;5923:2;6020:9;6007:23;-1:-1:-1;;;;;6063:5:1;6059:46;6052:5;6049:57;6039:2;;6125:6;6117;6110:22;6364:194;;6487:2;6475:9;6466:7;6462:23;6458:32;6455:2;;;6508:6;6500;6493:22;6455:2;-1:-1:-1;6536:16:1;;6445:113;-1:-1:-1;6445:113:1:o;6563:289::-;;6673:2;6661:9;6652:7;6648:23;6644:32;6641:2;;;6694:6;6686;6679:22;6641:2;6738:9;6725:23;6788:4;6781:5;6777:16;6770:5;6767:27;6757:2;;6813:6;6805;6798:22;6857:259;;6938:5;6932:12;6965:6;6960:3;6953:19;6981:63;7037:6;7030:4;7025:3;7021:14;7014:4;7007:5;7003:16;6981:63;:::i;:::-;7098:2;7077:15;-1:-1:-1;;7073:29:1;7064:39;;;;7105:4;7060:50;;6908:208;-1:-1:-1;;6908:208:1:o;7121:274::-;;7288:6;7282:13;7304:53;7350:6;7345:3;7338:4;7330:6;7326:17;7304:53;:::i;:::-;7373:16;;;;;7258:137;-1:-1:-1;;7258:137:1:o;7400:203::-;-1:-1:-1;;;;;7564:32:1;;;;7546:51;;7534:2;7519:18;;7501:102::o;7824:768::-;-1:-1:-1;;;;;8229:15:1;;;8211:34;;8281:15;;;;8276:2;8261:18;;8254:43;8328:2;8313:18;;8306:34;;;;8371:2;8356:18;;8349:34;;;;8427:14;8420:22;8414:3;8399:19;;8392:51;8492:4;8480:17;8191:3;8459:19;;8452:46;8529:3;8514:19;;8507:35;8573:3;8558:19;;8551:35;;;;8160:3;8145:19;;8127:465::o;8597:686::-;-1:-1:-1;;;;;8980:15:1;;;8962:34;;9032:15;;;;9027:2;9012:18;;9005:43;9079:2;9064:18;;9057:34;;;;9122:2;9107:18;;9100:34;;;;9183:4;9171:17;9165:3;9150:19;;9143:46;8942:3;9205:19;;9198:35;9264:3;9249:19;;9242:35;;;;8911:3;8896:19;;8878:405::o;9288:324::-;-1:-1:-1;;;;;9471:32:1;;9453:51;;9540:2;9535;9520:18;;9513:30;;;9288:324;;9560:46;;9587:18;;9579:6;9560:46;:::i;9617:282::-;-1:-1:-1;;;;;9817:32:1;;;;9799:51;;9881:2;9866:18;;9859:34;9787:2;9772:18;;9754:145::o;9904:375::-;-1:-1:-1;;;;;10162:15:1;;;10144:34;;10214:15;;;;10209:2;10194:18;;10187:43;10261:2;10246:18;;10239:34;;;;10094:2;10079:18;;10061:218::o;10563:463::-;-1:-1:-1;;;;;10866:15:1;;;10848:34;;10913:2;10898:18;;10891:34;;;;10961:15;;10956:2;10941:18;;10934:43;11008:2;10993:18;;10986:34;;;;10797:3;10782:19;;10764:262::o;11031:187::-;11196:14;;11189:22;11171:41;;11159:2;11144:18;;11126:92::o;11223:258::-;11391:25;;;11459:14;11452:22;11447:2;11432:18;;11425:50;11379:2;11364:18;;11346:135::o;11486:221::-;;11635:2;11624:9;11617:21;11655:46;11697:2;11686:9;11682:18;11674:6;11655:46;:::i;11712:344::-;11914:2;11896:21;;;11953:2;11933:18;;;11926:30;-1:-1:-1;;;11987:2:1;11972:18;;11965:50;12047:2;12032:18;;11886:170::o;12061:345::-;12263:2;12245:21;;;12302:2;12282:18;;;12275:30;-1:-1:-1;;;12336:2:1;12321:18;;12314:51;12397:2;12382:18;;12235:171::o;12411:400::-;12613:2;12595:21;;;12652:2;12632:18;;;12625:30;12691:34;12686:2;12671:18;;12664:62;-1:-1:-1;;;12757:2:1;12742:18;;12735:34;12801:3;12786:19;;12585:226::o;12816:407::-;13018:2;13000:21;;;13057:2;13037:18;;;13030:30;13096:34;13091:2;13076:18;;13069:62;-1:-1:-1;;;13162:2:1;13147:18;;13140:41;13213:3;13198:19;;12990:233::o;13228:351::-;13430:2;13412:21;;;13469:2;13449:18;;;13442:30;13508:29;13503:2;13488:18;;13481:57;13570:2;13555:18;;13402:177::o;13584:349::-;13786:2;13768:21;;;13825:2;13805:18;;;13798:30;13864:27;13859:2;13844:18;;13837:55;13924:2;13909:18;;13758:175::o;13938:342::-;14140:2;14122:21;;;14179:2;14159:18;;;14152:30;-1:-1:-1;;;14213:2:1;14198:18;;14191:48;14271:2;14256:18;;14112:168::o;14285:414::-;14487:2;14469:21;;;14526:2;14506:18;;;14499:30;14565:34;14560:2;14545:18;;14538:62;-1:-1:-1;;;14631:2:1;14616:18;;14609:48;14689:3;14674:19;;14459:240::o;14704:343::-;14906:2;14888:21;;;14945:2;14925:18;;;14918:30;-1:-1:-1;;;14979:2:1;14964:18;;14957:49;15038:2;15023:18;;14878:169::o;15052:352::-;15254:2;15236:21;;;15293:2;15273:18;;;15266:30;15332;15327:2;15312:18;;15305:58;15395:2;15380:18;;15226:178::o;15409:402::-;15611:2;15593:21;;;15650:2;15630:18;;;15623:30;15689:34;15684:2;15669:18;;15662:62;-1:-1:-1;;;15755:2:1;15740:18;;15733:36;15801:3;15786:19;;15583:228::o;15816:409::-;16018:2;16000:21;;;16057:2;16037:18;;;16030:30;16096:34;16091:2;16076:18;;16069:62;-1:-1:-1;;;16162:2:1;16147:18;;16140:43;16215:3;16200:19;;15990:235::o;16230:342::-;16432:2;16414:21;;;16471:2;16451:18;;;16444:30;-1:-1:-1;;;16505:2:1;16490:18;;16483:48;16563:2;16548:18;;16404:168::o;16577:340::-;16779:2;16761:21;;;16818:2;16798:18;;;16791:30;-1:-1:-1;;;16852:2:1;16837:18;;16830:46;16908:2;16893:18;;16751:166::o;16922:413::-;17124:2;17106:21;;;17163:2;17143:18;;;17136:30;17202:34;17197:2;17182:18;;17175:62;-1:-1:-1;;;17268:2:1;17253:18;;17246:47;17325:3;17310:19;;17096:239::o;17340:415::-;17542:2;17524:21;;;17581:2;17561:18;;;17554:30;17620:34;17615:2;17600:18;;17593:62;-1:-1:-1;;;17686:2:1;17671:18;;17664:49;17745:3;17730:19;;17514:241::o;17760:344::-;17962:2;17944:21;;;18001:2;17981:18;;;17974:30;-1:-1:-1;;;18035:2:1;18020:18;;18013:50;18095:2;18080:18;;17934:170::o;18109:342::-;18311:2;18293:21;;;18350:2;18330:18;;;18323:30;-1:-1:-1;;;18384:2:1;18369:18;;18362:48;18442:2;18427:18;;18283:168::o;18456:397::-;18658:2;18640:21;;;18697:2;18677:18;;;18670:30;18736:34;18731:2;18716:18;;18709:62;-1:-1:-1;;;18802:2:1;18787:18;;18780:31;18843:3;18828:19;;18630:223::o;18858:352::-;19060:2;19042:21;;;19099:2;19079:18;;;19072:30;19138;19133:2;19118:18;;19111:58;19201:2;19186:18;;19032:178::o;19215:342::-;19417:2;19399:21;;;19456:2;19436:18;;;19429:30;-1:-1:-1;;;19490:2:1;19475:18;;19468:48;19548:2;19533:18;;19389:168::o;19562:343::-;19764:2;19746:21;;;19803:2;19783:18;;;19776:30;-1:-1:-1;;;19837:2:1;19822:18;;19815:49;19896:2;19881:18;;19736:169::o;19910:409::-;20112:2;20094:21;;;20151:2;20131:18;;;20124:30;20190:34;20185:2;20170:18;;20163:62;-1:-1:-1;;;20256:2:1;20241:18;;20234:43;20309:3;20294:19;;20084:235::o;20324:420::-;20526:2;20508:21;;;20565:2;20545:18;;;20538:30;20604:34;20599:2;20584:18;;20577:62;20675:26;20670:2;20655:18;;20648:54;20734:3;20719:19;;20498:246::o;20749:346::-;20951:2;20933:21;;;20990:2;20970:18;;;20963:30;-1:-1:-1;;;21024:2:1;21009:18;;21002:52;21086:2;21071:18;;20923:172::o;21100:353::-;21302:2;21284:21;;;21341:2;21321:18;;;21314:30;21380:31;21375:2;21360:18;;21353:59;21444:2;21429:18;;21274:179::o;21458:410::-;21660:2;21642:21;;;21699:2;21679:18;;;21672:30;21738:34;21733:2;21718:18;;21711:62;-1:-1:-1;;;21804:2:1;21789:18;;21782:44;21858:3;21843:19;;21632:236::o;21873:345::-;22075:2;22057:21;;;22114:2;22094:18;;;22087:30;-1:-1:-1;;;22148:2:1;22133:18;;22126:51;22209:2;22194:18;;22047:171::o;22223:349::-;22425:2;22407:21;;;22464:2;22444:18;;;22437:30;22503:27;22498:2;22483:18;;22476:55;22563:2;22548:18;;22397:175::o;22577:406::-;22779:2;22761:21;;;22818:2;22798:18;;;22791:30;22857:34;22852:2;22837:18;;22830:62;-1:-1:-1;;;22923:2:1;22908:18;;22901:40;22973:3;22958:19;;22751:232::o;22988:355::-;23190:2;23172:21;;;23229:2;23209:18;;;23202:30;23268:33;23263:2;23248:18;;23241:61;23334:2;23319:18;;23162:181::o;23348:341::-;23550:2;23532:21;;;23589:2;23569:18;;;23562:30;-1:-1:-1;;;23623:2:1;23608:18;;23601:47;23680:2;23665:18;;23522:167::o;23694:412::-;23896:2;23878:21;;;23935:2;23915:18;;;23908:30;23974:34;23969:2;23954:18;;23947:62;-1:-1:-1;;;24040:2:1;24025:18;;24018:46;24096:3;24081:19;;23868:238::o;24111:353::-;24313:2;24295:21;;;24352:2;24332:18;;;24325:30;24391:31;24386:2;24371:18;;24364:59;24455:2;24440:18;;24285:179::o;24469:177::-;24615:25;;;24603:2;24588:18;;24570:76::o;24651:473::-;24904:25;;;24972:14;;24965:22;24960:2;24945:18;;24938:50;25019:2;25004:18;;24997:34;;;;25062:2;25047:18;;25040:34;25105:3;25090:19;;25083:35;24891:3;24876:19;;24858:266::o;25129:248::-;25303:25;;;25359:2;25344:18;;25337:34;25291:2;25276:18;;25258:119::o;25382:258::-;25454:1;25464:113;25478:6;25475:1;25472:13;25464:113;;;25554:11;;;25548:18;25535:11;;;25528:39;25500:2;25493:10;25464:113;;;25595:6;25592:1;25589:13;25586:2;;;-1:-1:-1;;25630:1:1;25612:16;;25605:27;25435:205::o;25645:133::-;-1:-1:-1;;;;;25722:31:1;;25712:42;;25702:2;;25768:1;25765;25758:12;25783:120;25871:5;25864:13;25857:21;25850:5;25847:32;25837:2;;25893:1;25890;25883:12
Swarm Source
ipfs://1141730766b471ff25cb6b82a3ced58edd31585bb92d4ca555406b9a67577cc5
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.