Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 640 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Token Pri... | 19141766 | 328 days ago | IN | 0 ETH | 0.00068594 | ||||
Update Token Pri... | 19131852 | 330 days ago | IN | 0 ETH | 0.00050701 | ||||
Update Token Pri... | 19125106 | 331 days ago | IN | 0 ETH | 0.00041591 | ||||
Update Token Pri... | 19117747 | 332 days ago | IN | 0 ETH | 0.00081187 | ||||
Update Token Pri... | 19110584 | 333 days ago | IN | 0 ETH | 0.0003225 | ||||
Update Token Pri... | 19105443 | 333 days ago | IN | 0 ETH | 0.00033673 | ||||
Update Token Pri... | 19096175 | 335 days ago | IN | 0 ETH | 0.00030694 | ||||
Update Token Pri... | 19088861 | 336 days ago | IN | 0 ETH | 0.00057974 | ||||
Update Token Pri... | 19081741 | 337 days ago | IN | 0 ETH | 0.00032062 | ||||
Update Token Pri... | 19074996 | 338 days ago | IN | 0 ETH | 0.00027837 | ||||
Update Token Pri... | 19067642 | 339 days ago | IN | 0 ETH | 0.00028605 | ||||
Update Token Pri... | 19060741 | 340 days ago | IN | 0 ETH | 0.00053578 | ||||
Update Token Pri... | 19054934 | 341 days ago | IN | 0 ETH | 0.00038919 | ||||
Update Token Pri... | 19047490 | 342 days ago | IN | 0 ETH | 0.00057547 | ||||
Update Token Pri... | 19042477 | 342 days ago | IN | 0 ETH | 0.00106118 | ||||
Update Token Pri... | 19033463 | 344 days ago | IN | 0 ETH | 0.00085054 | ||||
Update Token Pri... | 19024746 | 345 days ago | IN | 0 ETH | 0.00083439 | ||||
Update Token Pri... | 19024727 | 345 days ago | IN | 0 ETH | 0.00087084 | ||||
Update Token Pri... | 19021274 | 345 days ago | IN | 0 ETH | 0.00088277 | ||||
Update Token Pri... | 19013211 | 346 days ago | IN | 0 ETH | 0.00065981 | ||||
Update Token Pri... | 19004755 | 348 days ago | IN | 0 ETH | 0.00128166 | ||||
Update Token Pri... | 18999862 | 348 days ago | IN | 0 ETH | 0.00066299 | ||||
Update Token Pri... | 18989523 | 350 days ago | IN | 0 ETH | 0.00048752 | ||||
Update Token Pri... | 18985564 | 350 days ago | IN | 0 ETH | 0.00077111 | ||||
Update Token Pri... | 18978562 | 351 days ago | IN | 0 ETH | 0.00144533 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AdminAlpha
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-20 */ // File: contracts_ETH/main/libraries/Math.sol // OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol) pragma solidity ^0.8.4; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: contracts_ETH/main/libraries/SafeERC20.sol pragma solidity ^0.8.4; library SafeERC20 { function safeSymbol(IERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(0x95d89b41) ); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(0x06fdde03) ); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) public view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(0x313ce567) ); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer( IERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(0xa9059cbb, to, amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: Transfer failed" ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(0x23b872dd, from, to, amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "SafeERC20: TransferFrom failed" ); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts_ETH/main/Token.sol pragma solidity ^0.8.4; /** * @author Formation.Fi. * @notice A common Implementation for tokens ALPHA, BETA and GAMMA. */ contract Token is ERC20, Ownable { struct Deposit{ uint256 amount; uint256 time; } address public proxyInvestement; address private proxyAdmin; mapping(address => Deposit[]) public depositPerAddress; mapping(address => bool) public whitelist; event SetProxyInvestement(address _address); constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { } modifier onlyProxy() { require( (proxyInvestement != address(0)) && (proxyAdmin != address(0)), "Formation.Fi: zero address" ); require( (msg.sender == proxyInvestement) || (msg.sender == proxyAdmin), "Formation.Fi: not the proxy" ); _; } modifier onlyProxyInvestement() { require(proxyInvestement != address(0), "Formation.Fi: zero address" ); require(msg.sender == proxyInvestement, "Formation.Fi: not the proxy" ); _; } /** * @dev Update the proxyInvestement. * @param _proxyInvestement. * @notice Emits a {SetProxyInvestement} event with `_proxyInvestement`. */ function setProxyInvestement(address _proxyInvestement) external onlyOwner { require( _proxyInvestement!= address(0), "Formation.Fi: zero address" ); proxyInvestement = _proxyInvestement; emit SetProxyInvestement( _proxyInvestement); } /** * @dev Add a contract address to the whitelist * @param _contract The address of the contract. */ function addToWhitelist(address _contract) external onlyOwner { require( _contract!= address(0), "Formation.Fi: zero address" ); whitelist[_contract] = true; } /** * @dev Remove a contract address from the whitelist * @param _contract The address of the contract. */ function removeFromWhitelist(address _contract) external onlyOwner { require( whitelist[_contract] == true, "Formation.Fi: no whitelist" ); require( _contract!= address(0), "Formation.Fi: zero address" ); whitelist[_contract] = false; } /** * @dev Update the proxyAdmin. * @param _proxyAdmin. */ function setAdmin(address _proxyAdmin) external onlyOwner { require( _proxyAdmin!= address(0), "Formation.Fi: zero address" ); proxyAdmin = _proxyAdmin; } /** * @dev add user's deposit. * @param _account The user's address. * @param _amount The user's deposit amount. * @param _time The deposit time. */ function addDeposit(address _account, uint256 _amount, uint256 _time) external onlyProxyInvestement { require( _account!= address(0), "Formation.Fi: zero address" ); require( _amount!= 0, "Formation.Fi: zero amount" ); require( _time!= 0, "Formation.Fi: zero time" ); Deposit memory _deposit = Deposit(_amount, _time); depositPerAddress[_account].push(_deposit); } /** * @dev mint the token product for the user. * @notice To receive the token product, the user has to deposit * the required StableCoin in this product. * @param _account The user's address. * @param _amount The amount to be minted. */ function mint(address _account, uint256 _amount) external onlyProxy { require( _account!= address(0), "Formation.Fi: zero address" ); require( _amount!= 0, "Formation.Fi: zero amount" ); _mint(_account, _amount); } /** * @dev burn the token product of the user. * @notice When the user withdraws his Stablecoins, his tokens * product are burned. * @param _account The user's address. * @param _amount The amount to be burned. */ function burn(address _account, uint256 _amount) external onlyProxy { require( _account!= address(0), "Formation.Fi: zero address" ); require( _amount!= 0, "Formation.Fi: zero amount" ); _burn( _account, _amount); } /** * @dev Verify the lock up condition for a user's withdrawal request. * @param _account The user's address. * @param _amount The amount to be withdrawn. * @param _period The lock up period. * @return _success is true if the lock up condition is satisfied. */ function checklWithdrawalRequest(address _account, uint256 _amount, uint256 _period) external view returns (bool _success){ require( _account!= address(0), "Formation.Fi: zero address" ); require( _amount!= 0, "Formation.Fi: zero amount" ); Deposit[] memory _deposit = depositPerAddress[_account]; uint256 _amountTotal = 0; for (uint256 i = 0; i < _deposit.length; i++) { require ((block.timestamp - _deposit[i].time) >= _period, "Formation.Fi: position locked"); if (_amount<= (_amountTotal + _deposit[i].amount)){ break; } _amountTotal = _amountTotal + _deposit[i].amount; } _success= true; } /** * @dev update the user's token data. * @notice this function is called after each desposit request * validation by the manager. * @param _account The user's address. * @param _amount The deposit amount validated by the manager. */ function updateTokenData( address _account, uint256 _amount) external onlyProxyInvestement { _updateTokenData(_account, _amount); } function _updateTokenData( address _account, uint256 _amount) internal { require( _account!= address(0), "Formation.Fi: zero address" ); require( _amount!= 0, "Formation.Fi: zero amount" ); Deposit[] memory _deposit = depositPerAddress[_account]; uint256 _amountlocal = 0; uint256 _amountTotal = 0; uint256 _newAmount; uint256 k =0; for (uint256 i = 0; i < _deposit.length; i++) { _amountlocal = Math.min(_deposit[i].amount, _amount - _amountTotal); _amountTotal = _amountTotal + _amountlocal; _newAmount = _deposit[i].amount - _amountlocal; depositPerAddress[_account][k].amount = _newAmount; if (_newAmount == 0){ _deleteTokenData(_account, k); } else { k = k+1; } if (_amountTotal == _amount){ break; } } } /** * @dev delete the user's token data. * @notice This function is called when the user's withdrawal request is * validated by the manager. * @param _account The user's address. * @param _index The index of the user in 'amountDepositPerAddress'. */ function _deleteTokenData(address _account, uint256 _index) internal { require( _account!= address(0), "Formation.Fi: zero address" ); uint256 _size = depositPerAddress[_account].length - 1; require( _index <= _size, "Formation.Fi: index is out" ); for (uint256 i = _index; i< _size; i++){ depositPerAddress[ _account][i] = depositPerAddress[ _account][i+1]; } depositPerAddress[ _account].pop(); } /** * @dev update the token data of both the sender and the receiver when the product token is transferred. * @param from The sender's address. * @param to The receiver's address. * @param amount The transferred amount. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual override{ if ((to != address(0)) && (to != proxyInvestement) && (to != proxyAdmin) && (from != address(0)) && (!whitelist[to])){ _updateTokenData(from, amount); Deposit memory _deposit = Deposit(amount, block.timestamp); depositPerAddress[to].push(_deposit); } } } // File: contracts_ETH/main/Admin.sol pragma solidity ^0.8.4; /** * @author Formation.Fi. * @notice Implementation of the contract Admin. */ contract Admin is Ownable { using SafeERC20 for IERC20; uint256 public constant FACTOR_FEES_DECIMALS = 1e4; uint256 public constant FACTOR_PRICE_DECIMALS = 1e6; uint256 public constant SECONDES_PER_YEAR = 365 days; uint256 public slippageTolerance = 200; uint256 public amountScaleDecimals = 1; uint256 public depositFeeRate = 50; uint256 public depositFeeRateParity= 15; uint256 public managementFeeRate = 200; uint256 public performanceFeeRate = 2000; uint256 public performanceFees = 0; uint256 public managementFees = 0; uint256 public managementFeesTime = 1658293762; uint256 public tokenPrice = 1142477; uint256 public tokenPriceMean = 1156433; uint256 public minAmount= 100 * 1e18; uint256 public lockupPeriodUser = 604800; uint public netDepositInd= 0; uint256 public netAmountEvent =0; address public manager; address public treasury; address public investement; address private safeHouse; bool public isCancel; Token public token; IERC20 public stableToken; constructor( address _manager, address _treasury, address _stableTokenAddress, address _tokenAddress) { require( _manager != address(0), "Formation.Fi: zero address" ); require( _treasury != address(0), "Formation.Fi: zero address" ); require( _stableTokenAddress != address(0), "Formation.Fi: zero address" ); require( _tokenAddress != address(0), "Formation.Fi: zero address" ); manager = _manager; treasury = _treasury; stableToken = IERC20(_stableTokenAddress); token = Token(_tokenAddress); uint8 _stableTokenDecimals = ERC20( _stableTokenAddress).decimals(); if ( _stableTokenDecimals == 6) { amountScaleDecimals= 1e12; } } modifier onlyInvestement() { require(investement != address(0), "Formation.Fi: zero address" ); require(msg.sender == investement, "Formation.Fi: not investement" ); _; } modifier onlyManager() { require(msg.sender == manager, "Formation.Fi: not manager"); _; } /** * @dev Setter functions to update the Portfolio Parameters. */ function setTreasury(address _treasury) external onlyOwner { require( _treasury != address(0), "Formation.Fi: zero address" ); treasury = _treasury; } function setManager(address _manager) external onlyOwner { require( _manager != address(0), "Formation.Fi: zero address" ); manager = _manager; } function setInvestement(address _investement) external onlyOwner { require( _investement!= address(0), "Formation.Fi: zero address" ); investement = _investement; } function setSafeHouse(address _safeHouse) external onlyOwner { require( _safeHouse!= address(0), "Formation.Fi: zero address" ); safeHouse = _safeHouse; } function setCancel(bool _cancel) external onlyManager { isCancel= _cancel; } function setLockupPeriodUser(uint256 _lockupPeriodUser) external onlyManager { lockupPeriodUser = _lockupPeriodUser; } function setDepositFeeRate(uint256 _rate) external onlyManager { depositFeeRate= _rate; } function setDepositFeeRateParity(uint256 _rate) external onlyManager { depositFeeRateParity= _rate; } function setManagementFeeRate(uint256 _rate) external onlyManager { managementFeeRate = _rate; } function setPerformanceFeeRate(uint256 _rate) external onlyManager { performanceFeeRate = _rate; } function setMinAmount(uint256 _minAmount) external onlyManager { minAmount= _minAmount; } function updateTokenPrice(uint256 _price) external onlyManager { require( _price > 0, "Formation.Fi: zero price" ); tokenPrice = _price; } function updateTokenPriceMean(uint256 _price) external onlyInvestement { require( _price > 0, "Formation.Fi: zero price" ); tokenPriceMean = _price; } function updateManagementFeeTime(uint256 _time) external onlyInvestement { managementFeesTime = _time; } /** * @dev Calculate performance Fees. */ function calculatePerformanceFees() external onlyManager { require(performanceFees == 0, "Formation.Fi: fees on pending"); uint256 _deltaPrice = 0; if (tokenPrice > tokenPriceMean) { _deltaPrice = tokenPrice - tokenPriceMean; tokenPriceMean = tokenPrice; performanceFees = (token.totalSupply() * _deltaPrice * performanceFeeRate) / (tokenPrice * FACTOR_FEES_DECIMALS); } } /** * @dev Calculate management Fees. */ function calculateManagementFees() external onlyManager { require(managementFees == 0, "Formation.Fi: fees on pending"); if (managementFeesTime!= 0){ uint256 _deltaTime; _deltaTime = block.timestamp - managementFeesTime; managementFees = (token.totalSupply() * managementFeeRate * _deltaTime ) /(FACTOR_FEES_DECIMALS * SECONDES_PER_YEAR); managementFeesTime = block.timestamp; } } /** * @dev Mint Fees. */ function mintFees() external onlyManager { require ((performanceFees + managementFees) > 0, "Formation.Fi: zero fees"); token.mint(treasury, performanceFees + managementFees); performanceFees = 0; managementFees = 0; } /** * @dev Calculate net deposit indicator * @param _depositAmountTotal the total requested deposit amount by users. * @param _withdrawalAmountTotal the total requested withdrawal amount by users. * @param _maxDepositAmount the maximum accepted deposit amount by event. * @param _maxWithdrawalAmount the maximum accepted withdrawal amount by event. * @return net Deposit indicator: 1 if net deposit case, 0 otherwise (net withdrawal case). */ function calculateNetDepositInd(uint256 _depositAmountTotal, uint256 _withdrawalAmountTotal, uint256 _maxDepositAmount, uint256 _maxWithdrawalAmount) external onlyInvestement returns( uint256) { _depositAmountTotal = Math.min( _depositAmountTotal, _maxDepositAmount); _withdrawalAmountTotal = (_withdrawalAmountTotal * tokenPrice) / FACTOR_PRICE_DECIMALS; _withdrawalAmountTotal= Math.min(_withdrawalAmountTotal, _maxWithdrawalAmount); uint256 _depositAmountTotalAfterFees = _depositAmountTotal - ( _depositAmountTotal * depositFeeRate)/ FACTOR_FEES_DECIMALS; if ( _depositAmountTotalAfterFees >= _withdrawalAmountTotal) { netDepositInd = 1 ; } else { netDepositInd = 0; } return netDepositInd; } /** * @dev Calculate net amount * @param _depositAmountTotal the total requested deposit amount by users. * @param _withdrawalAmountTotal the total requested withdrawal amount by users. * @param _maxDepositAmount the maximum accepted deposit amount by event. * @param _maxWithdrawalAmount the maximum accepted withdrawal amount by event. * @return net amount. */ function calculateNetAmountEvent(uint256 _depositAmountTotal, uint256 _withdrawalAmountTotal, uint256 _maxDepositAmount, uint256 _maxWithdrawalAmount) external onlyInvestement returns(uint256) { _depositAmountTotal = Math.min( _depositAmountTotal, _maxDepositAmount); _withdrawalAmountTotal = (_withdrawalAmountTotal * tokenPrice) / FACTOR_PRICE_DECIMALS; _withdrawalAmountTotal= Math.min(_withdrawalAmountTotal, _maxWithdrawalAmount); uint256 _depositAmountTotalAfterFees = _depositAmountTotal - ( _depositAmountTotal * depositFeeRate)/ FACTOR_FEES_DECIMALS; if (netDepositInd == 1) { netAmountEvent = _depositAmountTotalAfterFees - _withdrawalAmountTotal; } else { netAmountEvent = _withdrawalAmountTotal - _depositAmountTotalAfterFees; } return netAmountEvent; } /** * @dev Protect against slippage due to assets sale. * @param _withdrawalAmount the value of sold assets in Stablecoin. * _withdrawalAmount has to be sent to the contract. * treasury has to approve the contract for both Stablecoin and token. * @return Missed amount to send to the contract due to slippage. */ function protectAgainstSlippage(uint256 _withdrawalAmount) external onlyManager returns (uint256) { require(_withdrawalAmount != 0, "Formation.Fi: zero amount"); require(netDepositInd == 0, "Formation.Fi: no slippage"); uint256 _amount = 0; uint256 _deltaAmount =0; uint256 _slippage = 0; uint256 _tokenAmount = 0; uint256 _balanceTokenTreasury = token.balanceOf(treasury); uint256 _balanceStableTreasury = stableToken.balanceOf(treasury) * amountScaleDecimals; if (_withdrawalAmount< netAmountEvent){ _amount = netAmountEvent - _withdrawalAmount; _slippage = (_amount * FACTOR_FEES_DECIMALS ) / netAmountEvent; if (_slippage >= slippageTolerance) { return netAmountEvent; } else { _deltaAmount = Math.min( _amount, _balanceStableTreasury); if ( _deltaAmount > 0){ stableToken.safeTransferFrom(treasury, investement, _deltaAmount/amountScaleDecimals); _tokenAmount = (_deltaAmount * FACTOR_PRICE_DECIMALS)/tokenPrice; token.mint(treasury, _tokenAmount); return _amount - _deltaAmount; } else { return _amount; } } } else { _amount = _withdrawalAmount - netAmountEvent; _tokenAmount = (_amount * FACTOR_PRICE_DECIMALS)/tokenPrice; _tokenAmount = Math.min(_tokenAmount, _balanceTokenTreasury); if (_tokenAmount >0) { _deltaAmount = (_tokenAmount * tokenPrice)/FACTOR_PRICE_DECIMALS; stableToken.safeTransfer(treasury, _deltaAmount/amountScaleDecimals); token.burn( treasury, _tokenAmount); } if ((_amount - _deltaAmount) > 0) { stableToken.safeTransfer(safeHouse, (_amount - _deltaAmount)/amountScaleDecimals); } } return 0; } /** * @dev Send Stablecoin from the manager to the contract. * @param _amount tha amount to send. */ function sendStableTocontract(uint256 _amount) external onlyManager { require( _amount > 0, "Formation.Fi: zero amount"); stableToken.safeTransferFrom(msg.sender, address(this), _amount/amountScaleDecimals); } /** * @dev Send Stablecoin from the contract to the contract Investement. */ function sendStableFromcontract() external onlyManager { require(investement != address(0), "Formation.Fi: zero address" ); stableToken.safeTransfer(investement, stableToken.balanceOf(address(this))); } } // File: contracts_ETH/Alpha/AdminAlpha.sol pragma solidity ^0.8.4; /** * @author Formation.Fi. * @notice Implementation of the contract AdminAlpha. */ contract AdminAlpha is Admin { constructor(address _manager, address _treasury, address _stableToken, address _token) Admin( _manager, _treasury, _stableToken, _token){ } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_stableToken","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"FACTOR_FEES_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FACTOR_PRICE_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDES_PER_YEAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountScaleDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateManagementFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositAmountTotal","type":"uint256"},{"internalType":"uint256","name":"_withdrawalAmountTotal","type":"uint256"},{"internalType":"uint256","name":"_maxDepositAmount","type":"uint256"},{"internalType":"uint256","name":"_maxWithdrawalAmount","type":"uint256"}],"name":"calculateNetAmountEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositAmountTotal","type":"uint256"},{"internalType":"uint256","name":"_withdrawalAmountTotal","type":"uint256"},{"internalType":"uint256","name":"_maxDepositAmount","type":"uint256"},{"internalType":"uint256","name":"_maxWithdrawalAmount","type":"uint256"}],"name":"calculateNetDepositInd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"calculatePerformanceFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFeeRateParity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investement","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCancel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockupPeriodUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managementFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managementFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managementFeesTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"netAmountEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"netDepositInd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalAmount","type":"uint256"}],"name":"protectAgainstSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendStableFromcontract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendStableTocontract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_cancel","type":"bool"}],"name":"setCancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setDepositFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setDepositFeeRateParity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_investement","type":"address"}],"name":"setInvestement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockupPeriodUser","type":"uint256"}],"name":"setLockupPeriodUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setManagementFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"setMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setPerformanceFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_safeHouse","type":"address"}],"name":"setSafeHouse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippageTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stableToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceMean","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"updateManagementFeeTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updateTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updateTokenPriceMean","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260c860015560016002556032600355600f60045560c86005556107d0600655600060075560006008556362d78e0260095562116ecd600a556211a551600b5568056bc75e2d63100000600c5562093a80600d556000600e556000600f553480156200006e57600080fd5b506040516200410b3803806200410b833981810160405281019062000094919062000531565b83838383620000b8620000ac6200043760201b60201c565b6200043f60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200012b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001229062000617565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200019e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001959062000639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000211576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002089062000639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000284576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027b9062000639565b60405180910390fd5b83601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620003d157600080fd5b505afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c91906200059d565b905060068160ff161415620004285764e8d4a510006002819055505b50505050505050505062000733565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200051481620006ff565b92915050565b6000815190506200052b8162000719565b92915050565b600080600080608085870312156200054857600080fd5b6000620005588782880162000503565b94505060206200056b8782880162000503565b93505060406200057e8782880162000503565b9250506060620005918782880162000503565b91505092959194509250565b600060208284031215620005b057600080fd5b6000620005c0848285016200051a565b91505092915050565b6000620005d8601a836200065b565b9150620005e582620006ad565b602082019050919050565b6000620005ff601b836200065b565b91506200060c82620006d6565b602082019050919050565b600060208201905081810360008301526200063281620005c9565b9050919050565b600060208201905081810360008301526200065481620005f0565b9050919050565b600082825260208201905092915050565b6000620006798262000680565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b7f466f726d6174696f6e2e46693a207a65726f2061646472657373000000000000600082015250565b7f466f726d6174696f6e2e46693a20207a65726f20616464726573730000000000600082015250565b6200070a816200066c565b81146200071657600080fd5b50565b6200072481620006a0565b81146200073057600080fd5b50565b6139c880620007436000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c80637ff9b59611610182578063d03153aa116100e9578063f0f44260116100a2578063f9892d141161007c578063f9892d14146107bc578063fa2daa2e146107da578063fbeb2ff3146107f6578063fc0c546a14610812576102bb565b8063f0f4426014610766578063f1a503ef14610782578063f2fde38b146107a0576102bb565b8063d03153aa146106ca578063d0ebdbe7146106e8578063d99ab10e14610704578063e0a83dd314610722578063e542a13414610752578063ef9520331461075c576102bb565b80638e691b9a1161013b5780638e691b9a1461061a57806391a543b6146106365780639b2cb5d814610654578063a0aed99a14610672578063a9d75b2b14610690578063cf04327a146106ae576102bb565b80637ff9b5961461057c578063852cb9b81461059a578063858d8a9f146105b8578063897b0637146105d65780638da5cb5b146105f25780638de2d00414610610576102bb565b8063406db022116102265780636395a3ea116101df5780636395a3ea146104e0578063676c0d77146104fe5780636b5ce3ee1461051a578063715018a61461053857806373c45d031461054257806375ce8b7e14610560576102bb565b8063406db0221461043257806347d708e51461044e578063481c6a751461046a57806348d973af146104885780635cdfd08c146104a457806361d027b3146104c2576102bb565b80631befd829116102785780631befd8291461036e5780631cb364421461038c57806326682cc4146103aa5780632d4bbdef146103da5780633df10ef2146103f85780633e95e09114610414576102bb565b80630e857401146102c05780630ffbfda4146102f0578063127f3b611461030e57806313602d8e1461032a578063151d710a146103345780631930840f14610352575b600080fd5b6102da60048036038101906102d59190612f1f565b610830565b6040516102e7919061349a565b60405180910390f35b6102f8610f36565b604051610305919061349a565b60405180910390f35b61032860048036038101906103239190612f1f565b610f3c565b005b610332610fd6565b005b61033c6111ac565b604051610349919061349a565b60405180910390f35b61036c60048036038101906103679190612f1f565b6111b3565b005b610376611322565b604051610383919061349a565b60405180910390f35b610394611328565b6040516103a191906132a9565b60405180910390f35b6103c460048036038101906103bf9190612f71565b61133b565b6040516103d1919061349a565b60405180910390f35b6103e2611501565b6040516103ef919061349a565b60405180910390f35b610412600480360381019061040d9190612ecd565b611507565b005b61041c6115b4565b604051610429919061322e565b60405180910390f35b61044c60048036038101906104479190612f1f565b6115da565b005b61046860048036038101906104639190612f1f565b611674565b005b6104726117a6565b60405161047f919061322e565b60405180910390f35b6104a2600480360381019061049d9190612ea4565b6117cc565b005b6104ac6118fc565b6040516104b9919061349a565b60405180910390f35b6104ca611902565b6040516104d7919061322e565b60405180910390f35b6104e8611928565b6040516104f5919061349a565b60405180910390f35b61051860048036038101906105139190612f1f565b61192e565b005b610522611a0b565b60405161052f919061349a565b60405180910390f35b610540611a11565b005b61054a611a99565b604051610557919061349a565b60405180910390f35b61057a60048036038101906105759190612ea4565b611a9f565b005b610584611bcf565b604051610591919061349a565b60405180910390f35b6105a2611bd5565b6040516105af919061349a565b60405180910390f35b6105c0611bdb565b6040516105cd919061349a565b60405180910390f35b6105f060048036038101906105eb9190612f1f565b611be1565b005b6105fa611c7b565b604051610607919061322e565b60405180910390f35b610618611ca4565b005b610634600480360381019061062f9190612f1f565b611e7e565b005b61063e611f18565b60405161064b919061349a565b60405180910390f35b61065c611f1e565b604051610669919061349a565b60405180910390f35b61067a611f24565b604051610687919061349a565b60405180910390f35b610698611f2a565b6040516106a591906132c4565b60405180910390f35b6106c860048036038101906106c39190612f1f565b611f50565b005b6106d2611fea565b6040516106df919061349a565b60405180910390f35b61070260048036038101906106fd9190612ea4565b611ff0565b005b61070c612120565b604051610719919061349a565b60405180910390f35b61073c60048036038101906107379190612f71565b612128565b604051610749919061349a565b60405180910390f35b61075a6122d6565b005b61076461248a565b005b610780600480360381019061077b9190612ea4565b6126c7565b005b61078a6127f7565b604051610797919061349a565b60405180910390f35b6107ba60048036038101906107b59190612ea4565b6127fd565b005b6107c46128f5565b6040516107d1919061349a565b60405180910390f35b6107f460048036038101906107ef9190612f1f565b6128fb565b005b610810600480360381019061080b9190612f1f565b612a27565b005b61081a612ac1565b60405161082791906132df565b60405180910390f35b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b9906133da565b60405180910390fd5b6000821415610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd9061347a565b60405180910390fd5b6000600e541461094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610942906133ba565b60405180910390fd5b6000806000806000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016109d0919061322e565b60206040518083038186803b1580156109e857600080fd5b505afa1580156109fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a209190612f48565b90506000600254601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610aa4919061322e565b60206040518083038186803b158015610abc57600080fd5b505afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190612f48565b610afe9190613563565b9050600f54881015610cfb5787600f54610b1891906135bd565b9550600f5461271087610b2b9190613563565b610b359190613532565b93506001548410610b5057600f549650505050505050610f31565b610b5a8682612ae7565b94506000851115610ced57610c05601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025488610bbc9190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b00909392919063ffffffff16565b600a54620f424086610c179190613563565b610c219190613532565b9250601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401610ca2929190613280565b600060405180830381600087803b158015610cbc57600080fd5b505af1158015610cd0573d6000803e3d6000fd5b505050508486610ce091906135bd565b9650505050505050610f31565b859650505050505050610f31565b600f5488610d0991906135bd565b9550600a54620f424087610d1d9190613563565b610d279190613532565b9250610d338383612ae7565b92506000831115610e8a57620f4240600a5484610d509190613563565b610d5a9190613532565b9450610dd8601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025487610d909190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c399092919063ffffffff16565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401610e57929190613280565b600060405180830381600087803b158015610e7157600080fd5b505af1158015610e85573d6000803e3d6000fd5b505050505b60008587610e9891906135bd565b1115610f2657610f25601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002548789610ed391906135bd565b610edd9190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c399092919063ffffffff16565b5b600096505050505050505b919050565b60065481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906133da565b60405180910390fd5b8060068190555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d906133da565b60405180910390fd5b6000600854146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a29061339a565b60405180910390fd5b6000600954146111aa576000600954426110c591906135bd565b90506301e133806127106110d99190613563565b81600554601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612f48565b6111879190613563565b6111919190613563565b61119b9190613532565b60088190555042600981905550505b565b620f424081565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c9061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc9061335a565b60405180910390fd5b60008111611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f9061343a565b60405180910390fd5b80600b8190555050565b60095481565b601360149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c59061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114559061335a565b60405180910390fd5b6114688584612ae7565b9450620f4240600a548561147c9190613563565b6114869190613532565b93506114928483612ae7565b93506000612710600354876114a79190613563565b6114b19190613532565b866114bc91906135bd565b90506001600e5414156114e05784816114d591906135bd565b600f819055506114f3565b80856114ec91906135bd565b600f819055505b600f54915050949350505050565b600f5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e906133da565b60405180910390fd5b80601360146101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461166a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611661906133da565b60405180910390fd5b80600d8190555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb906133da565b60405180910390fd5b60008111611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173e9061347a565b60405180910390fd5b6117a333306002548461175a9190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b00909392919063ffffffff16565b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117d4612d6f565b73ffffffffffffffffffffffffffffffffffffffff166117f2611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af9061331a565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b5906133da565b60405180910390fd5b60008111611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061343a565b60405180910390fd5b80600a8190555050565b60045481565b611a19612d6f565b73ffffffffffffffffffffffffffffffffffffffff16611a37611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906133fa565b60405180910390fd5b611a976000612d77565b565b61271081565b611aa7612d6f565b73ffffffffffffffffffffffffffffffffffffffff16611ac5611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b12906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b829061331a565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60035481565b60025481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c68906133da565b60405180910390fd5b80600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b906133da565b60405180910390fd5b600060075414611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d709061339a565b60405180910390fd5b6000600b54600a541115611e7b57600b54600a54611d9791906135bd565b9050600a54600b81905550612710600a54611db29190613563565b60065482601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1e57600080fd5b505afa158015611e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e569190612f48565b611e609190613563565b611e6a9190613563565b611e749190613532565b6007819055505b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f05906133da565b60405180910390fd5b8060038190555050565b60055481565b600c5481565b60075481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd7906133da565b60405180910390fd5b8060058190555050565b60015481565b611ff8612d6f565b73ffffffffffffffffffffffffffffffffffffffff16612016611c7b565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612063906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d39061331a565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6301e1338081565b60008073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b29061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061335a565b60405180910390fd5b6122558584612ae7565b9450620f4240600a54856122699190613563565b6122739190613532565b935061227f8483612ae7565b93506000612710600354876122949190613563565b61229e9190613532565b866122a991906135bd565b90508481106122bf576001600e819055506122c8565b6000600e819055505b600e54915050949350505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d906133da565b60405180910390fd5b600060085460075461237891906134dc565b116123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af906132fa565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660085460075461242991906134dc565b6040518363ffffffff1660e01b8152600401612446929190613280565b600060405180830381600087803b15801561246057600080fd5b505af1158015612474573d6000803e3d6000fd5b5050505060006007819055506000600881905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612511906133da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a39061331a565b60405180910390fd5b6126c5601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161262d919061322e565b60206040518083038186803b15801561264557600080fd5b505afa158015612659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267d9190612f48565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c399092919063ffffffff16565b565b6126cf612d6f565b73ffffffffffffffffffffffffffffffffffffffff166126ed611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa9061331a565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612805612d6f565b73ffffffffffffffffffffffffffffffffffffffff16612823611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614612879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612870906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e09061333a565b60405180910390fd5b6128f281612d77565b50565b600b5481565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561298d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129849061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a149061335a565b60405180910390fd5b8060098190555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae906133da565b60405180910390fd5b8060048190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000818310612af65781612af8565b825b905092915050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612b3493929190613249565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612b829190613217565b6000604051808303816000865af19150503d8060008114612bbf576040519150601f19603f3d011682016040523d82523d6000602084013e612bc4565b606091505b5091509150818015612bf25750600081511480612bf1575080806020019051810190612bf09190612ef6565b5b5b612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c289061337a565b60405180910390fd5b505050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612c6b929190613280565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612cb99190613217565b6000604051808303816000865af19150503d8060008114612cf6576040519150601f19603f3d011682016040523d82523d6000602084013e612cfb565b606091505b5091509150818015612d295750600081511480612d28575080806020019051810190612d279190612ef6565b5b5b612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f9061341a565b60405180910390fd5b5050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081359050612e4a8161394d565b92915050565b600081359050612e5f81613964565b92915050565b600081519050612e7481613964565b92915050565b600081359050612e898161397b565b92915050565b600081519050612e9e8161397b565b92915050565b600060208284031215612eb657600080fd5b6000612ec484828501612e3b565b91505092915050565b600060208284031215612edf57600080fd5b6000612eed84828501612e50565b91505092915050565b600060208284031215612f0857600080fd5b6000612f1684828501612e65565b91505092915050565b600060208284031215612f3157600080fd5b6000612f3f84828501612e7a565b91505092915050565b600060208284031215612f5a57600080fd5b6000612f6884828501612e8f565b91505092915050565b60008060008060808587031215612f8757600080fd5b6000612f9587828801612e7a565b9450506020612fa687828801612e7a565b9350506040612fb787828801612e7a565b9250506060612fc887828801612e7a565b91505092959194509250565b612fdd816135f1565b82525050565b612fec81613603565b82525050565b6000612ffd826134b5565b61300781856134c0565b9350613017818560208601613681565b80840191505092915050565b61302c81613639565b82525050565b61303b8161365d565b82525050565b600061304e6017836134cb565b915061305982613712565b602082019050919050565b6000613071601a836134cb565b915061307c8261373b565b602082019050919050565b60006130946026836134cb565b915061309f82613764565b604082019050919050565b60006130b7601e836134cb565b91506130c2826137b3565b602082019050919050565b60006130da601e836134cb565b91506130e5826137dc565b602082019050919050565b60006130fd601d836134cb565b915061310882613805565b602082019050919050565b60006131206019836134cb565b915061312b8261382e565b602082019050919050565b60006131436019836134cb565b915061314e82613857565b602082019050919050565b60006131666020836134cb565b915061317182613880565b602082019050919050565b6000613189601a836134cb565b9150613194826138a9565b602082019050919050565b60006131ac6018836134cb565b91506131b7826138d2565b602082019050919050565b60006131cf601b836134cb565b91506131da826138fb565b602082019050919050565b60006131f26019836134cb565b91506131fd82613924565b602082019050919050565b6132118161362f565b82525050565b60006132238284612ff2565b915081905092915050565b60006020820190506132436000830184612fd4565b92915050565b600060608201905061325e6000830186612fd4565b61326b6020830185612fd4565b6132786040830184613208565b949350505050565b60006040820190506132956000830185612fd4565b6132a26020830184613208565b9392505050565b60006020820190506132be6000830184612fe3565b92915050565b60006020820190506132d96000830184613023565b92915050565b60006020820190506132f46000830184613032565b92915050565b6000602082019050818103600083015261331381613041565b9050919050565b6000602082019050818103600083015261333381613064565b9050919050565b6000602082019050818103600083015261335381613087565b9050919050565b60006020820190508181036000830152613373816130aa565b9050919050565b60006020820190508181036000830152613393816130cd565b9050919050565b600060208201905081810360008301526133b3816130f0565b9050919050565b600060208201905081810360008301526133d381613113565b9050919050565b600060208201905081810360008301526133f381613136565b9050919050565b6000602082019050818103600083015261341381613159565b9050919050565b600060208201905081810360008301526134338161317c565b9050919050565b600060208201905081810360008301526134538161319f565b9050919050565b60006020820190508181036000830152613473816131c2565b9050919050565b60006020820190508181036000830152613493816131e5565b9050919050565b60006020820190506134af6000830184613208565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006134e78261362f565b91506134f28361362f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613527576135266136b4565b5b828201905092915050565b600061353d8261362f565b91506135488361362f565b925082613558576135576136e3565b5b828204905092915050565b600061356e8261362f565b91506135798361362f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135b2576135b16136b4565b5b828202905092915050565b60006135c88261362f565b91506135d38361362f565b9250828210156135e6576135e56136b4565b5b828203905092915050565b60006135fc8261360f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006136448261364b565b9050919050565b60006136568261360f565b9050919050565b60006136688261366f565b9050919050565b600061367a8261360f565b9050919050565b60005b8381101561369f578082015181840152602081019050613684565b838111156136ae576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f466f726d6174696f6e2e46693a207a65726f2066656573000000000000000000600082015250565b7f466f726d6174696f6e2e46693a207a65726f2061646472657373000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f466f726d6174696f6e2e46693a20206e6f7420696e76657374656d656e740000600082015250565b7f5361666545524332303a205472616e7366657246726f6d206661696c65640000600082015250565b7f466f726d6174696f6e2e46693a2066656573206f6e2070656e64696e67000000600082015250565b7f466f726d6174696f6e2e46693a206e6f20736c69707061676500000000000000600082015250565b7f466f726d6174696f6e2e46693a206e6f74206d616e6167657200000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5361666545524332303a205472616e73666572206661696c6564000000000000600082015250565b7f466f726d6174696f6e2e46693a207a65726f2070726963650000000000000000600082015250565b7f466f726d6174696f6e2e46693a20207a65726f20616464726573730000000000600082015250565b7f466f726d6174696f6e2e46693a207a65726f20616d6f756e7400000000000000600082015250565b613956816135f1565b811461396157600080fd5b50565b61396d81613603565b811461397857600080fd5b50565b6139848161362f565b811461398f57600080fd5b5056fea2646970667358221220afca1dbb787c1e5386588f0f0f3dd4cc4a67b015c7120606ffdbd993ce75629a64736f6c634300080400330000000000000000000000007097a043083a83176ee7f9f5cc5b9503188eb6b0000000000000000000000000aec4b0457d8c3971030cff573074cc0b3275cd94000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000db5a09f432fb993542f5582600fdee195071cede
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c80637ff9b59611610182578063d03153aa116100e9578063f0f44260116100a2578063f9892d141161007c578063f9892d14146107bc578063fa2daa2e146107da578063fbeb2ff3146107f6578063fc0c546a14610812576102bb565b8063f0f4426014610766578063f1a503ef14610782578063f2fde38b146107a0576102bb565b8063d03153aa146106ca578063d0ebdbe7146106e8578063d99ab10e14610704578063e0a83dd314610722578063e542a13414610752578063ef9520331461075c576102bb565b80638e691b9a1161013b5780638e691b9a1461061a57806391a543b6146106365780639b2cb5d814610654578063a0aed99a14610672578063a9d75b2b14610690578063cf04327a146106ae576102bb565b80637ff9b5961461057c578063852cb9b81461059a578063858d8a9f146105b8578063897b0637146105d65780638da5cb5b146105f25780638de2d00414610610576102bb565b8063406db022116102265780636395a3ea116101df5780636395a3ea146104e0578063676c0d77146104fe5780636b5ce3ee1461051a578063715018a61461053857806373c45d031461054257806375ce8b7e14610560576102bb565b8063406db0221461043257806347d708e51461044e578063481c6a751461046a57806348d973af146104885780635cdfd08c146104a457806361d027b3146104c2576102bb565b80631befd829116102785780631befd8291461036e5780631cb364421461038c57806326682cc4146103aa5780632d4bbdef146103da5780633df10ef2146103f85780633e95e09114610414576102bb565b80630e857401146102c05780630ffbfda4146102f0578063127f3b611461030e57806313602d8e1461032a578063151d710a146103345780631930840f14610352575b600080fd5b6102da60048036038101906102d59190612f1f565b610830565b6040516102e7919061349a565b60405180910390f35b6102f8610f36565b604051610305919061349a565b60405180910390f35b61032860048036038101906103239190612f1f565b610f3c565b005b610332610fd6565b005b61033c6111ac565b604051610349919061349a565b60405180910390f35b61036c60048036038101906103679190612f1f565b6111b3565b005b610376611322565b604051610383919061349a565b60405180910390f35b610394611328565b6040516103a191906132a9565b60405180910390f35b6103c460048036038101906103bf9190612f71565b61133b565b6040516103d1919061349a565b60405180910390f35b6103e2611501565b6040516103ef919061349a565b60405180910390f35b610412600480360381019061040d9190612ecd565b611507565b005b61041c6115b4565b604051610429919061322e565b60405180910390f35b61044c60048036038101906104479190612f1f565b6115da565b005b61046860048036038101906104639190612f1f565b611674565b005b6104726117a6565b60405161047f919061322e565b60405180910390f35b6104a2600480360381019061049d9190612ea4565b6117cc565b005b6104ac6118fc565b6040516104b9919061349a565b60405180910390f35b6104ca611902565b6040516104d7919061322e565b60405180910390f35b6104e8611928565b6040516104f5919061349a565b60405180910390f35b61051860048036038101906105139190612f1f565b61192e565b005b610522611a0b565b60405161052f919061349a565b60405180910390f35b610540611a11565b005b61054a611a99565b604051610557919061349a565b60405180910390f35b61057a60048036038101906105759190612ea4565b611a9f565b005b610584611bcf565b604051610591919061349a565b60405180910390f35b6105a2611bd5565b6040516105af919061349a565b60405180910390f35b6105c0611bdb565b6040516105cd919061349a565b60405180910390f35b6105f060048036038101906105eb9190612f1f565b611be1565b005b6105fa611c7b565b604051610607919061322e565b60405180910390f35b610618611ca4565b005b610634600480360381019061062f9190612f1f565b611e7e565b005b61063e611f18565b60405161064b919061349a565b60405180910390f35b61065c611f1e565b604051610669919061349a565b60405180910390f35b61067a611f24565b604051610687919061349a565b60405180910390f35b610698611f2a565b6040516106a591906132c4565b60405180910390f35b6106c860048036038101906106c39190612f1f565b611f50565b005b6106d2611fea565b6040516106df919061349a565b60405180910390f35b61070260048036038101906106fd9190612ea4565b611ff0565b005b61070c612120565b604051610719919061349a565b60405180910390f35b61073c60048036038101906107379190612f71565b612128565b604051610749919061349a565b60405180910390f35b61075a6122d6565b005b61076461248a565b005b610780600480360381019061077b9190612ea4565b6126c7565b005b61078a6127f7565b604051610797919061349a565b60405180910390f35b6107ba60048036038101906107b59190612ea4565b6127fd565b005b6107c46128f5565b6040516107d1919061349a565b60405180910390f35b6107f460048036038101906107ef9190612f1f565b6128fb565b005b610810600480360381019061080b9190612f1f565b612a27565b005b61081a612ac1565b60405161082791906132df565b60405180910390f35b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b9906133da565b60405180910390fd5b6000821415610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd9061347a565b60405180910390fd5b6000600e541461094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610942906133ba565b60405180910390fd5b6000806000806000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016109d0919061322e565b60206040518083038186803b1580156109e857600080fd5b505afa1580156109fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a209190612f48565b90506000600254601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610aa4919061322e565b60206040518083038186803b158015610abc57600080fd5b505afa158015610ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af49190612f48565b610afe9190613563565b9050600f54881015610cfb5787600f54610b1891906135bd565b9550600f5461271087610b2b9190613563565b610b359190613532565b93506001548410610b5057600f549650505050505050610f31565b610b5a8682612ae7565b94506000851115610ced57610c05601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025488610bbc9190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b00909392919063ffffffff16565b600a54620f424086610c179190613563565b610c219190613532565b9250601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401610ca2929190613280565b600060405180830381600087803b158015610cbc57600080fd5b505af1158015610cd0573d6000803e3d6000fd5b505050508486610ce091906135bd565b9650505050505050610f31565b859650505050505050610f31565b600f5488610d0991906135bd565b9550600a54620f424087610d1d9190613563565b610d279190613532565b9250610d338383612ae7565b92506000831115610e8a57620f4240600a5484610d509190613563565b610d5a9190613532565b9450610dd8601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660025487610d909190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c399092919063ffffffff16565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401610e57929190613280565b600060405180830381600087803b158015610e7157600080fd5b505af1158015610e85573d6000803e3d6000fd5b505050505b60008587610e9891906135bd565b1115610f2657610f25601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002548789610ed391906135bd565b610edd9190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c399092919063ffffffff16565b5b600096505050505050505b919050565b60065481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906133da565b60405180910390fd5b8060068190555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d906133da565b60405180910390fd5b6000600854146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a29061339a565b60405180910390fd5b6000600954146111aa576000600954426110c591906135bd565b90506301e133806127106110d99190613563565b81600554601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561114557600080fd5b505afa158015611159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117d9190612f48565b6111879190613563565b6111919190613563565b61119b9190613532565b60088190555042600981905550505b565b620f424081565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c9061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc9061335a565b60405180910390fd5b60008111611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f9061343a565b60405180910390fd5b80600b8190555050565b60095481565b601360149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c59061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114559061335a565b60405180910390fd5b6114688584612ae7565b9450620f4240600a548561147c9190613563565b6114869190613532565b93506114928483612ae7565b93506000612710600354876114a79190613563565b6114b19190613532565b866114bc91906135bd565b90506001600e5414156114e05784816114d591906135bd565b600f819055506114f3565b80856114ec91906135bd565b600f819055505b600f54915050949350505050565b600f5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e906133da565b60405180910390fd5b80601360146101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461166a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611661906133da565b60405180910390fd5b80600d8190555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb906133da565b60405180910390fd5b60008111611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173e9061347a565b60405180910390fd5b6117a333306002548461175a9190613532565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b00909392919063ffffffff16565b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117d4612d6f565b73ffffffffffffffffffffffffffffffffffffffff166117f2611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af9061331a565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b5906133da565b60405180910390fd5b60008111611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061343a565b60405180910390fd5b80600a8190555050565b60045481565b611a19612d6f565b73ffffffffffffffffffffffffffffffffffffffff16611a37611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906133fa565b60405180910390fd5b611a976000612d77565b565b61271081565b611aa7612d6f565b73ffffffffffffffffffffffffffffffffffffffff16611ac5611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b12906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b829061331a565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60035481565b60025481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c68906133da565b60405180910390fd5b80600c8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b906133da565b60405180910390fd5b600060075414611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d709061339a565b60405180910390fd5b6000600b54600a541115611e7b57600b54600a54611d9791906135bd565b9050600a54600b81905550612710600a54611db29190613563565b60065482601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1e57600080fd5b505afa158015611e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e569190612f48565b611e609190613563565b611e6a9190613563565b611e749190613532565b6007819055505b50565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f05906133da565b60405180910390fd5b8060038190555050565b60055481565b600c5481565b60075481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd7906133da565b60405180910390fd5b8060058190555050565b60015481565b611ff8612d6f565b73ffffffffffffffffffffffffffffffffffffffff16612016611c7b565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612063906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d39061331a565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6301e1338081565b60008073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b29061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061335a565b60405180910390fd5b6122558584612ae7565b9450620f4240600a54856122699190613563565b6122739190613532565b935061227f8483612ae7565b93506000612710600354876122949190613563565b61229e9190613532565b866122a991906135bd565b90508481106122bf576001600e819055506122c8565b6000600e819055505b600e54915050949350505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d906133da565b60405180910390fd5b600060085460075461237891906134dc565b116123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af906132fa565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660085460075461242991906134dc565b6040518363ffffffff1660e01b8152600401612446929190613280565b600060405180830381600087803b15801561246057600080fd5b505af1158015612474573d6000803e3d6000fd5b5050505060006007819055506000600881905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612511906133da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a39061331a565b60405180910390fd5b6126c5601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161262d919061322e565b60206040518083038186803b15801561264557600080fd5b505afa158015612659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267d9190612f48565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c399092919063ffffffff16565b565b6126cf612d6f565b73ffffffffffffffffffffffffffffffffffffffff166126ed611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa9061331a565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612805612d6f565b73ffffffffffffffffffffffffffffffffffffffff16612823611c7b565b73ffffffffffffffffffffffffffffffffffffffff1614612879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612870906133fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e09061333a565b60405180910390fd5b6128f281612d77565b50565b600b5481565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561298d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129849061345a565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a149061335a565b60405180910390fd5b8060098190555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae906133da565b60405180910390fd5b8060048190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000818310612af65781612af8565b825b905092915050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401612b3493929190613249565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612b829190613217565b6000604051808303816000865af19150503d8060008114612bbf576040519150601f19603f3d011682016040523d82523d6000602084013e612bc4565b606091505b5091509150818015612bf25750600081511480612bf1575080806020019051810190612bf09190612ef6565b5b5b612c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c289061337a565b60405180910390fd5b505050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612c6b929190613280565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612cb99190613217565b6000604051808303816000865af19150503d8060008114612cf6576040519150601f19603f3d011682016040523d82523d6000602084013e612cfb565b606091505b5091509150818015612d295750600081511480612d28575080806020019051810190612d279190612ef6565b5b5b612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f9061341a565b60405180910390fd5b5050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081359050612e4a8161394d565b92915050565b600081359050612e5f81613964565b92915050565b600081519050612e7481613964565b92915050565b600081359050612e898161397b565b92915050565b600081519050612e9e8161397b565b92915050565b600060208284031215612eb657600080fd5b6000612ec484828501612e3b565b91505092915050565b600060208284031215612edf57600080fd5b6000612eed84828501612e50565b91505092915050565b600060208284031215612f0857600080fd5b6000612f1684828501612e65565b91505092915050565b600060208284031215612f3157600080fd5b6000612f3f84828501612e7a565b91505092915050565b600060208284031215612f5a57600080fd5b6000612f6884828501612e8f565b91505092915050565b60008060008060808587031215612f8757600080fd5b6000612f9587828801612e7a565b9450506020612fa687828801612e7a565b9350506040612fb787828801612e7a565b9250506060612fc887828801612e7a565b91505092959194509250565b612fdd816135f1565b82525050565b612fec81613603565b82525050565b6000612ffd826134b5565b61300781856134c0565b9350613017818560208601613681565b80840191505092915050565b61302c81613639565b82525050565b61303b8161365d565b82525050565b600061304e6017836134cb565b915061305982613712565b602082019050919050565b6000613071601a836134cb565b915061307c8261373b565b602082019050919050565b60006130946026836134cb565b915061309f82613764565b604082019050919050565b60006130b7601e836134cb565b91506130c2826137b3565b602082019050919050565b60006130da601e836134cb565b91506130e5826137dc565b602082019050919050565b60006130fd601d836134cb565b915061310882613805565b602082019050919050565b60006131206019836134cb565b915061312b8261382e565b602082019050919050565b60006131436019836134cb565b915061314e82613857565b602082019050919050565b60006131666020836134cb565b915061317182613880565b602082019050919050565b6000613189601a836134cb565b9150613194826138a9565b602082019050919050565b60006131ac6018836134cb565b91506131b7826138d2565b602082019050919050565b60006131cf601b836134cb565b91506131da826138fb565b602082019050919050565b60006131f26019836134cb565b91506131fd82613924565b602082019050919050565b6132118161362f565b82525050565b60006132238284612ff2565b915081905092915050565b60006020820190506132436000830184612fd4565b92915050565b600060608201905061325e6000830186612fd4565b61326b6020830185612fd4565b6132786040830184613208565b949350505050565b60006040820190506132956000830185612fd4565b6132a26020830184613208565b9392505050565b60006020820190506132be6000830184612fe3565b92915050565b60006020820190506132d96000830184613023565b92915050565b60006020820190506132f46000830184613032565b92915050565b6000602082019050818103600083015261331381613041565b9050919050565b6000602082019050818103600083015261333381613064565b9050919050565b6000602082019050818103600083015261335381613087565b9050919050565b60006020820190508181036000830152613373816130aa565b9050919050565b60006020820190508181036000830152613393816130cd565b9050919050565b600060208201905081810360008301526133b3816130f0565b9050919050565b600060208201905081810360008301526133d381613113565b9050919050565b600060208201905081810360008301526133f381613136565b9050919050565b6000602082019050818103600083015261341381613159565b9050919050565b600060208201905081810360008301526134338161317c565b9050919050565b600060208201905081810360008301526134538161319f565b9050919050565b60006020820190508181036000830152613473816131c2565b9050919050565b60006020820190508181036000830152613493816131e5565b9050919050565b60006020820190506134af6000830184613208565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006134e78261362f565b91506134f28361362f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613527576135266136b4565b5b828201905092915050565b600061353d8261362f565b91506135488361362f565b925082613558576135576136e3565b5b828204905092915050565b600061356e8261362f565b91506135798361362f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135b2576135b16136b4565b5b828202905092915050565b60006135c88261362f565b91506135d38361362f565b9250828210156135e6576135e56136b4565b5b828203905092915050565b60006135fc8261360f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006136448261364b565b9050919050565b60006136568261360f565b9050919050565b60006136688261366f565b9050919050565b600061367a8261360f565b9050919050565b60005b8381101561369f578082015181840152602081019050613684565b838111156136ae576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f466f726d6174696f6e2e46693a207a65726f2066656573000000000000000000600082015250565b7f466f726d6174696f6e2e46693a207a65726f2061646472657373000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f466f726d6174696f6e2e46693a20206e6f7420696e76657374656d656e740000600082015250565b7f5361666545524332303a205472616e7366657246726f6d206661696c65640000600082015250565b7f466f726d6174696f6e2e46693a2066656573206f6e2070656e64696e67000000600082015250565b7f466f726d6174696f6e2e46693a206e6f20736c69707061676500000000000000600082015250565b7f466f726d6174696f6e2e46693a206e6f74206d616e6167657200000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5361666545524332303a205472616e73666572206661696c6564000000000000600082015250565b7f466f726d6174696f6e2e46693a207a65726f2070726963650000000000000000600082015250565b7f466f726d6174696f6e2e46693a20207a65726f20616464726573730000000000600082015250565b7f466f726d6174696f6e2e46693a207a65726f20616d6f756e7400000000000000600082015250565b613956816135f1565b811461396157600080fd5b50565b61396d81613603565b811461397857600080fd5b50565b6139848161362f565b811461398f57600080fd5b5056fea2646970667358221220afca1dbb787c1e5386588f0f0f3dd4cc4a67b015c7120606ffdbd993ce75629a64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007097a043083a83176ee7f9f5cc5b9503188eb6b0000000000000000000000000aec4b0457d8c3971030cff573074cc0b3275cd94000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000db5a09f432fb993542f5582600fdee195071cede
-----Decoded View---------------
Arg [0] : _manager (address): 0x7097a043083a83176ee7f9F5cC5b9503188eb6b0
Arg [1] : _treasury (address): 0xAec4b0457D8C3971030Cff573074cc0b3275cd94
Arg [2] : _stableToken (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [3] : _token (address): 0xDb5A09f432fB993542F5582600fDee195071cEdE
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007097a043083a83176ee7f9f5cc5b9503188eb6b0
Arg [1] : 000000000000000000000000aec4b0457d8c3971030cff573074cc0b3275cd94
Arg [2] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [3] : 000000000000000000000000db5a09f432fb993542f5582600fdee195071cede
Deployed Bytecode Sourcemap
44968:196:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41895:2146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33104:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36620:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38009:476;;;:::i;:::-;;32758:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37058:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33232:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33662:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40580:953;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33499:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36027:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33597:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36127:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44176:246;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33538:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35804:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33192:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33567:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33416:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36851:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33012:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22586:103;;;:::i;:::-;;32700:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35571:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33285:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32969:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32922:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36739:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21935:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37468:468;;;:::i;:::-;;36268:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33059:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33373:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33151:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33714:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36502:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32877:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35358:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32816:53;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39300:861;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38540:261;;;:::i;:::-;;44530:258;;;:::i;:::-;;35140:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33464:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22844:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33327:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37276:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36379:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33689:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41895:2146;41994:7;34980;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42043:1:::1;42022:17;:22;;42014:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42112:1;42095:13;;:18;42087:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;42162:15;42192:20:::0;42225:17:::1;42256:21:::0;42291:29:::1;42323:5;;;;;;;;;;;:15;;;42339:8;;;;;;;;;;;42323:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42291:57;;42358:30;42425:19;;42391:11;;;;;;;;;;;:21;;;42413:8;;;;;;;;;;;42391:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;42358:86;;42486:14;;42467:17;:33;42463:1550;;;42543:17;42526:14;;:34;;;;:::i;:::-;42516:44;;42626:14;;32747:3;42591:7;:30;;;;:::i;:::-;42590:50;;;;:::i;:::-;42578:62;;42672:17;;42659:9;:30;42655:653;;42717:14;;42710:21;;;;;;;;;;42655:653;42801:42;42811:7;42820:22;42801:8;:42::i;:::-;42786:57;;42883:1;42867:12;:17;42862:429;;;42908:85;42937:8;;;;;;;;;;;42947:11;;;;;;;;;;;42973:19;;42960:12;:32;;;;:::i;:::-;42908:11;;;;;;;;;;;:28;;;;:85;;;;;;:::i;:::-;43070:10;;32806:3;43032:12;:36;;;;:::i;:::-;43031:49;;;;:::i;:::-;43016:64;;43103:5;;;;;;;;;;;:10;;;43114:8;;;;;;;;;;;43124:12;43103:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43177:12;43167:7;:22;;;;:::i;:::-;43160:29;;;;;;;;;;42862:429;43263:7;43256:14;;;;;;;;;;42463:1550;43393:14;;43373:17;:34;;;;:::i;:::-;43363:44;;43472:10;;32806:3;43439:7;:31;;;;:::i;:::-;43438:44;;;;:::i;:::-;43423:59;;43510:45;43519:12;43533:21;43510:8;:45::i;:::-;43495:60;;43586:1;43572:12;:15;43568:258;;;32806:3;43637:10;;43622:12;:25;;;;:::i;:::-;43621:49;;;;:::i;:::-;43606:64;;43687:68;43712:8;;;;;;;;;;;43735:19;;43722:12;:32;;;;:::i;:::-;43687:11;;;;;;;;;;;:24;;;;:68;;;;;:::i;:::-;43775:5;;;;;;;;;;;:10;;;43787:8;;;;;;;;;;;43797:12;43775:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43568:258;43870:1;43854:12;43844:7;:22;;;;:::i;:::-;43843:28;43839:163;;;43904:81;43929:9;;;;;;;;;;;43965:19;;43951:12;43941:7;:22;;;;:::i;:::-;43940:44;;;;:::i;:::-;43904:11;;;;;;;;;;;:24;;;;:81;;;;;:::i;:::-;43839:163;44030:1;44023:8;;;;;;;;35038:1;41895:2146:::0;;;:::o;33104:40::-;;;;:::o;36620:113::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36720:5:::1;36698:18;:27;;;;36620:113:::0;:::o;38009:476::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38102:1:::1;38084:14;;:19;38076:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38173:1;38152:18;;:22;38148:330;;38189:18;38253;;38234:15;:37;;;;:::i;:::-;38221:50;;32861:8;32747:3;38374:40;;;;:::i;:::-;38346:10;38326:17;;38304:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;;:::i;:::-;:52;;;;:::i;:::-;38303:112;;;;:::i;:::-;38286:14;:129;;;;38450:15;38429:18;:36;;;;38148:330;;38009:476::o:0;32758:51::-;32806:3;32758:51;:::o;37058:210::-;34734:1;34711:25;;:11;;;;;;;;;;;:25;;;;34703:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34826:11;;;;;;;;;;;34812:25;;:10;:25;;;34804:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;37172:1:::1;37163:6;:10;37140:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37254:6;37236:14;:24;;;;37058:210:::0;:::o;33232:46::-;;;;:::o;33662:20::-;;;;;;;;;;;;;:::o;40580:953::-;40784:7;34734:1;34711:25;;:11;;;;;;;;;;;:25;;;;34703:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34826:11;;;;;;;;;;;34812:25;;:10;:25;;;34804:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;40826:60:::1;40837:19;40868:17;40826:8;:60::i;:::-;40804:82;;32806:3;40949:10;;40924:22;:35;;;;:::i;:::-;40923:61;;;;:::i;:::-;40897:87;;41019:63;41028:22;41061:20;41019:8;:63::i;:::-;40995:87;;41094:37;32747:3;41190:14;;41168:19;:36;;;;:::i;:::-;41166:61;;;;:::i;:::-;41134:19;:93;;;;:::i;:::-;41094:133;;41269:1;41252:13;;:18;41248:246;;;41337:22;41306:28;:53;;;;:::i;:::-;41288:14;:71;;;;41248:246;;;41444:28;41419:22;:53;;;;:::i;:::-;41402:14;:70;;;;41248:246;41511:14;;41504:21;;;40580:953:::0;;;;;;:::o;33499:32::-;;;;:::o;36027:90::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36102:7:::1;36092:8;;:17;;;;;;;;;;;;;;;;;;36027:90:::0;:::o;33597:26::-;;;;;;;;;;;;;:::o;36127:132::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36234:17:::1;36215:16;:36;;;;36127:132:::0;:::o;44176:246::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44279:1:::1;44269:7;:11;44260:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44322:92;44351:10;44371:4;44394:19;;44386:7;:27;;;;:::i;:::-;44322:11;;;;;;;;;;;:28;;;;:92;;;;;;:::i;:::-;44176:246:::0;:::o;33538:22::-;;;;;;;;;;;;;:::o;35804:214::-;22166:12;:10;:12::i;:::-;22155:23;;:7;:5;:7::i;:::-;:23;;;22147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35919:1:::1;35898:23;;:10;:23;;;;35876:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36000:10;35988:9;;:22;;;;;;;;;;;;;;;;;;35804:214:::0;:::o;33192:33::-;;;;:::o;33567:23::-;;;;;;;;;;;;;:::o;33416:40::-;;;;:::o;36851:199::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36957:1:::1;36948:6;:10;36925:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37036:6;37023:10;:19;;;;36851:199:::0;:::o;33012:39::-;;;;:::o;22586:103::-;22166:12;:10;:12::i;:::-;22155:23;;:7;:5;:7::i;:::-;:23;;;22147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22651:30:::1;22678:1;22651:18;:30::i;:::-;22586:103::o:0;32700:50::-;32747:3;32700:50;:::o;35571:224::-;22166:12;:10;:12::i;:::-;22155:23;;:7;:5;:7::i;:::-;:23;;;22147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:1:::1;35669:25;;:12;:25;;;;35647:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35775:12;35761:11;;:26;;;;;;;;;;;;;;;;;;35571:224:::0;:::o;33285:35::-;;;;:::o;32969:34::-;;;;:::o;32922:39::-;;;;:::o;36739:104::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36824:10:::1;36813:9;:21;;;;36739:104:::0;:::o;21935:87::-;21981:7;22008:6;;;;;;;;;;;22001:13;;21935:87;:::o;37468:468::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37563:1:::1;37544:15;;:20;37536:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37611:19;37662:14;;37649:10;;:27;37645:284;;;37720:14;;37707:10;;:27;;;;:::i;:::-;37693:41;;37766:10;;37749:14;:27;;;;32747:3;37882:10;;:33;;;;:::i;:::-;37859:18;;37845:11;37810:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;:67;;;;:::i;:::-;37809:107;;;;:::i;:::-;37791:15;:125;;;;37645:284;35038:1;37468:468::o:0;36268:103::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36358:5:::1;36342:14;:21;;;;36268:103:::0;:::o;33059:38::-;;;;:::o;33373:36::-;;;;:::o;33151:34::-;;;;:::o;33714:25::-;;;;;;;;;;;;;:::o;36502:110::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36599:5:::1;36579:17;:25;;;;36502:110:::0;:::o;32877:38::-;;;;:::o;35358:205::-;22166:12;:10;:12::i;:::-;22155:23;;:7;:5;:7::i;:::-;:23;;;22147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35468:1:::1;35448:22;;:8;:22;;;;35426:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35547:8;35537:7;;:18;;;;;;;;;;;;;;;;;;35358:205:::0;:::o;32816:53::-;32861:8;32816:53;:::o;39300:861::-;39504:7;34734:1;34711:25;;:11;;;;;;;;;;;:25;;;;34703:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34826:11;;;;;;;;;;;34812:25;;:10;:25;;;34804:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;39546:60:::1;39557:19;39588:17;39546:8;:60::i;:::-;39524:82;;32806:3;39669:10;;39644:22;:35;;;;:::i;:::-;39643:61;;;;:::i;:::-;39617:87;;39739:63;39748:22;39781:20;39739:8;:63::i;:::-;39715:87;;39813:37;32747:3;39909:14;;39887:19;:36;;;;:::i;:::-;39885:61;;;;:::i;:::-;39853:19;:93;;;;:::i;:::-;39813:133;;39995:22;39963:28;:54;39957:166;;40050:1;40034:13;:17;;;;39957:166;;;40110:1;40094:13;:17;;;;39957:166;40140:13;;40133:20;;;39300:861:::0;;;;;;:::o;38540:261::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38638:1:::1;38620:14;;38602:15;;:32;;;;:::i;:::-;38601:38;38592:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38680:5;;;;;;;;;;;:10;;;38691:8;;;;;;;;;;;38719:14;;38701:15;;:32;;;;:::i;:::-;38680:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38763:1;38745:15;:19;;;;38792:1;38775:14;:18;;;;38540:261::o:0;44530:258::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44637:1:::1;44614:25;;:11;;;;;;;;;;;:25;;;;44606:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44705:75;44730:11;;;;;;;;;;;44743;;;;;;;;;;;:21;;;44773:4;44743:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44705:11;;;;;;;;;;;:24;;;;:75;;;;;:::i;:::-;44530:258::o:0;35140:210::-;22166:12;:10;:12::i;:::-;22155:23;;:7;:5;:7::i;:::-;:23;;;22147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35253:1:::1;35232:23;;:9;:23;;;;35210:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;35333:9;35322:8;;:20;;;;;;;;;;;;;;;;;;35140:210:::0;:::o;33464:28::-;;;;:::o;22844:201::-;22166:12;:10;:12::i;:::-;22155:23;;:7;:5;:7::i;:::-;:23;;;22147:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22953:1:::1;22933:22;;:8;:22;;;;22925:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23009:28;23028:8;23009:18;:28::i;:::-;22844:201:::0;:::o;33327:39::-;;;;:::o;37276:118::-;34734:1;34711:25;;:11;;;;;;;;;;;:25;;;;34703:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;34826:11;;;;;;;;;;;34812:25;;:10;:25;;;34804:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;37381:5:::1;37360:18;:26;;;;37276:118:::0;:::o;36379:115::-;34980:7;;;;;;;;;;;34966:21;;:10;:21;;;34958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36481:5:::1;36459:20;:27;;;;36379:115:::0;:::o;33689:18::-;;;;;;;;;;;;;:::o;484:106::-;542:7;573:1;569;:5;:13;;581:1;569:13;;;577:1;569:13;562:20;;484:106;;;;:::o;6607:434::-;6753:12;6767:17;6796:5;6788:19;;6845:10;6857:4;6863:2;6867:6;6822:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:97;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6752:133;;;;6918:7;:57;;;;;6945:1;6930:4;:11;:16;:44;;;;6961:4;6950:24;;;;;;;;;;;;:::i;:::-;6930:44;6918:57;6896:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;6607:434;;;;;;:::o;6202:397::-;6321:12;6335:17;6364:5;6356:19;;6413:10;6425:2;6429:6;6390:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6356:91;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6320:127;;;;6480:7;:57;;;;;6507:1;6492:4;:11;:16;:44;;;;6523:4;6512:24;;;;;;;;;;;;:::i;:::-;6492:44;6480:57;6458:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;6202:397;;;;;:::o;7727:98::-;7780:7;7807:10;7800:17;;7727:98;:::o;23205:191::-;23279:16;23298:6;;;;;;;;;;;23279:25;;23324:8;23315:6;;:17;;;;;;;;;;;;;;;;;;23379:8;23348:40;;23369:8;23348:40;;;;;;;;;;;;23205:191;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;345:5;376:6;370:13;361:22;;392:30;416:5;392:30;:::i;:::-;351:77;;;;:::o;434:139::-;480:5;518:6;505:20;496:29;;534:33;561:5;534:33;:::i;:::-;486:87;;;;:::o;579:143::-;636:5;667:6;661:13;652:22;;683:33;710:5;683:33;:::i;:::-;642:80;;;;:::o;728:262::-;787:6;836:2;824:9;815:7;811:23;807:32;804:2;;;852:1;849;842:12;804:2;895:1;920:53;965:7;956:6;945:9;941:22;920:53;:::i;:::-;910:63;;866:117;794:196;;;;:::o;996:256::-;1052:6;1101:2;1089:9;1080:7;1076:23;1072:32;1069:2;;;1117:1;1114;1107:12;1069:2;1160:1;1185:50;1227:7;1218:6;1207:9;1203:22;1185:50;:::i;:::-;1175:60;;1131:114;1059:193;;;;:::o;1258:278::-;1325:6;1374:2;1362:9;1353:7;1349:23;1345:32;1342:2;;;1390:1;1387;1380:12;1342:2;1433:1;1458:61;1511:7;1502:6;1491:9;1487:22;1458:61;:::i;:::-;1448:71;;1404:125;1332:204;;;;:::o;1542:262::-;1601:6;1650:2;1638:9;1629:7;1625:23;1621:32;1618:2;;;1666:1;1663;1656:12;1618:2;1709:1;1734:53;1779:7;1770:6;1759:9;1755:22;1734:53;:::i;:::-;1724:63;;1680:117;1608:196;;;;:::o;1810:284::-;1880:6;1929:2;1917:9;1908:7;1904:23;1900:32;1897:2;;;1945:1;1942;1935:12;1897:2;1988:1;2013:64;2069:7;2060:6;2049:9;2045:22;2013:64;:::i;:::-;2003:74;;1959:128;1887:207;;;;:::o;2100:698::-;2186:6;2194;2202;2210;2259:3;2247:9;2238:7;2234:23;2230:33;2227:2;;;2276:1;2273;2266:12;2227:2;2319:1;2344:53;2389:7;2380:6;2369:9;2365:22;2344:53;:::i;:::-;2334:63;;2290:117;2446:2;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2417:118;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2702:2;2728:53;2773:7;2764:6;2753:9;2749:22;2728:53;:::i;:::-;2718:63;;2673:118;2217:581;;;;;;;:::o;2804:118::-;2891:24;2909:5;2891:24;:::i;:::-;2886:3;2879:37;2869:53;;:::o;2928:109::-;3009:21;3024:5;3009:21;:::i;:::-;3004:3;2997:34;2987:50;;:::o;3043:373::-;3147:3;3175:38;3207:5;3175:38;:::i;:::-;3229:88;3310:6;3305:3;3229:88;:::i;:::-;3222:95;;3326:52;3371:6;3366:3;3359:4;3352:5;3348:16;3326:52;:::i;:::-;3403:6;3398:3;3394:16;3387:23;;3151:265;;;;;:::o;3422:159::-;3523:51;3568:5;3523:51;:::i;:::-;3518:3;3511:64;3501:80;;:::o;3587:159::-;3688:51;3733:5;3688:51;:::i;:::-;3683:3;3676:64;3666:80;;:::o;3752:366::-;3894:3;3915:67;3979:2;3974:3;3915:67;:::i;:::-;3908:74;;3991:93;4080:3;3991:93;:::i;:::-;4109:2;4104:3;4100:12;4093:19;;3898:220;;;:::o;4124:366::-;4266:3;4287:67;4351:2;4346:3;4287:67;:::i;:::-;4280:74;;4363:93;4452:3;4363:93;:::i;:::-;4481:2;4476:3;4472:12;4465:19;;4270:220;;;:::o;4496:366::-;4638:3;4659:67;4723:2;4718:3;4659:67;:::i;:::-;4652:74;;4735:93;4824:3;4735:93;:::i;:::-;4853:2;4848:3;4844:12;4837:19;;4642:220;;;:::o;4868:366::-;5010:3;5031:67;5095:2;5090:3;5031:67;:::i;:::-;5024:74;;5107:93;5196:3;5107:93;:::i;:::-;5225:2;5220:3;5216:12;5209:19;;5014:220;;;:::o;5240:366::-;5382:3;5403:67;5467:2;5462:3;5403:67;:::i;:::-;5396:74;;5479:93;5568:3;5479:93;:::i;:::-;5597:2;5592:3;5588:12;5581:19;;5386:220;;;:::o;5612:366::-;5754:3;5775:67;5839:2;5834:3;5775:67;:::i;:::-;5768:74;;5851:93;5940:3;5851:93;:::i;:::-;5969:2;5964:3;5960:12;5953:19;;5758:220;;;:::o;5984:366::-;6126:3;6147:67;6211:2;6206:3;6147:67;:::i;:::-;6140:74;;6223:93;6312:3;6223:93;:::i;:::-;6341:2;6336:3;6332:12;6325:19;;6130:220;;;:::o;6356:366::-;6498:3;6519:67;6583:2;6578:3;6519:67;:::i;:::-;6512:74;;6595:93;6684:3;6595:93;:::i;:::-;6713:2;6708:3;6704:12;6697:19;;6502:220;;;:::o;6728:366::-;6870:3;6891:67;6955:2;6950:3;6891:67;:::i;:::-;6884:74;;6967:93;7056:3;6967:93;:::i;:::-;7085:2;7080:3;7076:12;7069:19;;6874:220;;;:::o;7100:366::-;7242:3;7263:67;7327:2;7322:3;7263:67;:::i;:::-;7256:74;;7339:93;7428:3;7339:93;:::i;:::-;7457:2;7452:3;7448:12;7441:19;;7246:220;;;:::o;7472:366::-;7614:3;7635:67;7699:2;7694:3;7635:67;:::i;:::-;7628:74;;7711:93;7800:3;7711:93;:::i;:::-;7829:2;7824:3;7820:12;7813:19;;7618:220;;;:::o;7844:366::-;7986:3;8007:67;8071:2;8066:3;8007:67;:::i;:::-;8000:74;;8083:93;8172:3;8083:93;:::i;:::-;8201:2;8196:3;8192:12;8185:19;;7990:220;;;:::o;8216:366::-;8358:3;8379:67;8443:2;8438:3;8379:67;:::i;:::-;8372:74;;8455:93;8544:3;8455:93;:::i;:::-;8573:2;8568:3;8564:12;8557:19;;8362:220;;;:::o;8588:118::-;8675:24;8693:5;8675:24;:::i;:::-;8670:3;8663:37;8653:53;;:::o;8712:271::-;8842:3;8864:93;8953:3;8944:6;8864:93;:::i;:::-;8857:100;;8974:3;8967:10;;8846:137;;;;:::o;8989:222::-;9082:4;9120:2;9109:9;9105:18;9097:26;;9133:71;9201:1;9190:9;9186:17;9177:6;9133:71;:::i;:::-;9087:124;;;;:::o;9217:442::-;9366:4;9404:2;9393:9;9389:18;9381:26;;9417:71;9485:1;9474:9;9470:17;9461:6;9417:71;:::i;:::-;9498:72;9566:2;9555:9;9551:18;9542:6;9498:72;:::i;:::-;9580;9648:2;9637:9;9633:18;9624:6;9580:72;:::i;:::-;9371:288;;;;;;:::o;9665:332::-;9786:4;9824:2;9813:9;9809:18;9801:26;;9837:71;9905:1;9894:9;9890:17;9881:6;9837:71;:::i;:::-;9918:72;9986:2;9975:9;9971:18;9962:6;9918:72;:::i;:::-;9791:206;;;;;:::o;10003:210::-;10090:4;10128:2;10117:9;10113:18;10105:26;;10141:65;10203:1;10192:9;10188:17;10179:6;10141:65;:::i;:::-;10095:118;;;;:::o;10219:250::-;10326:4;10364:2;10353:9;10349:18;10341:26;;10377:85;10459:1;10448:9;10444:17;10435:6;10377:85;:::i;:::-;10331:138;;;;:::o;10475:250::-;10582:4;10620:2;10609:9;10605:18;10597:26;;10633:85;10715:1;10704:9;10700:17;10691:6;10633:85;:::i;:::-;10587:138;;;;:::o;10731:419::-;10897:4;10935:2;10924:9;10920:18;10912:26;;10984:9;10978:4;10974:20;10970:1;10959:9;10955:17;10948:47;11012:131;11138:4;11012:131;:::i;:::-;11004:139;;10902:248;;;:::o;11156:419::-;11322:4;11360:2;11349:9;11345:18;11337:26;;11409:9;11403:4;11399:20;11395:1;11384:9;11380:17;11373:47;11437:131;11563:4;11437:131;:::i;:::-;11429:139;;11327:248;;;:::o;11581:419::-;11747:4;11785:2;11774:9;11770:18;11762:26;;11834:9;11828:4;11824:20;11820:1;11809:9;11805:17;11798:47;11862:131;11988:4;11862:131;:::i;:::-;11854:139;;11752:248;;;:::o;12006:419::-;12172:4;12210:2;12199:9;12195:18;12187:26;;12259:9;12253:4;12249:20;12245:1;12234:9;12230:17;12223:47;12287:131;12413:4;12287:131;:::i;:::-;12279:139;;12177:248;;;:::o;12431:419::-;12597:4;12635:2;12624:9;12620:18;12612:26;;12684:9;12678:4;12674:20;12670:1;12659:9;12655:17;12648:47;12712:131;12838:4;12712:131;:::i;:::-;12704:139;;12602:248;;;:::o;12856:419::-;13022:4;13060:2;13049:9;13045:18;13037:26;;13109:9;13103:4;13099:20;13095:1;13084:9;13080:17;13073:47;13137:131;13263:4;13137:131;:::i;:::-;13129:139;;13027:248;;;:::o;13281:419::-;13447:4;13485:2;13474:9;13470:18;13462:26;;13534:9;13528:4;13524:20;13520:1;13509:9;13505:17;13498:47;13562:131;13688:4;13562:131;:::i;:::-;13554:139;;13452:248;;;:::o;13706:419::-;13872:4;13910:2;13899:9;13895:18;13887:26;;13959:9;13953:4;13949:20;13945:1;13934:9;13930:17;13923:47;13987:131;14113:4;13987:131;:::i;:::-;13979:139;;13877:248;;;:::o;14131:419::-;14297:4;14335:2;14324:9;14320:18;14312:26;;14384:9;14378:4;14374:20;14370:1;14359:9;14355:17;14348:47;14412:131;14538:4;14412:131;:::i;:::-;14404:139;;14302:248;;;:::o;14556:419::-;14722:4;14760:2;14749:9;14745:18;14737:26;;14809:9;14803:4;14799:20;14795:1;14784:9;14780:17;14773:47;14837:131;14963:4;14837:131;:::i;:::-;14829:139;;14727:248;;;:::o;14981:419::-;15147:4;15185:2;15174:9;15170:18;15162:26;;15234:9;15228:4;15224:20;15220:1;15209:9;15205:17;15198:47;15262:131;15388:4;15262:131;:::i;:::-;15254:139;;15152:248;;;:::o;15406:419::-;15572:4;15610:2;15599:9;15595:18;15587:26;;15659:9;15653:4;15649:20;15645:1;15634:9;15630:17;15623:47;15687:131;15813:4;15687:131;:::i;:::-;15679:139;;15577:248;;;:::o;15831:419::-;15997:4;16035:2;16024:9;16020:18;16012:26;;16084:9;16078:4;16074:20;16070:1;16059:9;16055:17;16048:47;16112:131;16238:4;16112:131;:::i;:::-;16104:139;;16002:248;;;:::o;16256:222::-;16349:4;16387:2;16376:9;16372:18;16364:26;;16400:71;16468:1;16457:9;16453:17;16444:6;16400:71;:::i;:::-;16354:124;;;;:::o;16484:98::-;16535:6;16569:5;16563:12;16553:22;;16542:40;;;:::o;16588:147::-;16689:11;16726:3;16711:18;;16701:34;;;;:::o;16741:169::-;16825:11;16859:6;16854:3;16847:19;16899:4;16894:3;16890:14;16875:29;;16837:73;;;;:::o;16916:305::-;16956:3;16975:20;16993:1;16975:20;:::i;:::-;16970:25;;17009:20;17027:1;17009:20;:::i;:::-;17004:25;;17163:1;17095:66;17091:74;17088:1;17085:81;17082:2;;;17169:18;;:::i;:::-;17082:2;17213:1;17210;17206:9;17199:16;;16960:261;;;;:::o;17227:185::-;17267:1;17284:20;17302:1;17284:20;:::i;:::-;17279:25;;17318:20;17336:1;17318:20;:::i;:::-;17313:25;;17357:1;17347:2;;17362:18;;:::i;:::-;17347:2;17404:1;17401;17397:9;17392:14;;17269:143;;;;:::o;17418:348::-;17458:7;17481:20;17499:1;17481:20;:::i;:::-;17476:25;;17515:20;17533:1;17515:20;:::i;:::-;17510:25;;17703:1;17635:66;17631:74;17628:1;17625:81;17620:1;17613:9;17606:17;17602:105;17599:2;;;17710:18;;:::i;:::-;17599:2;17758:1;17755;17751:9;17740:20;;17466:300;;;;:::o;17772:191::-;17812:4;17832:20;17850:1;17832:20;:::i;:::-;17827:25;;17866:20;17884:1;17866:20;:::i;:::-;17861:25;;17905:1;17902;17899:8;17896:2;;;17910:18;;:::i;:::-;17896:2;17955:1;17952;17948:9;17940:17;;17817:146;;;;:::o;17969:96::-;18006:7;18035:24;18053:5;18035:24;:::i;:::-;18024:35;;18014:51;;;:::o;18071:90::-;18105:7;18148:5;18141:13;18134:21;18123:32;;18113:48;;;:::o;18167:126::-;18204:7;18244:42;18237:5;18233:54;18222:65;;18212:81;;;:::o;18299:77::-;18336:7;18365:5;18354:16;;18344:32;;;:::o;18382:154::-;18446:9;18479:51;18524:5;18479:51;:::i;:::-;18466:64;;18456:80;;;:::o;18542:127::-;18606:9;18639:24;18657:5;18639:24;:::i;:::-;18626:37;;18616:53;;;:::o;18675:154::-;18739:9;18772:51;18817:5;18772:51;:::i;:::-;18759:64;;18749:80;;;:::o;18835:127::-;18899:9;18932:24;18950:5;18932:24;:::i;:::-;18919:37;;18909:53;;;:::o;18968:307::-;19036:1;19046:113;19060:6;19057:1;19054:13;19046:113;;;19145:1;19140:3;19136:11;19130:18;19126:1;19121:3;19117:11;19110:39;19082:2;19079:1;19075:10;19070:15;;19046:113;;;19177:6;19174:1;19171:13;19168:2;;;19257:1;19248:6;19243:3;19239:16;19232:27;19168:2;19017:258;;;;:::o;19281:180::-;19329:77;19326:1;19319:88;19426:4;19423:1;19416:15;19450:4;19447:1;19440:15;19467:180;19515:77;19512:1;19505:88;19612:4;19609:1;19602:15;19636:4;19633:1;19626:15;19653:173;19793:25;19789:1;19781:6;19777:14;19770:49;19759:67;:::o;19832:176::-;19972:28;19968:1;19960:6;19956:14;19949:52;19938:70;:::o;20014:225::-;20154:34;20150:1;20142:6;20138:14;20131:58;20223:8;20218:2;20210:6;20206:15;20199:33;20120:119;:::o;20245:180::-;20385:32;20381:1;20373:6;20369:14;20362:56;20351:74;:::o;20431:180::-;20571:32;20567:1;20559:6;20555:14;20548:56;20537:74;:::o;20617:179::-;20757:31;20753:1;20745:6;20741:14;20734:55;20723:73;:::o;20802:175::-;20942:27;20938:1;20930:6;20926:14;20919:51;20908:69;:::o;20983:175::-;21123:27;21119:1;21111:6;21107:14;21100:51;21089:69;:::o;21164:182::-;21304:34;21300:1;21292:6;21288:14;21281:58;21270:76;:::o;21352:176::-;21492:28;21488:1;21480:6;21476:14;21469:52;21458:70;:::o;21534:174::-;21674:26;21670:1;21662:6;21658:14;21651:50;21640:68;:::o;21714:177::-;21854:29;21850:1;21842:6;21838:14;21831:53;21820:71;:::o;21897:175::-;22037:27;22033:1;22025:6;22021:14;22014:51;22003:69;:::o;22078:122::-;22151:24;22169:5;22151:24;:::i;:::-;22144:5;22141:35;22131:2;;22190:1;22187;22180:12;22131:2;22121:79;:::o;22206:116::-;22276:21;22291:5;22276:21;:::i;:::-;22269:5;22266:32;22256:2;;22312:1;22309;22302:12;22256:2;22246:76;:::o;22328:122::-;22401:24;22419:5;22401:24;:::i;:::-;22394:5;22391:35;22381:2;;22440:1;22437;22430:12;22381:2;22371:79;:::o
Swarm Source
ipfs://afca1dbb787c1e5386588f0f0f3dd4cc4a67b015c7120606ffdbd993ce75629a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.