Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 16182094 | 1188 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TwapOrder
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-12-14
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.4;
interface IQueryableErc20 {
function totalSupply() external view returns (uint256);
function balanceOf(address addr) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function decimals() external view returns (uint8);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// 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;
}
}
/**
* @title Represents a resource that requires initialization.
*/
contract CustomInitializable {
bool private _wasInitialized;
/**
* @notice Throws if the resource was not initialized yet.
*/
modifier ifInitialized () {
require(_wasInitialized, "Not initialized yet");
_;
}
/**
* @notice Throws if the resource was initialized already.
*/
modifier ifNotInitialized () {
require(!_wasInitialized, "Already initialized");
_;
}
/**
* @notice Marks the resource as initialized.
*/
function _initializationCompleted () internal ifNotInitialized {
_wasInitialized = true;
}
}
/**
* @title Represents an ownable resource.
*/
contract CustomOwnable {
// The current owner of this resource.
address internal _owner;
/**
* @notice This event is triggered when the current owner transfers ownership of the contract.
* @param previousOwner The previous owner
* @param newOwner The new owner
*/
event OnOwnershipTransferred (address previousOwner, address newOwner);
/**
* @notice This modifier indicates that the function can only be called by the owner.
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == msg.sender, "Only owner");
_;
}
/**
* @notice Transfers ownership to the address specified.
* @param addr Specifies the address of the new owner.
* @dev Throws if called by any account other than the owner.
*/
function transferOwnership (address addr) external virtual onlyOwner {
require(addr != address(0), "non-zero address required");
emit OnOwnershipTransferred(_owner, addr);
_owner = addr;
}
/**
* @notice Gets the owner of this contract.
* @return Returns the address of the owner.
*/
function owner () external virtual view returns (address) {
return _owner;
}
}
/**
* @title The interface of a fully compliant EIP20
* @dev The interface is defined by https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
*/
interface IERC20Strict is IQueryableErc20 {
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
}
interface ITwapHook {
function newSyntheticPairDeployed (address sellingTokenAddress, address buyingTokenAddress, address newContractAddress) external;
function newOrderCreated (address sellingTokenAddress, address buyingTokenAddress, uint256 newDeadline, uint256 targetQty) external;
}
interface ITwapQuery {
function getOrderMetrics () external view returns (uint256 pStartedOn, uint256 pDeadline, uint256 pSpent, uint256 pFilled, uint256 pTradeSize, address srcToken, address dstToken, uint8 pState, bool pAlive);
}
interface IParaSwapAugustus {
function getTokenTransferProxy() external view returns (address);
}
contract TwapOrder is ITwapQuery, CustomOwnable, CustomInitializable, ReentrancyGuard {
address private constant AUGUSTUS_SWAPPER_ADDR = 0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57;
uint8 private constant STATE_ACTIVE = 1;
uint8 private constant STATE_FINISHED = 2;
uint8 private constant STATE_CANCELLED = 3;
uint256 internal _startedOn;
uint256 internal _deadline;
uint256 internal _spent;
uint256 internal _filled;
uint256 internal _tradeSize;
uint256 internal _priceLimit;
address public sellingTokenAddress;
address public buyingTokenAddress;
address public traderAddress;
address public depositorAddress;
address public hookAddress;
uint8 internal _currentState;
bool internal _orderAlive;
event OnTraderChanged (address newAddr);
event OnDepositorChanged (address newAddr);
event OnCompletion ();
event OnCancel ();
event OnClose ();
event OnOpen ();
event OnSwap (address fromToken, uint256 fromAmount, address toToken, uint256 toAmount);
constructor () {
_owner = msg.sender;
}
modifier onlyTrader() {
require(traderAddress == msg.sender, "Only trader");
_;
}
modifier onlyDepositor() {
require(depositorAddress == msg.sender, "Only depositor");
_;
}
modifier ifCanCloseOrder () {
require(_orderAlive, "Current order is not live");
require(
(_currentState == STATE_FINISHED || _currentState == STATE_CANCELLED) ||
(_currentState == STATE_ACTIVE && block.timestamp > _deadline) // solhint-disable-line not-rely-on-time
, "Cannot close order yet");
_;
}
function initialize (address traderAddr, address depositorAddr, IERC20Strict sellingToken, IERC20Strict buyingToken, ITwapHook hook) external onlyOwner ifNotInitialized {
require(address(sellingToken) != address(buyingToken), "Invalid pair");
require(address(hook) != address(0), "Invalid hook");
traderAddress = traderAddr;
depositorAddress = depositorAddr;
sellingTokenAddress = address(sellingToken);
buyingTokenAddress = address(buyingToken);
hookAddress = address(hook);
_initializationCompleted();
}
function switchTrader (address traderAddr) external onlyOwner ifInitialized {
require(traderAddr != address(0), "Invalid trader");
require(traderAddr != traderAddress, "Trader already set");
require(!_orderAlive, "Current order still alive");
traderAddress = traderAddr;
emit OnTraderChanged(traderAddr);
}
function switchDepositor (address depositorAddr) external onlyOwner ifInitialized {
require(depositorAddr != address(0), "Invalid depositor");
require(depositorAddr != depositorAddress, "Depositor already set");
require(!_orderAlive, "Current order still alive");
depositorAddress = depositorAddr;
emit OnDepositorChanged(depositorAddr);
}
function openOrder (uint256 newDeadline, uint256 targetQty, uint256 maxPriceLimit) external onlyDepositor ifInitialized {
require(newDeadline > block.timestamp, "Invalid deadline"); // solhint-disable-line not-rely-on-time
require(targetQty > 0, "Invalid trade size");
require(maxPriceLimit > 0, "Invalid price limit");
require(!_orderAlive, "Current order still alive");
_startedOn = block.timestamp; // solhint-disable-line not-rely-on-time
_deadline = newDeadline;
_tradeSize = targetQty;
_priceLimit = maxPriceLimit;
_filled = 0;
_spent = 0;
_orderAlive = true;
_currentState = STATE_ACTIVE;
ITwapHook(hookAddress).newOrderCreated(sellingTokenAddress, buyingTokenAddress, newDeadline, targetQty);
_approveProxy();
emit OnOpen();
}
function deposit (uint256 depositAmount) external onlyDepositor ifInitialized {
require(IERC20Strict(sellingTokenAddress).transferFrom(msg.sender, address(this), depositAmount), "Deposit failed");
}
function swap (uint256 sellQty, uint256 buyQty, bytes memory payload) external nonReentrant onlyTrader ifInitialized {
require(_currentState == STATE_ACTIVE, "Invalid state");
require(_deadline > block.timestamp, "Deadline expired"); // solhint-disable-line not-rely-on-time
require(sellQty <= _priceLimit, "Price limit reached");
IERC20Strict sellingToken = IERC20Strict(sellingTokenAddress);
uint256 sellingTokenBefore = sellingToken.balanceOf(address(this));
require(sellingTokenBefore > 0, "Insufficient balance");
IERC20Strict buyingToken = IERC20Strict(buyingTokenAddress);
uint256 buyingTokenBefore = buyingToken.balanceOf(address(this));
// Swap
(bool success,) = AUGUSTUS_SWAPPER_ADDR.call(payload); // solhint-disable-line avoid-low-level-calls
require(success, "Swap failed");
uint256 sellingTokenAfter = sellingToken.balanceOf(address(this));
uint256 buyingTokenAfter = buyingToken.balanceOf(address(this));
require(buyingTokenAfter > buyingTokenBefore, "Invalid swap: Buy");
require(sellingTokenBefore > sellingTokenAfter, "Invalid swap: Sell");
// The number of tokens received after running the swap
uint256 tokensReceived = buyingTokenAfter - buyingTokenBefore;
require(tokensReceived >= buyQty, "Invalid amount received");
_filled += tokensReceived;
// The number of tokens sold during this swap
uint256 tokensSold = sellingTokenBefore - sellingTokenAfter;
require(tokensSold <= sellQty, "Invalid amount spent");
_spent += tokensSold;
emit OnSwap(sellingTokenAddress, tokensSold, buyingTokenAddress, tokensReceived);
if (buyingTokenAfter >= _tradeSize) {
_currentState = STATE_FINISHED;
emit OnCompletion();
}
}
function cancelOrder () external nonReentrant onlyDepositor ifInitialized {
require(_currentState == STATE_ACTIVE, "Invalid state");
_currentState = STATE_CANCELLED;
emit OnCancel();
_closeOrder();
}
function closeOrder () external nonReentrant onlyDepositor ifInitialized {
_closeOrder();
}
function _closeOrder () private ifCanCloseOrder {
_orderAlive = false;
IERC20Strict sellingToken = IERC20Strict(sellingTokenAddress);
IERC20Strict buyingToken = IERC20Strict(buyingTokenAddress);
uint256 sellingTokenBalance = sellingToken.balanceOf(address(this));
uint256 buyingTokenBalance = buyingToken.balanceOf(address(this));
if (sellingTokenBalance > 0) require(sellingToken.transfer(depositorAddress, sellingTokenBalance), "Transfer failed: sell");
if (buyingTokenBalance > 0) require(buyingToken.transfer(depositorAddress, buyingTokenBalance), "Transfer failed: buy");
_revokeProxy();
emit OnClose();
}
function _approveProxy () private {
IERC20Strict token = IERC20Strict(sellingTokenAddress);
uint256 currentBalance = token.balanceOf(address(this));
address proxyAddr = IParaSwapAugustus(AUGUSTUS_SWAPPER_ADDR).getTokenTransferProxy();
if (token.allowance(address(this), proxyAddr) < currentBalance) {
require(token.approve(proxyAddr, currentBalance), "Token approval failed");
}
}
function _revokeProxy () private {
IERC20Strict token = IERC20Strict(sellingTokenAddress);
address proxyAddr = IParaSwapAugustus(AUGUSTUS_SWAPPER_ADDR).getTokenTransferProxy();
if (token.allowance(address(this), proxyAddr) > 0) {
require(token.approve(proxyAddr, 0), "Token approval failed");
}
}
function getOrderMetrics () external view override returns (uint256 pStartedOn, uint256 pDeadline, uint256 pSpent, uint256 pFilled, uint256 pTradeSize, address srcToken, address dstToken, uint8 pState, bool pAlive) {
pDeadline = _deadline;
pSpent = _spent;
pFilled = _filled;
pStartedOn = _startedOn;
pTradeSize = _tradeSize;
srcToken = sellingTokenAddress;
dstToken = buyingTokenAddress;
pState = _currentState;
pAlive = _orderAlive;
}
}
interface ITwapDeployer {
function deployTwap (IERC20Strict sellingToken, IERC20Strict buyingToken, address twapOwnerAddr, address traderAddr, address depositorAddr) external;
}
contract TwapDeployer is ITwapDeployer, CustomOwnable, CustomInitializable {
address public authorizedDeployer;
address public hookAddress;
constructor () {
_owner = msg.sender;
}
modifier onlyAuthorizedDeployer() {
require(authorizedDeployer == msg.sender, "Deployer Unauthorized");
_;
}
function initialize (ITwapHook hook, address authorizedDeployerAddr) external onlyOwner ifNotInitialized {
require(address(hook) != address(0), "Invalid hook");
require(authorizedDeployerAddr != address(0), "Invalid deployer");
hookAddress = address(hook);
authorizedDeployer = authorizedDeployerAddr;
_initializationCompleted();
}
function deployTwap (IERC20Strict sellingToken, IERC20Strict buyingToken, address twapOwnerAddr, address traderAddr, address depositorAddr) external override ifInitialized onlyAuthorizedDeployer {
TwapOrder instance = new TwapOrder();
instance.initialize(traderAddr, depositorAddr, sellingToken, buyingToken, ITwapHook(hookAddress));
instance.transferOwnership(twapOwnerAddr);
ITwapHook(hookAddress).newSyntheticPairDeployed(address(sellingToken), address(buyingToken), address(instance));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"OnCancel","type":"event"},{"anonymous":false,"inputs":[],"name":"OnClose","type":"event"},{"anonymous":false,"inputs":[],"name":"OnCompletion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddr","type":"address"}],"name":"OnDepositorChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"OnOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OnOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fromToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"toToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"toAmount","type":"uint256"}],"name":"OnSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddr","type":"address"}],"name":"OnTraderChanged","type":"event"},{"inputs":[],"name":"buyingTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositAmount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOrderMetrics","outputs":[{"internalType":"uint256","name":"pStartedOn","type":"uint256"},{"internalType":"uint256","name":"pDeadline","type":"uint256"},{"internalType":"uint256","name":"pSpent","type":"uint256"},{"internalType":"uint256","name":"pFilled","type":"uint256"},{"internalType":"uint256","name":"pTradeSize","type":"uint256"},{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"uint8","name":"pState","type":"uint8"},{"internalType":"bool","name":"pAlive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hookAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"traderAddr","type":"address"},{"internalType":"address","name":"depositorAddr","type":"address"},{"internalType":"contract IERC20Strict","name":"sellingToken","type":"address"},{"internalType":"contract IERC20Strict","name":"buyingToken","type":"address"},{"internalType":"contract ITwapHook","name":"hook","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDeadline","type":"uint256"},{"internalType":"uint256","name":"targetQty","type":"uint256"},{"internalType":"uint256","name":"maxPriceLimit","type":"uint256"}],"name":"openOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellQty","type":"uint256"},{"internalType":"uint256","name":"buyQty","type":"uint256"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"depositorAddr","type":"address"}],"name":"switchDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"traderAddr","type":"address"}],"name":"switchTrader","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"traderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5060018055600080546001600160a01b03191633179055611f6e806100366000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063d7c6fe4511610066578063d7c6fe45146101f0578063e9bd42ac14610203578063ec06e80d14610216578063f2fde38b1461029457600080fd5b80638da5cb5b146101a6578063af83425a146101b7578063b6b55f25146101ca578063cad2cba1146101dd57600080fd5b806332a3cf96116100d357806332a3cf96146101655780633fab693f146101785780636a8165481461018b578063892e83041461019357600080fd5b80631459457a14610105578063254114731461011a5780632d8dcef11461014a57806331905d2814610152575b600080fd5b610118610113366004611bfe565b6102a7565b005b600a5461012d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610118610425565b60085461012d906001600160a01b031681565b600c5461012d906001600160a01b031681565b600b5461012d906001600160a01b031681565b6101186104ae565b6101186101a1366004611cbe565b6105b9565b6000546001600160a01b031661012d565b6101186101c5366004611bbf565b610c36565b6101186101d8366004611c8e565b610da8565b60095461012d906001600160a01b031681565b6101186101fe366004611d7d565b610ec5565b610118610211366004611bbf565b6110f2565b600354600454600554600254600654600854600954600c5460408051958652602086019890985296840195909552606083019390935260808201526001600160a01b0391821660a0820152911660c082015260ff600160a01b8304811660e0830152600160a81b909204909116151561010082015261012001610141565b6101186102a2366004611bbf565b611257565b6000546001600160a01b031633146102da5760405162461bcd60e51b81526004016102d190611de1565b60405180910390fd5b600054600160a01b900460ff161561032a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016102d1565b816001600160a01b0316836001600160a01b0316141561037b5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103830b4b960a11b60448201526064016102d1565b6001600160a01b0381166103c05760405162461bcd60e51b815260206004820152600c60248201526b496e76616c696420686f6f6b60a01b60448201526064016102d1565b600a80546001600160a01b03199081166001600160a01b0388811691909117909255600b80548216878416179055600880548216868416179055600980548216858416179055600c805490911691831691909117905561041e611340565b5050505050565b600260015414156104485760405162461bcd60e51b81526004016102d190611e2d565b6002600155600b546001600160a01b031633146104775760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff166104a05760405162461bcd60e51b81526004016102d190611e64565b6104a86113a5565b60018055565b600260015414156104d15760405162461bcd60e51b81526004016102d190611e2d565b6002600155600b546001600160a01b031633146105005760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff166105295760405162461bcd60e51b81526004016102d190611e64565b600c54600160a01b900460ff166001146105755760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420737461746560981b60448201526064016102d1565b600c805460ff60a01b1916600360a01b1790556040517fe3b6cd2f9892ca2f546d2377283b0e5d6597f14b3f463814faafba0f9a2f8efd90600090a16104a86113a5565b600260015414156105dc5760405162461bcd60e51b81526004016102d190611e2d565b6002600155600a546001600160a01b031633146106295760405162461bcd60e51b815260206004820152600b60248201526a27b7363c903a3930b232b960a91b60448201526064016102d1565b600054600160a01b900460ff166106525760405162461bcd60e51b81526004016102d190611e64565b600c54600160a01b900460ff1660011461069e5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420737461746560981b60448201526064016102d1565b42600354116106e25760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b9948195e1c1a5c995960821b60448201526064016102d1565b60075483111561072a5760405162461bcd60e51b8152602060048201526013602482015272141c9a58d9481b1a5b5a5d081c995858da1959606a1b60448201526064016102d1565b6008546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561077257600080fd5b505afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190611ca6565b9050600081116107f35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016102d1565b6009546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561083b57600080fd5b505afa15801561084f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108739190611ca6565b9050600073def171fe48cf0115b1d80b88dc8eab59176fee576001600160a01b0316866040516108a39190611da8565b6000604051808303816000865af19150503d80600081146108e0576040519150601f19603f3d011682016040523d82523d6000602084013e6108e5565b606091505b50509050806109245760405162461bcd60e51b815260206004820152600b60248201526a14ddd85c0819985a5b195960aa1b60448201526064016102d1565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a082319060240160206040518083038186803b15801561096657600080fd5b505afa15801561097a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099e9190611ca6565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038616906370a082319060240160206040518083038186803b1580156109e357600080fd5b505afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611ca6565b9050838111610a605760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420737761703a2042757960781b60448201526064016102d1565b818611610aa45760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081cddd85c0e8814d95b1b60721b60448201526064016102d1565b6000610ab08583611ee0565b905089811015610b025760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420616d6f756e7420726563656976656400000000000000000060448201526064016102d1565b8060056000828254610b149190611ec8565b9091555060009050610b268489611ee0565b90508b811115610b6f5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a5908185b5bdd5b9d081cdc195b9d60621b60448201526064016102d1565b8060046000828254610b819190611ec8565b9091555050600854600954604080516001600160a01b03938416815260208101859052929091168282015260608201849052517f7b233ad45c8a937cf938d2bf9cff79a91863df216e21cf05ef00b0d3ef775e8b9181900360800190a16006548310610c2457600c805460ff60a01b1916600160a11b1790556040517fc6bd8a54a47719851e2d0c7af0275847e55002e9aa4011e0f200eb516147bcc290600090a15b50506001805550505050505050505050565b6000546001600160a01b03163314610c605760405162461bcd60e51b81526004016102d190611de1565b600054600160a01b900460ff16610c895760405162461bcd60e51b81526004016102d190611e64565b6001600160a01b038116610cd35760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103232b837b9b4ba37b960791b60448201526064016102d1565b600b546001600160a01b0382811691161415610d295760405162461bcd60e51b815260206004820152601560248201527411195c1bdcda5d1bdc88185b1c9958591e481cd95d605a1b60448201526064016102d1565b600c54600160a81b900460ff1615610d535760405162461bcd60e51b81526004016102d190611e91565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527ff4a8d3a7ff68c7e146b21723ad2c83c9a0e56fb23f9b724b40b246a85dcc432f906020015b60405180910390a150565b600b546001600160a01b03163314610dd25760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff16610dfb5760405162461bcd60e51b81526004016102d190611e64565b6008546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e859190611c6e565b610ec25760405162461bcd60e51b815260206004820152600e60248201526d11195c1bdcda5d0819985a5b195960921b60448201526064016102d1565b50565b600b546001600160a01b03163314610eef5760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff16610f185760405162461bcd60e51b81526004016102d190611e64565b428311610f5a5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420646561646c696e6560801b60448201526064016102d1565b60008211610f9f5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642074726164652073697a6560701b60448201526064016102d1565b60008111610fe55760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c1c9a58d9481b1a5b5a5d606a1b60448201526064016102d1565b600c54600160a81b900460ff161561100f5760405162461bcd60e51b81526004016102d190611e91565b42600255600383905560068290556007819055600060058190556004908155600c805461ffff60a01b19811661010160a01b179091556008546009546040516302abe24760e31b81526001600160a01b0392831694810194909452811660248401526044830186905260648301859052169063155f123890608401600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b505050506110c4611776565b6040517fee22791e4e292d1e09f9ab3d67dd775115e4cdddb044599e9b73c7b85235ac9190600090a1505050565b6000546001600160a01b0316331461111c5760405162461bcd60e51b81526004016102d190611de1565b600054600160a01b900460ff166111455760405162461bcd60e51b81526004016102d190611e64565b6001600160a01b03811661118c5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103a3930b232b960911b60448201526064016102d1565b600a546001600160a01b03828116911614156111df5760405162461bcd60e51b8152602060048201526012602482015271151c9859195c88185b1c9958591e481cd95d60721b60448201526064016102d1565b600c54600160a81b900460ff16156112095760405162461bcd60e51b81526004016102d190611e91565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd5871f49beddf166c4195606394350e87d297c580591f3a12be15b037d65173c90602001610d9d565b6000546001600160a01b031633146112815760405162461bcd60e51b81526004016102d190611de1565b6001600160a01b0381166112d75760405162461bcd60e51b815260206004820152601960248201527f6e6f6e2d7a65726f20616464726573732072657175697265640000000000000060448201526064016102d1565b600054604080516001600160a01b03928316815291831660208301527ff77c6eb92f5003da08a86ab833733c2f7f05480f4cc11bf57bf9fecb10873ad7910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff16156113905760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016102d1565b6000805460ff60a01b1916600160a01b179055565b600c54600160a81b900460ff166113fe5760405162461bcd60e51b815260206004820152601960248201527f43757272656e74206f72646572206973206e6f74206c6976650000000000000060448201526064016102d1565b600c54600160a01b900460ff16600214806114255750600c54600160a01b900460ff166003145b806114485750600c54600160a01b900460ff166001148015611448575060035442115b61148d5760405162461bcd60e51b815260206004820152601660248201527510d85b9b9bdd0818db1bdcd9481bdc99195c881e595d60521b60448201526064016102d1565b600c805460ff60a81b191690556008546009546040516370a0823160e01b81523060048201526001600160a01b03928316929091169060009083906370a082319060240160206040518083038186803b1580156114e957600080fd5b505afa1580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115219190611ca6565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561156657600080fd5b505afa15801561157a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159e9190611ca6565b9050811561167057600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529085169063a9059cbb90604401602060405180830381600087803b1580156115f457600080fd5b505af1158015611608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162c9190611c6e565b6116705760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd9995c8819985a5b19590e881cd95b1b605a1b60448201526064016102d1565b801561173f57600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529084169063a9059cbb90604401602060405180830381600087803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190611c6e565b61173f5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572206661696c65643a2062757960601b60448201526064016102d1565b6117476119d4565b6040517f3e76d02bc1cb8240113b770474afecf42a936e6a79b908d1dde8c053375599f890600090a150505050565b6008546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b1580156117be57600080fd5b505afa1580156117d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f69190611ca6565b9050600073def171fe48cf0115b1d80b88dc8eab59176fee576001600160a01b031663d2c4b5986040518163ffffffff1660e01b815260040160206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f9190611be2565b604051636eb1769f60e11b81523060048201526001600160a01b038083166024830152919250839185169063dd62ed3e9060440160206040518083038186803b1580156118cb57600080fd5b505afa1580156118df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119039190611ca6565b10156119cf5760405163095ea7b360e01b81526001600160a01b0382811660048301526024820184905284169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190611c6e565b6119cf5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b88185c1c1c9bdd985b0819985a5b1959605a1b60448201526064016102d1565b505050565b60085460408051631a5896b360e31b815290516001600160a01b039092169160009173def171fe48cf0115b1d80b88dc8eab59176fee579163d2c4b59891600480820192602092909190829003018186803b158015611a3257600080fd5b505afa158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190611be2565b604051636eb1769f60e11b81523060048201526001600160a01b03808316602483015291925060009184169063dd62ed3e9060440160206040518083038186803b158015611ab757600080fd5b505afa158015611acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aef9190611ca6565b1115611bbb5760405163095ea7b360e01b81526001600160a01b0382811660048301526000602483015283169063095ea7b390604401602060405180830381600087803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b779190611c6e565b611bbb5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b88185c1c1c9bdd985b0819985a5b1959605a1b60448201526064016102d1565b5050565b600060208284031215611bd0578081fd5b8135611bdb81611f23565b9392505050565b600060208284031215611bf3578081fd5b8151611bdb81611f23565b600080600080600060a08688031215611c15578081fd5b8535611c2081611f23565b94506020860135611c3081611f23565b93506040860135611c4081611f23565b92506060860135611c5081611f23565b91506080860135611c6081611f23565b809150509295509295909350565b600060208284031215611c7f578081fd5b81518015158114611bdb578182fd5b600060208284031215611c9f578081fd5b5035919050565b600060208284031215611cb7578081fd5b5051919050565b600080600060608486031215611cd2578283fd5b8335925060208401359150604084013567ffffffffffffffff80821115611cf7578283fd5b818601915086601f830112611d0a578283fd5b813581811115611d1c57611d1c611f0d565b604051601f8201601f19908116603f01168101908382118183101715611d4457611d44611f0d565b81604052828152896020848701011115611d5c578586fd5b82602086016020830137856020848301015280955050505050509250925092565b600080600060608486031215611d91578283fd5b505081359360208301359350604090920135919050565b60008251815b81811015611dc85760208186018101518583015201611dae565b81811115611dd65782828501525b509190910192915050565b6020808252600a908201526927b7363c9037bbb732b960b11b604082015260600190565b6020808252600e908201526d27b7363c903232b837b9b4ba37b960911b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260139082015272139bdd081a5b9a5d1a585b1a5e9959081e595d606a1b604082015260600190565b60208082526019908201527f43757272656e74206f72646572207374696c6c20616c69766500000000000000604082015260600190565b60008219821115611edb57611edb611ef7565b500190565b600082821015611ef257611ef2611ef7565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ec257600080fdfea264697066735822122098bc791eb59803e9233140cd83ccee9429aeb1d38a4a8256d1e7ebef299d7ec564736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063d7c6fe4511610066578063d7c6fe45146101f0578063e9bd42ac14610203578063ec06e80d14610216578063f2fde38b1461029457600080fd5b80638da5cb5b146101a6578063af83425a146101b7578063b6b55f25146101ca578063cad2cba1146101dd57600080fd5b806332a3cf96116100d357806332a3cf96146101655780633fab693f146101785780636a8165481461018b578063892e83041461019357600080fd5b80631459457a14610105578063254114731461011a5780632d8dcef11461014a57806331905d2814610152575b600080fd5b610118610113366004611bfe565b6102a7565b005b600a5461012d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610118610425565b60085461012d906001600160a01b031681565b600c5461012d906001600160a01b031681565b600b5461012d906001600160a01b031681565b6101186104ae565b6101186101a1366004611cbe565b6105b9565b6000546001600160a01b031661012d565b6101186101c5366004611bbf565b610c36565b6101186101d8366004611c8e565b610da8565b60095461012d906001600160a01b031681565b6101186101fe366004611d7d565b610ec5565b610118610211366004611bbf565b6110f2565b600354600454600554600254600654600854600954600c5460408051958652602086019890985296840195909552606083019390935260808201526001600160a01b0391821660a0820152911660c082015260ff600160a01b8304811660e0830152600160a81b909204909116151561010082015261012001610141565b6101186102a2366004611bbf565b611257565b6000546001600160a01b031633146102da5760405162461bcd60e51b81526004016102d190611de1565b60405180910390fd5b600054600160a01b900460ff161561032a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016102d1565b816001600160a01b0316836001600160a01b0316141561037b5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103830b4b960a11b60448201526064016102d1565b6001600160a01b0381166103c05760405162461bcd60e51b815260206004820152600c60248201526b496e76616c696420686f6f6b60a01b60448201526064016102d1565b600a80546001600160a01b03199081166001600160a01b0388811691909117909255600b80548216878416179055600880548216868416179055600980548216858416179055600c805490911691831691909117905561041e611340565b5050505050565b600260015414156104485760405162461bcd60e51b81526004016102d190611e2d565b6002600155600b546001600160a01b031633146104775760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff166104a05760405162461bcd60e51b81526004016102d190611e64565b6104a86113a5565b60018055565b600260015414156104d15760405162461bcd60e51b81526004016102d190611e2d565b6002600155600b546001600160a01b031633146105005760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff166105295760405162461bcd60e51b81526004016102d190611e64565b600c54600160a01b900460ff166001146105755760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420737461746560981b60448201526064016102d1565b600c805460ff60a01b1916600360a01b1790556040517fe3b6cd2f9892ca2f546d2377283b0e5d6597f14b3f463814faafba0f9a2f8efd90600090a16104a86113a5565b600260015414156105dc5760405162461bcd60e51b81526004016102d190611e2d565b6002600155600a546001600160a01b031633146106295760405162461bcd60e51b815260206004820152600b60248201526a27b7363c903a3930b232b960a91b60448201526064016102d1565b600054600160a01b900460ff166106525760405162461bcd60e51b81526004016102d190611e64565b600c54600160a01b900460ff1660011461069e5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420737461746560981b60448201526064016102d1565b42600354116106e25760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b9948195e1c1a5c995960821b60448201526064016102d1565b60075483111561072a5760405162461bcd60e51b8152602060048201526013602482015272141c9a58d9481b1a5b5a5d081c995858da1959606a1b60448201526064016102d1565b6008546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561077257600080fd5b505afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190611ca6565b9050600081116107f35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016102d1565b6009546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561083b57600080fd5b505afa15801561084f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108739190611ca6565b9050600073def171fe48cf0115b1d80b88dc8eab59176fee576001600160a01b0316866040516108a39190611da8565b6000604051808303816000865af19150503d80600081146108e0576040519150601f19603f3d011682016040523d82523d6000602084013e6108e5565b606091505b50509050806109245760405162461bcd60e51b815260206004820152600b60248201526a14ddd85c0819985a5b195960aa1b60448201526064016102d1565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a082319060240160206040518083038186803b15801561096657600080fd5b505afa15801561097a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099e9190611ca6565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038616906370a082319060240160206040518083038186803b1580156109e357600080fd5b505afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611ca6565b9050838111610a605760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420737761703a2042757960781b60448201526064016102d1565b818611610aa45760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081cddd85c0e8814d95b1b60721b60448201526064016102d1565b6000610ab08583611ee0565b905089811015610b025760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420616d6f756e7420726563656976656400000000000000000060448201526064016102d1565b8060056000828254610b149190611ec8565b9091555060009050610b268489611ee0565b90508b811115610b6f5760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a5908185b5bdd5b9d081cdc195b9d60621b60448201526064016102d1565b8060046000828254610b819190611ec8565b9091555050600854600954604080516001600160a01b03938416815260208101859052929091168282015260608201849052517f7b233ad45c8a937cf938d2bf9cff79a91863df216e21cf05ef00b0d3ef775e8b9181900360800190a16006548310610c2457600c805460ff60a01b1916600160a11b1790556040517fc6bd8a54a47719851e2d0c7af0275847e55002e9aa4011e0f200eb516147bcc290600090a15b50506001805550505050505050505050565b6000546001600160a01b03163314610c605760405162461bcd60e51b81526004016102d190611de1565b600054600160a01b900460ff16610c895760405162461bcd60e51b81526004016102d190611e64565b6001600160a01b038116610cd35760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103232b837b9b4ba37b960791b60448201526064016102d1565b600b546001600160a01b0382811691161415610d295760405162461bcd60e51b815260206004820152601560248201527411195c1bdcda5d1bdc88185b1c9958591e481cd95d605a1b60448201526064016102d1565b600c54600160a81b900460ff1615610d535760405162461bcd60e51b81526004016102d190611e91565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527ff4a8d3a7ff68c7e146b21723ad2c83c9a0e56fb23f9b724b40b246a85dcc432f906020015b60405180910390a150565b600b546001600160a01b03163314610dd25760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff16610dfb5760405162461bcd60e51b81526004016102d190611e64565b6008546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e859190611c6e565b610ec25760405162461bcd60e51b815260206004820152600e60248201526d11195c1bdcda5d0819985a5b195960921b60448201526064016102d1565b50565b600b546001600160a01b03163314610eef5760405162461bcd60e51b81526004016102d190611e05565b600054600160a01b900460ff16610f185760405162461bcd60e51b81526004016102d190611e64565b428311610f5a5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420646561646c696e6560801b60448201526064016102d1565b60008211610f9f5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642074726164652073697a6560701b60448201526064016102d1565b60008111610fe55760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c1c9a58d9481b1a5b5a5d606a1b60448201526064016102d1565b600c54600160a81b900460ff161561100f5760405162461bcd60e51b81526004016102d190611e91565b42600255600383905560068290556007819055600060058190556004908155600c805461ffff60a01b19811661010160a01b179091556008546009546040516302abe24760e31b81526001600160a01b0392831694810194909452811660248401526044830186905260648301859052169063155f123890608401600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b505050506110c4611776565b6040517fee22791e4e292d1e09f9ab3d67dd775115e4cdddb044599e9b73c7b85235ac9190600090a1505050565b6000546001600160a01b0316331461111c5760405162461bcd60e51b81526004016102d190611de1565b600054600160a01b900460ff166111455760405162461bcd60e51b81526004016102d190611e64565b6001600160a01b03811661118c5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103a3930b232b960911b60448201526064016102d1565b600a546001600160a01b03828116911614156111df5760405162461bcd60e51b8152602060048201526012602482015271151c9859195c88185b1c9958591e481cd95d60721b60448201526064016102d1565b600c54600160a81b900460ff16156112095760405162461bcd60e51b81526004016102d190611e91565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd5871f49beddf166c4195606394350e87d297c580591f3a12be15b037d65173c90602001610d9d565b6000546001600160a01b031633146112815760405162461bcd60e51b81526004016102d190611de1565b6001600160a01b0381166112d75760405162461bcd60e51b815260206004820152601960248201527f6e6f6e2d7a65726f20616464726573732072657175697265640000000000000060448201526064016102d1565b600054604080516001600160a01b03928316815291831660208301527ff77c6eb92f5003da08a86ab833733c2f7f05480f4cc11bf57bf9fecb10873ad7910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff16156113905760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016102d1565b6000805460ff60a01b1916600160a01b179055565b600c54600160a81b900460ff166113fe5760405162461bcd60e51b815260206004820152601960248201527f43757272656e74206f72646572206973206e6f74206c6976650000000000000060448201526064016102d1565b600c54600160a01b900460ff16600214806114255750600c54600160a01b900460ff166003145b806114485750600c54600160a01b900460ff166001148015611448575060035442115b61148d5760405162461bcd60e51b815260206004820152601660248201527510d85b9b9bdd0818db1bdcd9481bdc99195c881e595d60521b60448201526064016102d1565b600c805460ff60a81b191690556008546009546040516370a0823160e01b81523060048201526001600160a01b03928316929091169060009083906370a082319060240160206040518083038186803b1580156114e957600080fd5b505afa1580156114fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115219190611ca6565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561156657600080fd5b505afa15801561157a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159e9190611ca6565b9050811561167057600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529085169063a9059cbb90604401602060405180830381600087803b1580156115f457600080fd5b505af1158015611608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162c9190611c6e565b6116705760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd9995c8819985a5b19590e881cd95b1b605a1b60448201526064016102d1565b801561173f57600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529084169063a9059cbb90604401602060405180830381600087803b1580156116c457600080fd5b505af11580156116d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fc9190611c6e565b61173f5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572206661696c65643a2062757960601b60448201526064016102d1565b6117476119d4565b6040517f3e76d02bc1cb8240113b770474afecf42a936e6a79b908d1dde8c053375599f890600090a150505050565b6008546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b1580156117be57600080fd5b505afa1580156117d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f69190611ca6565b9050600073def171fe48cf0115b1d80b88dc8eab59176fee576001600160a01b031663d2c4b5986040518163ffffffff1660e01b815260040160206040518083038186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f9190611be2565b604051636eb1769f60e11b81523060048201526001600160a01b038083166024830152919250839185169063dd62ed3e9060440160206040518083038186803b1580156118cb57600080fd5b505afa1580156118df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119039190611ca6565b10156119cf5760405163095ea7b360e01b81526001600160a01b0382811660048301526024820184905284169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190611c6e565b6119cf5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b88185c1c1c9bdd985b0819985a5b1959605a1b60448201526064016102d1565b505050565b60085460408051631a5896b360e31b815290516001600160a01b039092169160009173def171fe48cf0115b1d80b88dc8eab59176fee579163d2c4b59891600480820192602092909190829003018186803b158015611a3257600080fd5b505afa158015611a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6a9190611be2565b604051636eb1769f60e11b81523060048201526001600160a01b03808316602483015291925060009184169063dd62ed3e9060440160206040518083038186803b158015611ab757600080fd5b505afa158015611acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aef9190611ca6565b1115611bbb5760405163095ea7b360e01b81526001600160a01b0382811660048301526000602483015283169063095ea7b390604401602060405180830381600087803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b779190611c6e565b611bbb5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b88185c1c1c9bdd985b0819985a5b1959605a1b60448201526064016102d1565b5050565b600060208284031215611bd0578081fd5b8135611bdb81611f23565b9392505050565b600060208284031215611bf3578081fd5b8151611bdb81611f23565b600080600080600060a08688031215611c15578081fd5b8535611c2081611f23565b94506020860135611c3081611f23565b93506040860135611c4081611f23565b92506060860135611c5081611f23565b91506080860135611c6081611f23565b809150509295509295909350565b600060208284031215611c7f578081fd5b81518015158114611bdb578182fd5b600060208284031215611c9f578081fd5b5035919050565b600060208284031215611cb7578081fd5b5051919050565b600080600060608486031215611cd2578283fd5b8335925060208401359150604084013567ffffffffffffffff80821115611cf7578283fd5b818601915086601f830112611d0a578283fd5b813581811115611d1c57611d1c611f0d565b604051601f8201601f19908116603f01168101908382118183101715611d4457611d44611f0d565b81604052828152896020848701011115611d5c578586fd5b82602086016020830137856020848301015280955050505050509250925092565b600080600060608486031215611d91578283fd5b505081359360208301359350604090920135919050565b60008251815b81811015611dc85760208186018101518583015201611dae565b81811115611dd65782828501525b509190910192915050565b6020808252600a908201526927b7363c9037bbb732b960b11b604082015260600190565b6020808252600e908201526d27b7363c903232b837b9b4ba37b960911b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260139082015272139bdd081a5b9a5d1a585b1a5e9959081e595d606a1b604082015260600190565b60208082526019908201527f43757272656e74206f72646572207374696c6c20616c69766500000000000000604082015260600190565b60008219821115611edb57611edb611ef7565b500190565b600082821015611ef257611ef2611ef7565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ec257600080fdfea264697066735822122098bc791eb59803e9233140cd83ccee9429aeb1d38a4a8256d1e7ebef299d7ec564736f6c63430008040033
Deployed Bytecode Sourcemap
6321:8551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8078:586;;;;;;:::i;:::-;;:::i;:::-;;6941:28;;;;;-1:-1:-1;;;;;6941:28:0;;;;;;-1:-1:-1;;;;;4160:32:1;;;;4142:51;;4130:2;4115:18;6941:28:0;;;;;;;;12715:105;;;:::i;6860:34::-;;;;;-1:-1:-1;;;;;6860:34:0;;;7014:26;;;;;-1:-1:-1;;;;;7014:26:0;;;6976:31;;;;;-1:-1:-1;;;;;6976:31:0;;;12463:244;;;:::i;10545:1910::-;;;;;;:::i;:::-;;:::i;5123:90::-;5172:7;5199:6;-1:-1:-1;;;;;5199:6:0;5123:90;;9038:391;;;;;;:::i;:::-;;:::i;10325:212::-;;;;;;:::i;:::-;;:::i;6901:33::-;;;;;-1:-1:-1;;;;;6901:33:0;;;9437:880;;;;;;:::i;:::-;;:::i;8672:358::-;;;;;;:::i;:::-;;:::i;14347:522::-;14585:9;;14614:6;;14641:7;;14672:10;;14706;;14738:19;;14779:18;;14817:13;;14347:522;;;17833:25:1;;;17889:2;17874:18;;17867:34;;;;17917:18;;;17910:34;;;;17975:2;17960:18;;17953:34;;;;18018:3;18003:19;;17996:35;-1:-1:-1;;;;;14738:19:0;;;-1:-1:-1;18085:19:1;;18078:44;14779:18:0;;18153:3:1;18138:19;;18131:44;14817:13:0;-1:-1:-1;;;14817:13:0;;;;18206:3:1;18191:19;;18184:46;-1:-1:-1;;;14850:11:0;;;;;;18274:14:1;18267:22;18261:3;18246:19;;18239:51;17820:3;17805:19;14347:522:0;17787:509:1;4778:220:0;;;;;;:::i;:::-;;:::i;8078:586::-;4508:6;;-1:-1:-1;;;;;4508:6:0;4518:10;4508:20;4500:43;;;;-1:-1:-1;;;4500:43:0;;7597:2:1;4500:43:0;;;7579:21:1;7636:2;7616:18;;;7609:30;-1:-1:-1;;;7655:18:1;;;7648:40;7705:18;;4500:43:0;;;;;;;;;3601:15:::1;::::0;-1:-1:-1;;;3601:15:0;::::1;;;3600:16;3592:48;;;::::0;-1:-1:-1;;;3592:48:0;;14522:2:1;3592:48:0::1;::::0;::::1;14504:21:1::0;14561:2;14541:18;;;14534:30;-1:-1:-1;;;14580:18:1;;;14573:49;14639:18;;3592:48:0::1;14494:169:1::0;3592:48:0::1;-1:-1:-1::0;;;;;8266:45:0;;::::2;::::0;;::::2;;;8258:70;;;::::0;-1:-1:-1;;;8258:70:0;;8627:2:1;8258:70:0::2;::::0;::::2;8609:21:1::0;8666:2;8646:18;;;8639:30;-1:-1:-1;;;8685:18:1;;;8678:42;8737:18;;8258:70:0::2;8599:162:1::0;8258:70:0::2;-1:-1:-1::0;;;;;8347:27:0;::::2;8339:52;;;::::0;-1:-1:-1;;;8339:52:0;;10357:2:1;8339:52:0::2;::::0;::::2;10339:21:1::0;10396:2;10376:18;;;10369:30;-1:-1:-1;;;10415:18:1;;;10408:42;10467:18;;8339:52:0::2;10329:162:1::0;8339:52:0::2;8404:13;:26:::0;;-1:-1:-1;;;;;;8404:26:0;;::::2;-1:-1:-1::0;;;;;8404:26:0;;::::2;::::0;;;::::2;::::0;;;8441:16:::2;:32:::0;;;::::2;::::0;;::::2;;::::0;;8484:19:::2;:43:::0;;;::::2;::::0;;::::2;;::::0;;8538:18:::2;:41:::0;;;::::2;::::0;;::::2;;::::0;;8590:11:::2;:27:::0;;;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;8630:26:::2;:24;:26::i;:::-;8078:586:::0;;;;;:::o;12715:105::-;2185:1;2781:7;;:19;;2773:63;;;;-1:-1:-1;;;2773:63:0;;;;;;;:::i;:::-;2185:1;2914:7;:18;7625:16:::1;::::0;-1:-1:-1;;;;;7625:16:0::1;7645:10;7625:30;7617:57;;;::::0;-1:-1:-1;;;7617:57:0;;15574:2:1;7617:57:0::1;::::0;::::1;15556:21:1::0;15613:2;15593:18;;;15586:30;-1:-1:-1;;;15632:18:1;;;15625:44;15686:18;;7617:57:0::1;15546:164:1::0;7617:57:0::1;3403:15:::2;::::0;-1:-1:-1;;;3403:15:0;::::2;;;3395:47;;;::::0;-1:-1:-1;;;3395:47:0;;::::2;::::0;::::2;;;:::i;:::-;12799:13:::3;:11;:13::i;:::-;2141:1:::0;3093:22;;12715:105::o;12463:244::-;2185:1;2781:7;;:19;;2773:63;;;;-1:-1:-1;;;2773:63:0;;;;;;;:::i;:::-;2185:1;2914:7;:18;7625:16:::1;::::0;-1:-1:-1;;;;;7625:16:0::1;7645:10;7625:30;7617:57;;;::::0;-1:-1:-1;;;7617:57:0;;15574:2:1;7617:57:0::1;::::0;::::1;15556:21:1::0;15613:2;15593:18;;;15586:30;-1:-1:-1;;;15632:18:1;;;15625:44;15686:18;;7617:57:0::1;15546:164:1::0;7617:57:0::1;3403:15:::2;::::0;-1:-1:-1;;;3403:15:0;::::2;;;3395:47;;;::::0;-1:-1:-1;;;3395:47:0;;::::2;::::0;::::2;;;:::i;:::-;12556:13:::3;::::0;:29:::3;-1:-1:-1::0;;;12556:13:0;;::::3;;-1:-1:-1::0;12556:29:0::3;12548:55;;;::::0;-1:-1:-1;;;12548:55:0;;12435:2:1;12548:55:0::3;::::0;::::3;12417:21:1::0;12474:2;12454:18;;;12447:30;-1:-1:-1;;;12493:18:1;;;12486:43;12546:18;;12548:55:0::3;12407:163:1::0;12548:55:0::3;12616:13;:31:::0;;-1:-1:-1;;;;12616:31:0::3;-1:-1:-1::0;;;12616:31:0::3;::::0;;12663:10:::3;::::0;::::3;::::0;-1:-1:-1;;12663:10:0::3;12686:13;:11;:13::i;10545:1910::-:0;2185:1;2781:7;;:19;;2773:63;;;;-1:-1:-1;;;2773:63:0;;;;;;;:::i;:::-;2185:1;2914:7;:18;7510:13:::1;::::0;-1:-1:-1;;;;;7510:13:0::1;7527:10;7510:27;7502:51;;;::::0;-1:-1:-1;;;7502:51:0;;8968:2:1;7502:51:0::1;::::0;::::1;8950:21:1::0;9007:2;8987:18;;;8980:30;-1:-1:-1;;;9026:18:1;;;9019:41;9077:18;;7502:51:0::1;8940:161:1::0;7502:51:0::1;3403:15:::2;::::0;-1:-1:-1;;;3403:15:0;::::2;;;3395:47;;;::::0;-1:-1:-1;;;3395:47:0;;::::2;::::0;::::2;;;:::i;:::-;10681:13:::3;::::0;:29:::3;-1:-1:-1::0;;;10681:13:0;;::::3;;-1:-1:-1::0;10681:29:0::3;10673:55;;;::::0;-1:-1:-1;;;10673:55:0;;12435:2:1;10673:55:0::3;::::0;::::3;12417:21:1::0;12474:2;12454:18;;;12447:30;-1:-1:-1;;;12493:18:1;;;12486:43;12546:18;;10673:55:0::3;12407:163:1::0;10673:55:0::3;10759:15;10747:9;;:27;10739:56;;;::::0;-1:-1:-1;;;10739:56:0;;11045:2:1;10739:56:0::3;::::0;::::3;11027:21:1::0;11084:2;11064:18;;;11057:30;-1:-1:-1;;;11103:18:1;;;11096:46;11159:18;;10739:56:0::3;11017:166:1::0;10739:56:0::3;10866:11;;10855:7;:22;;10847:54;;;::::0;-1:-1:-1;;;10847:54:0;;7936:2:1;10847:54:0::3;::::0;::::3;7918:21:1::0;7975:2;7955:18;;;7948:30;-1:-1:-1;;;7994:18:1;;;7987:49;8053:18;;10847:54:0::3;7908:169:1::0;10847:54:0::3;10956:19;::::0;11016:37:::3;::::0;-1:-1:-1;;;11016:37:0;;11047:4:::3;11016:37;::::0;::::3;4142:51:1::0;-1:-1:-1;;;;;10956:19:0;;::::3;::::0;10915:25:::3;::::0;10956:19;;11016:22:::3;::::0;4115:18:1;;11016:37:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:66;;11093:1;11072:18;:22;11064:55;;;::::0;-1:-1:-1;;;11064:55:0;;10008:2:1;11064:55:0::3;::::0;::::3;9990:21:1::0;10047:2;10027:18;;;10020:30;-1:-1:-1;;;10066:18:1;;;10059:50;10126:18;;11064:55:0::3;9980:170:1::0;11064:55:0::3;11172:18;::::0;11230:36:::3;::::0;-1:-1:-1;;;11230:36:0;;11260:4:::3;11230:36;::::0;::::3;4142:51:1::0;-1:-1:-1;;;;;11172:18:0;;::::3;::::0;11132:24:::3;::::0;11172:18;;11230:21:::3;::::0;4115:18:1;;11230:36:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11314:35;::::0;11202:64;;-1:-1:-1;11297:12:0::3;::::0;6467:42:::3;::::0;11314:35:::3;::::0;11341:7;;11314:35:::3;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11296:53;;;11414:7;11406:31;;;::::0;-1:-1:-1;;;11406:31:0;;7257:2:1;11406:31:0::3;::::0;::::3;7239:21:1::0;7296:2;7276:18;;;7269:30;-1:-1:-1;;;7315:18:1;;;7308:41;7366:18;;11406:31:0::3;7229:161:1::0;11406:31:0::3;11478:37;::::0;-1:-1:-1;;;11478:37:0;;11509:4:::3;11478:37;::::0;::::3;4142:51:1::0;11450:25:0::3;::::0;-1:-1:-1;;;;;11478:22:0;::::3;::::0;::::3;::::0;4115:18:1;;11478:37:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11553:36;::::0;-1:-1:-1;;;11553:36:0;;11583:4:::3;11553:36;::::0;::::3;4142:51:1::0;11450:65:0;;-1:-1:-1;11526:24:0::3;::::0;-1:-1:-1;;;;;11553:21:0;::::3;::::0;::::3;::::0;4115:18:1;;11553:36:0::3;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11526:63;;11627:17;11608:16;:36;11600:66;;;::::0;-1:-1:-1;;;11600:66:0;;13124:2:1;11600:66:0::3;::::0;::::3;13106:21:1::0;13163:2;13143:18;;;13136:30;-1:-1:-1;;;13182:18:1;;;13175:47;13239:18;;11600:66:0::3;13096:167:1::0;11600:66:0::3;11706:17;11685:18;:38;11677:69;;;::::0;-1:-1:-1;;;11677:69:0;;16973:2:1;11677:69:0::3;::::0;::::3;16955:21:1::0;17012:2;16992:18;;;16985:30;-1:-1:-1;;;17031:18:1;;;17024:48;17089:18;;11677:69:0::3;16945:168:1::0;11677:69:0::3;11824:22;11849:36;11868:17:::0;11849:16;:36:::3;:::i;:::-;11824:61;;11922:6;11904:14;:24;;11896:60;;;::::0;-1:-1:-1;;;11896:60:0;;13470:2:1;11896:60:0::3;::::0;::::3;13452:21:1::0;13509:2;13489:18;;;13482:30;13548:25;13528:18;;;13521:53;13591:18;;11896:60:0::3;13442:173:1::0;11896:60:0::3;11978:14;11967:7;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;12060:18:0::3;::::0;-1:-1:-1;12081:38:0::3;12102:17:::0;12081:18;:38:::3;:::i;:::-;12060:59;;12152:7;12138:10;:21;;12130:54;;;::::0;-1:-1:-1;;;12130:54:0;;6565:2:1;12130:54:0::3;::::0;::::3;6547:21:1::0;6604:2;6584:18;;;6577:30;-1:-1:-1;;;6623:18:1;;;6616:50;6683:18;;12130:54:0::3;6537:170:1::0;12130:54:0::3;12205:10;12195:6;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;12240:19:0::3;::::0;12273:18:::3;::::0;12233:75:::3;::::0;;-1:-1:-1;;;;;12240:19:0;;::::3;6180:34:1::0;;6245:2;6230:18;;6223:34;;;12273:18:0;;;::::3;6273::1::0;;;6266:43;6340:2;6325:18;;6318:34;;;12233:75:0;::::3;::::0;;;;6129:3:1;12233:75:0;;::::3;12345:10;;12325:16;:30;12321:127;;12372:13;:30:::0;;-1:-1:-1;;;;12372:30:0::3;-1:-1:-1::0;;;12372:30:0::3;::::0;;12422:14:::3;::::0;::::3;::::0;-1:-1:-1;;12422:14:0::3;12321:127;-1:-1:-1::0;;2141:1:0;3093:22;;-1:-1:-1;;;;;;;;;;10545:1910:0:o;9038:391::-;4508:6;;-1:-1:-1;;;;;4508:6:0;4518:10;4508:20;4500:43;;;;-1:-1:-1;;;4500:43:0;;7597:2:1;4500:43:0;;;7579:21:1;7636:2;7616:18;;;7609:30;-1:-1:-1;;;7655:18:1;;;7648:40;7705:18;;4500:43:0;7569:160:1;4500:43:0;3403:15:::1;::::0;-1:-1:-1;;;3403:15:0;::::1;;;3395:47;;;::::0;-1:-1:-1;;;3395:47:0;;::::1;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;9139:27:0;::::2;9131:57;;;::::0;-1:-1:-1;;;9131:57:0;;14176:2:1;9131:57:0::2;::::0;::::2;14158:21:1::0;14215:2;14195:18;;;14188:30;-1:-1:-1;;;14234:18:1;;;14227:47;14291:18;;9131:57:0::2;14148:167:1::0;9131:57:0::2;9224:16;::::0;-1:-1:-1;;;;;9207:33:0;;::::2;9224:16:::0;::::2;9207:33;;9199:67;;;::::0;-1:-1:-1;;;9199:67:0;;9308:2:1;9199:67:0::2;::::0;::::2;9290:21:1::0;9347:2;9327:18;;;9320:30;-1:-1:-1;;;9366:18:1;;;9359:51;9427:18;;9199:67:0::2;9280:171:1::0;9199:67:0::2;9286:11;::::0;-1:-1:-1;;;9286:11:0;::::2;;;9285:12;9277:50;;;::::0;-1:-1:-1;;;9277:50:0;;::::2;::::0;::::2;;;:::i;:::-;9340:16;:32:::0;;-1:-1:-1;;;;;;9340:32:0::2;-1:-1:-1::0;;;;;9340:32:0;::::2;::::0;;::::2;::::0;;;9388:33:::2;::::0;4142:51:1;;;9388:33:0::2;::::0;4130:2:1;4115:18;9388:33:0::2;;;;;;;;9038:391:::0;:::o;10325:212::-;7625:16;;-1:-1:-1;;;;;7625:16:0;7645:10;7625:30;7617:57;;;;-1:-1:-1;;;7617:57:0;;15574:2:1;7617:57:0;;;15556:21:1;15613:2;15593:18;;;15586:30;-1:-1:-1;;;15632:18:1;;;15625:44;15686:18;;7617:57:0;15546:164:1;7617:57:0;3403:15:::1;::::0;-1:-1:-1;;;3403:15:0;::::1;;;3395:47;;;::::0;-1:-1:-1;;;3395:47:0;;::::1;::::0;::::1;;;:::i;:::-;10435:19:::2;::::0;10422:88:::2;::::0;-1:-1:-1;;;10422:88:0;;10469:10:::2;10422:88;::::0;::::2;4753:34:1::0;10489:4:0::2;4803:18:1::0;;;4796:43;4855:18;;;4848:34;;;-1:-1:-1;;;;;10435:19:0;;::::2;::::0;10422:46:::2;::::0;4688:18:1;;10422:88:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10414:115;;;::::0;-1:-1:-1;;;10414:115:0;;8284:2:1;10414:115:0::2;::::0;::::2;8266:21:1::0;8323:2;8303:18;;;8296:30;-1:-1:-1;;;8342:18:1;;;8335:44;8396:18;;10414:115:0::2;8256:164:1::0;10414:115:0::2;10325:212:::0;:::o;9437:880::-;7625:16;;-1:-1:-1;;;;;7625:16:0;7645:10;7625:30;7617:57;;;;-1:-1:-1;;;7617:57:0;;15574:2:1;7617:57:0;;;15556:21:1;15613:2;15593:18;;;15586:30;-1:-1:-1;;;15632:18:1;;;15625:44;15686:18;;7617:57:0;15546:164:1;7617:57:0;3403:15:::1;::::0;-1:-1:-1;;;3403:15:0;::::1;;;3395:47;;;::::0;-1:-1:-1;;;3395:47:0;;::::1;::::0;::::1;;;:::i;:::-;9590:15:::2;9576:11;:29;9568:58;;;::::0;-1:-1:-1;;;9568:58:0;;12090:2:1;9568:58:0::2;::::0;::::2;12072:21:1::0;12129:2;12109:18;;;12102:30;-1:-1:-1;;;12148:18:1;;;12141:46;12204:18;;9568:58:0::2;12062:166:1::0;9568:58:0::2;9698:1;9686:9;:13;9678:44;;;::::0;-1:-1:-1;;;9678:44:0;;12777:2:1;9678:44:0::2;::::0;::::2;12759:21:1::0;12816:2;12796:18;;;12789:30;-1:-1:-1;;;12835:18:1;;;12828:48;12893:18;;9678:44:0::2;12749:168:1::0;9678:44:0::2;9757:1;9741:13;:17;9733:49;;;::::0;-1:-1:-1;;;9733:49:0;;15917:2:1;9733:49:0::2;::::0;::::2;15899:21:1::0;15956:2;15936:18;;;15929:30;-1:-1:-1;;;15975:18:1;;;15968:49;16034:18;;9733:49:0::2;15889:169:1::0;9733:49:0::2;9802:11;::::0;-1:-1:-1;;;9802:11:0;::::2;;;9801:12;9793:50;;;::::0;-1:-1:-1;;;9793:50:0;;::::2;::::0;::::2;;;:::i;:::-;9869:15;9856:10;:28:::0;9936:9:::2;:23:::0;;;9970:10:::2;:22:::0;;;10003:11:::2;:27:::0;;;-1:-1:-1;10041:7:0::2;:11:::0;;;10063:6:::2;:10:::0;;;10084:11:::2;:18:::0;;-1:-1:-1;;;;;;;10113:28:0;;;;;;10193:19:::2;::::0;10214:18:::2;::::0;10154:103:::2;::::0;;-1:-1:-1;;;10154:103:0;;-1:-1:-1;;;;;10193:19:0;;::::2;10154:103:::0;;::::2;5162:34:1::0;;;;10214:18:0;;::::2;5212::1::0;;;5205:43;5264:18;;;5257:34;;;5307:18;;;5300:34;;;10154:103:0;10164:11;;;10154:38:::2;::::0;5096:19:1;;;;;10154:103:0;;;;;;-1:-1:-1;10164:11:0;10154:103;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10270:15;:13;:15::i;:::-;10301:8;::::0;::::2;::::0;;;::::2;9437:880:::0;;;:::o;8672:358::-;4508:6;;-1:-1:-1;;;;;4508:6:0;4518:10;4508:20;4500:43;;;;-1:-1:-1;;;4500:43:0;;7597:2:1;4500:43:0;;;7579:21:1;7636:2;7616:18;;;7609:30;-1:-1:-1;;;7655:18:1;;;7648:40;7705:18;;4500:43:0;7569:160:1;4500:43:0;3403:15:::1;::::0;-1:-1:-1;;;3403:15:0;::::1;;;3395:47;;;::::0;-1:-1:-1;;;3395:47:0;;::::1;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;;;;;8767:24:0;::::2;8759:51;;;::::0;-1:-1:-1;;;8759:51:0;;6914:2:1;8759:51:0::2;::::0;::::2;6896:21:1::0;6953:2;6933:18;;;6926:30;-1:-1:-1;;;6972:18:1;;;6965:44;7026:18;;8759:51:0::2;6886:164:1::0;8759:51:0::2;8843:13;::::0;-1:-1:-1;;;;;8829:27:0;;::::2;8843:13:::0;::::2;8829:27;;8821:58;;;::::0;-1:-1:-1;;;8821:58:0;;10698:2:1;8821:58:0::2;::::0;::::2;10680:21:1::0;10737:2;10717:18;;;10710:30;-1:-1:-1;;;10756:18:1;;;10749:48;10814:18;;8821:58:0::2;10670:168:1::0;8821:58:0::2;8899:11;::::0;-1:-1:-1;;;8899:11:0;::::2;;;8898:12;8890:50;;;::::0;-1:-1:-1;;;8890:50:0;;::::2;::::0;::::2;;;:::i;:::-;8953:13;:26:::0;;-1:-1:-1;;;;;;8953:26:0::2;-1:-1:-1::0;;;;;8953:26:0;::::2;::::0;;::::2;::::0;;;8995:27:::2;::::0;4142:51:1;;;8995:27:0::2;::::0;4130:2:1;4115:18;8995:27:0::2;4097:102:1::0;4778:220:0;4508:6;;-1:-1:-1;;;;;4508:6:0;4518:10;4508:20;4500:43;;;;-1:-1:-1;;;4500:43:0;;7597:2:1;4500:43:0;;;7579:21:1;7636:2;7616:18;;;7609:30;-1:-1:-1;;;7655:18:1;;;7648:40;7705:18;;4500:43:0;7569:160:1;4500:43:0;-1:-1:-1;;;;;4866:18:0;::::1;4858:56;;;::::0;-1:-1:-1;;;4858:56:0;;13822:2:1;4858:56:0::1;::::0;::::1;13804:21:1::0;13861:2;13841:18;;;13834:30;13900:27;13880:18;;;13873:55;13945:18;;4858:56:0::1;13794:175:1::0;4858:56:0::1;4953:6;::::0;4930:36:::1;::::0;;-1:-1:-1;;;;;4953:6:0;;::::1;4416:34:1::0;;4486:15;;;4481:2;4466:18;;4459:43;4930:36:0;;::::1;::::0;;;;;;;;::::1;4977:6;:13:::0;;-1:-1:-1;;;;;;4977:13:0::1;-1:-1:-1::0;;;;;4977:13:0;;;::::1;::::0;;;::::1;::::0;;4778:220::o;3737:104::-;3601:15;;-1:-1:-1;;;3601:15:0;;;;3600:16;3592:48;;;;-1:-1:-1;;;3592:48:0;;14522:2:1;3592:48:0;;;14504:21:1;14561:2;14541:18;;;14534:30;-1:-1:-1;;;14580:18:1;;;14573:49;14639:18;;3592:48:0;14494:169:1;3592:48:0;3811:15:::1;:22:::0;;-1:-1:-1;;;;3811:22:0::1;-1:-1:-1::0;;;3811:22:0::1;::::0;;3737:104::o;12828:702::-;7749:11;;-1:-1:-1;;;7749:11:0;;;;7741:49;;;;-1:-1:-1;;;7741:49:0;;14870:2:1;7741:49:0;;;14852:21:1;14909:2;14889:18;;;14882:30;14948:27;14928:18;;;14921:55;14993:18;;7741:49:0;14842:175:1;7741:49:0;7824:13;;-1:-1:-1;;;7824:13:0;;:31;:13;6604:1;7824:31;;:67;;-1:-1:-1;7859:13:0;;-1:-1:-1;;;7859:13:0;;:32;:13;6653:1;7859:32;7824:67;7823:149;;;-1:-1:-1;7911:13:0;;:29;-1:-1:-1;;;7911:13:0;;;;-1:-1:-1;7911:29:0;:60;;;;;7962:9;;7944:15;:27;7911:60;7801:249;;;;-1:-1:-1;;;7801:249:0;;11390:2:1;7801:249:0;;;11372:21:1;11429:2;11409:18;;;11402:30;-1:-1:-1;;;11448:18:1;;;11441:52;11510:18;;7801:249:0;11362:172:1;7801:249:0;12887:11:::1;:19:::0;;-1:-1:-1;;;;12887:19:0::1;::::0;;12960::::1;::::0;13031:18:::1;::::0;13091:37:::1;::::0;-1:-1:-1;;;13091:37:0;;13122:4:::1;13091:37;::::0;::::1;4142:51:1::0;-1:-1:-1;;;;;12960:19:0;;::::1;::::0;13031:18;;::::1;::::0;-1:-1:-1;;12960:19:0;;13091:22:::1;::::0;4115:18:1;;13091:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13168:36;::::0;-1:-1:-1;;;13168:36:0;;13198:4:::1;13168:36;::::0;::::1;4142:51:1::0;13061:67:0;;-1:-1:-1;13139:26:0::1;::::0;-1:-1:-1;;;;;13168:21:0;::::1;::::0;::::1;::::0;4115:18:1;;13168:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13139:65:::0;-1:-1:-1;13221:23:0;;13217:123:::1;;13276:16;::::0;13254:60:::1;::::0;-1:-1:-1;;;13254:60:0;;-1:-1:-1;;;;;13276:16:0;;::::1;13254:60;::::0;::::1;5527:51:1::0;5594:18;;;5587:34;;;13254:21:0;;::::1;::::0;::::1;::::0;5500:18:1;;13254:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13246:94;;;::::0;-1:-1:-1;;;13246:94:0;;9658:2:1;13246:94:0::1;::::0;::::1;9640:21:1::0;9697:2;9677:18;;;9670:30;-1:-1:-1;;;9716:18:1;;;9709:51;9777:18;;13246:94:0::1;9630:171:1::0;13246:94:0::1;13355:22:::0;;13351:119:::1;;13408:16;::::0;13387:58:::1;::::0;-1:-1:-1;;;13387:58:0;;-1:-1:-1;;;;;13408:16:0;;::::1;13387:58;::::0;::::1;5527:51:1::0;5594:18;;;5587:34;;;13387:20:0;;::::1;::::0;::::1;::::0;5500:18:1;;13387:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13379:91;;;::::0;-1:-1:-1;;;13379:91:0;;11741:2:1;13379:91:0::1;::::0;::::1;11723:21:1::0;11780:2;11760:18;;;11753:30;-1:-1:-1;;;11799:18:1;;;11792:50;11859:18;;13379:91:0::1;11713:170:1::0;13379:91:0::1;13481:14;:12;:14::i;:::-;13513:9;::::0;::::1;::::0;;;::::1;8061:1;;;;12828:702::o:0;13538:443::-;13617:19;;13673:30;;-1:-1:-1;;;13673:30:0;;13697:4;13673:30;;;4142:51:1;-1:-1:-1;;;;;13617:19:0;;;;13583:18;;13617:19;;13673:15;;4115:18:1;;13673:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13648:55;;13714:17;6467:42;-1:-1:-1;;;;;13734:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13813:41;;-1:-1:-1;;;13813:41:0;;13837:4;13813:41;;;4416:34:1;-1:-1:-1;;;;;4486:15:1;;;4466:18;;;4459:43;13714:84:0;;-1:-1:-1;13857:14:0;;13813:15;;;;;4351:18:1;;13813:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;13809:165;;;13896:40;;-1:-1:-1;;;13896:40:0;;-1:-1:-1;;;;;5545:32:1;;;13896:40:0;;;5527:51:1;5594:18;;;5587:34;;;13896:13:0;;;;;5500:18:1;;13896:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13888:74;;;;-1:-1:-1;;;13888:74:0;;15224:2:1;13888:74:0;;;15206:21:1;15263:2;15243:18;;;15236:30;-1:-1:-1;;;15282:18:1;;;15275:51;15343:18;;13888:74:0;15196:171:1;13888:74:0;13538:443;;;:::o;13989:350::-;14067:19;;14118:64;;;-1:-1:-1;;;14118:64:0;;;;-1:-1:-1;;;;;14067:19:0;;;;14033:18;;6467:42;;14118:62;;:64;;;;;;;;;;;;;;;6467:42;14118:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14197:41;;-1:-1:-1;;;14197:41:0;;14221:4;14197:41;;;4416:34:1;-1:-1:-1;;;;;4486:15:1;;;4466:18;;;4459:43;14098:84:0;;-1:-1:-1;14241:1:0;;14197:15;;;;;4351:18:1;;14197:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;14193:139;;;14267:27;;-1:-1:-1;;;14267:27:0;;-1:-1:-1;;;;;5545:32:1;;;14267:27:0;;;5527:51:1;14292:1:0;5594:18:1;;;5587:34;14267:13:0;;;;;5500:18:1;;14267:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14259:61;;;;-1:-1:-1;;;14259:61:0;;15224:2:1;14259:61:0;;;15206:21:1;15263:2;15243:18;;;15236:30;-1:-1:-1;;;15282:18:1;;;15275:51;15343:18;;14259:61:0;15196:171:1;14259:61:0;13989:350;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;:::-;260:5;84:187;-1:-1:-1;;;84:187:1:o;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:880::-;694:6;702;710;718;726;779:3;767:9;758:7;754:23;750:33;747:2;;;801:6;793;786:22;747:2;845:9;832:23;864:31;889:5;864:31;:::i;:::-;914:5;-1:-1:-1;971:2:1;956:18;;943:32;984:33;943:32;984:33;:::i;:::-;1036:7;-1:-1:-1;1095:2:1;1080:18;;1067:32;1108:33;1067:32;1108:33;:::i;:::-;1160:7;-1:-1:-1;1219:2:1;1204:18;;1191:32;1232:33;1191:32;1232:33;:::i;:::-;1284:7;-1:-1:-1;1343:3:1;1328:19;;1315:33;1357;1315;1357;:::i;:::-;1409:7;1399:17;;;737:685;;;;;;;;:::o;1427:297::-;1494:6;1547:2;1535:9;1526:7;1522:23;1518:32;1515:2;;;1568:6;1560;1553:22;1515:2;1605:9;1599:16;1658:5;1651:13;1644:21;1637:5;1634:32;1624:2;;1685:6;1677;1670:22;1729:190;1788:6;1841:2;1829:9;1820:7;1816:23;1812:32;1809:2;;;1862:6;1854;1847:22;1809:2;-1:-1:-1;1890:23:1;;1799:120;-1:-1:-1;1799:120:1:o;1924:194::-;1994:6;2047:2;2035:9;2026:7;2022:23;2018:32;2015:2;;;2068:6;2060;2053:22;2015:2;-1:-1:-1;2096:16:1;;2005:113;-1:-1:-1;2005:113:1:o;2123:1102::-;2209:6;2217;2225;2278:2;2266:9;2257:7;2253:23;2249:32;2246:2;;;2299:6;2291;2284:22;2246:2;2340:9;2327:23;2317:33;;2397:2;2386:9;2382:18;2369:32;2359:42;;2452:2;2441:9;2437:18;2424:32;2475:18;2516:2;2508:6;2505:14;2502:2;;;2537:6;2529;2522:22;2502:2;2580:6;2569:9;2565:22;2555:32;;2625:7;2618:4;2614:2;2610:13;2606:27;2596:2;;2652:6;2644;2637:22;2596:2;2693;2680:16;2715:2;2711;2708:10;2705:2;;;2721:18;;:::i;:::-;2796:2;2790:9;2764:2;2850:13;;-1:-1:-1;;2846:22:1;;;2870:2;2842:31;2838:40;2826:53;;;2894:18;;;2914:22;;;2891:46;2888:2;;;2940:18;;:::i;:::-;2980:10;2976:2;2969:22;3015:2;3007:6;3000:18;3055:7;3050:2;3045;3041;3037:11;3033:20;3030:33;3027:2;;;3081:6;3073;3066:22;3027:2;3142;3137;3133;3129:11;3124:2;3116:6;3112:15;3099:46;3187:6;3182:2;3177;3169:6;3165:15;3161:24;3154:40;3213:6;3203:16;;;;;;;2236:989;;;;;:::o;3230:326::-;3307:6;3315;3323;3376:2;3364:9;3355:7;3351:23;3347:32;3344:2;;;3397:6;3389;3382:22;3344:2;-1:-1:-1;;3425:23:1;;;3495:2;3480:18;;3467:32;;-1:-1:-1;3546:2:1;3531:18;;;3518:32;;3334:222;-1:-1:-1;3334:222:1:o;3561:430::-;3690:3;3728:6;3722:13;3753:3;3765:129;3779:6;3776:1;3773:13;3765:129;;;3877:4;3861:14;;;3857:25;;3851:32;3838:11;;;3831:53;3794:12;3765:129;;;3912:6;3909:1;3906:13;3903:2;;;3947:3;3938:6;3933:3;3929:16;3922:29;3903:2;-1:-1:-1;3969:16:1;;;;;3698:293;-1:-1:-1;;3698:293:1:o;16063:355::-;16265:2;16247:21;;;16304:2;16284:18;;;16277:30;16343:33;16338:2;16323:18;;16316:61;16409:2;16394:18;;16237:181::o;16423:343::-;16625:2;16607:21;;;16664:2;16644:18;;;16637:30;-1:-1:-1;;;16698:2:1;16683:18;;16676:49;16757:2;16742:18;;16597:169::o;17118:349::-;17320:2;17302:21;;;17359:2;17339:18;;;17332:30;17398:27;17393:2;17378:18;;17371:55;17458:2;17443:18;;17292:175::o;18301:128::-;18341:3;18372:1;18368:6;18365:1;18362:13;18359:2;;;18378:18;;:::i;:::-;-1:-1:-1;18414:9:1;;18349:80::o;18434:125::-;18474:4;18502:1;18499;18496:8;18493:2;;;18507:18;;:::i;:::-;-1:-1:-1;18544:9:1;;18483:76::o;18564:127::-;18625:10;18620:3;18616:20;18613:1;18606:31;18656:4;18653:1;18646:15;18680:4;18677:1;18670:15;18696:127;18757:10;18752:3;18748:20;18745:1;18738:31;18788:4;18785:1;18778:15;18812:4;18809:1;18802:15;18828:131;-1:-1:-1;;;;;18903:31:1;;18893:42;;18883:2;;18949:1;18946;18939:12
Swarm Source
ipfs://98bc791eb59803e9233140cd83ccee9429aeb1d38a4a8256d1e7ebef299d7ec5
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.