Source Code
Latest 25 from a total of 5,701 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Auto Compound | 208845281 | 635 days ago | IN | 0 ETH | 0.0000024 | ||||
| Deposit | 203631338 | 650 days ago | IN | 0 ETH | 0.00002999 | ||||
| Harvest | 203631069 | 650 days ago | IN | 0 ETH | 0.00003036 | ||||
| Deposit | 203630948 | 650 days ago | IN | 0 ETH | 0.00003014 | ||||
| Harvest | 203630423 | 650 days ago | IN | 0 ETH | 0.00002995 | ||||
| Harvest | 203630370 | 650 days ago | IN | 0 ETH | 0.00003028 | ||||
| Harvest | 202860139 | 653 days ago | IN | 0 ETH | 0.00002999 | ||||
| Harvest | 202859939 | 653 days ago | IN | 0 ETH | 0.00002988 | ||||
| Harvest | 202859843 | 653 days ago | IN | 0 ETH | 0.00003021 | ||||
| Deposit | 202850676 | 653 days ago | IN | 0 ETH | 0.00002972 | ||||
| Withdraw | 202849786 | 653 days ago | IN | 0 ETH | 0.00002975 | ||||
| Withdraw | 202849439 | 653 days ago | IN | 0 ETH | 0.0000301 | ||||
| Withdraw | 202832246 | 653 days ago | IN | 0 ETH | 0.00003015 | ||||
| Deposit | 202831869 | 653 days ago | IN | 0 ETH | 0.0000306 | ||||
| Deposit | 202831131 | 653 days ago | IN | 0 ETH | 0.00003027 | ||||
| Withdraw | 202828329 | 653 days ago | IN | 0 ETH | 0.00002972 | ||||
| Withdraw | 202828280 | 653 days ago | IN | 0 ETH | 0.00002966 | ||||
| Withdraw | 202828238 | 653 days ago | IN | 0 ETH | 0.00002972 | ||||
| Withdraw | 202826822 | 653 days ago | IN | 0 ETH | 0.00002954 | ||||
| Deposit | 202826331 | 653 days ago | IN | 0 ETH | 0.00002977 | ||||
| Deposit | 202826140 | 653 days ago | IN | 0 ETH | 0.0000302 | ||||
| Deposit | 202825700 | 653 days ago | IN | 0 ETH | 0.00002945 | ||||
| Harvest | 202822910 | 653 days ago | IN | 0 ETH | 0.00002991 | ||||
| Deposit | 202821258 | 653 days ago | IN | 0 ETH | 0.00002973 | ||||
| Deposit | 202821187 | 653 days ago | IN | 0 ETH | 0.0000299 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DBVaults
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2023-07-17
*/
// SPDX-License-Identifier: AGPL-3.0
pragma solidity =0.8.19;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
library SafeMath {
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface IERC20 {
function totalSupply() external view returns (uint);
function balanceOf(address account) external view returns (uint);
function transfer(address recipient, uint amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint amount) external returns (bool);
function mint(address _to, uint256 _amount) external returns (bool);
function transferFrom(address sender, address recipient, uint amount) external returns (bool);
function decimals() external view returns (uint8);
}
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
contract ERC721Holder is IERC721Receiver {
function onERC721Received(
address,
address,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC721Received.selector;
}
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function approve(address to, uint256 tokenId) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function setApprovalForAll(address operator, bool _approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
interface IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
function toString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
string private _name;
string private _symbol;
mapping(uint256 => address) private _owners;
mapping(address => uint256) private _balances;
mapping(uint256 => address) private _tokenApprovals;
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
function _baseURI() internal view virtual returns (string memory) {
return "";
}
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
interface RewardsPool {
function mint(uint256 amount, IERC20 token, address recipient) external;
}
interface Farms {
struct UserInfo {
uint256 amount;
uint256 rewardDebt;
uint256 totalIn;
uint256 totalOut;
uint256 totalRewards;
}
struct PoolInfo {
string name;
IERC20 lpToken;
bool isLp;
uint256 allocPoint;
uint256 lastTimestamp;
uint256 accPerShare;
ERC721[] boosters;
string[] boostersMetaData;
uint256[] boostersPerc;
}
function getUser(uint _pid, address _account) external view returns(UserInfo memory);
function getPool(uint _pid) external view returns(PoolInfo memory);
function getTotalPools() external view returns (uint);
}
interface Vault {
struct UserInfo {
uint256 amount;
uint256 rewardDebt;
uint256 rewards;
uint256 lastStaked;
}
function getUser(address _account) external view returns(UserInfo memory);
function pendingRewards(address _account) external view returns (uint256, uint256, uint256);
function getDebt() external view returns (uint256);
function getAccPerShare() external view returns (uint256);
function getPeriodLastReset(address _token) external view returns (uint256);
function getPeriodTracking(address _token) external view returns (uint256);
function getAllTimeTracking(address _token) external view returns (uint256);
function deposit(uint256 _amount, address _account) external;
function withdraw(uint256 _amount, address _account) external;
function emergencyWithdraw(address _account) external;
function harvest(address _account) external;
function autoCompound() external;
function resetPeriodTracking(address _token) external;
}
contract DBVaults is Ownable {
using SafeMath for uint256;
uint256 internal lastCompounded = 0;
Farms internal farms = Farms(0xf2f1565a3801742C42286E2C6717460dFB9aE9CD);
RewardsPool internal rewardsPool = RewardsPool(0xb6B72F2a5FF537C0F0B21580B2BD644325411094);
address internal router = 0x565C093907E5D8148e5964A6cae76780140c3004;
address internal teamWallet = 0xc1e351b1156b55a611b77e2bF3B60DED44db28b3;
address internal rewardWallet = 0xb6B72F2a5FF537C0F0B21580B2BD644325411094;
event Deposit(address indexed account, uint256 indexed pid, uint256 amount);
event Withdraw(address indexed account, uint256 indexed pid, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 indexed pid);
event Harvest(address indexed user, uint256 indexed pid);
event AddAdmin(address indexed user);
event RemoveAdmin(address indexed user);
mapping(uint => address) internal vaults;
mapping (address => bool) internal Admins;
address[] internal AdminList;
modifier isAdmin() {
bool isAnAdmin = false;
if (owner() == msg.sender) { isAnAdmin = true; }
if (Admins[msg.sender]) { isAnAdmin = true; }
require(isAnAdmin == true, "Vaults-isAdmin: caller is not an admin");
_;
}
/* ---------- ReadFunctions ---------- */
function getPool(uint256 _pid) public view returns (Farms.PoolInfo memory) {
Farms.PoolInfo memory pool = farms.getPool(_pid);
if(vaults[_pid] == address(0)) { pool.isLp = false; }
return pool;
}
function getUser(uint _pid, address _account) public view returns(Vault.UserInfo memory) {
return Vault(vaults[_pid]).getUser(_account);
}
function getTvl(uint _pid) public view returns (uint256) {
return farms.getUser(_pid, vaults[_pid]).amount;
}
function getLastCompounded() public view returns (uint256) {
return lastCompounded;
}
function getDebt(uint _pid) public view returns (uint256) {
return Vault(vaults[_pid]).getDebt();
}
function getVault(uint _pid) public view returns (address) {
return vaults[_pid];
}
function getAccPerShare(uint _pid) public view returns (uint256) {
return Vault(vaults[_pid]).getAccPerShare();
}
function getRouter() public view returns (address) {
return router;
}
function getTeamWallet() public view returns (address) {
return teamWallet;
}
function getRewardWallet() public view returns (address) {
return rewardWallet;
}
function getPeriodLastReset(address _token) public view returns (uint256) {
uint256 amount = 0;
for (uint256 pid = 0; pid < farms.getTotalPools(); pid++) {
if (vaults[pid] != address(0)) {
amount = amount.add(Vault(vaults[pid]).getPeriodLastReset(_token));
}
}
return amount;
}
function getPeriodTracking(address _token) public view returns (uint256) {
uint256 amount = 0;
for (uint256 pid = 0; pid < farms.getTotalPools(); pid++) {
if (vaults[pid] != address(0)) {
amount = amount.add(Vault(vaults[pid]).getPeriodTracking(_token));
}
}
return amount;
}
function getAllTimeTracking(address _token) public view returns (uint256) {
uint256 amount = 0;
for (uint256 pid = 0; pid < farms.getTotalPools(); pid++) {
if (vaults[pid] != address(0)) {
amount = amount.add(Vault(vaults[pid]).getAllTimeTracking(_token));
}
}
return amount;
}
function admin(address _account) public view returns (bool) {
return Admins[_account];
}
function admins() public view returns (address[] memory) {
return AdminList;
}
/* ---------- AdminFunctions ---------- */
function addAdmin(address _account) isAdmin public {
require(msg.sender != _account, "Vaults-Admin: cannot edit own permissions");
require(!Admins[_account], "Vaults-Admin: already admin");
Admins[_account] = true;
AdminList.push(_account);
emit AddAdmin(_account);
}
function removeAdmin(address _account) isAdmin public {
require(msg.sender != _account, "Vaults-Admin: cannot edit own permissions");
require(Admins[_account], "Vaults-Admin: not an admin");
Admins[_account] = false;
for (uint256 i = 0; i < AdminList.length; i++) {
if (AdminList[i] == _account) {
AdminList[i] = AdminList[AdminList.length - 1];
AdminList.pop();
break;
}
}
emit RemoveAdmin(_account);
}
function addVault(uint256 _pid, address _vault) isAdmin public {
require(vaults[_pid] == address(0), "Vaults-Admin: vault already exists");
vaults[_pid] = _vault;
}
function depositOnBehalf(uint256 _pid, uint256 _amount, address _account) isAdmin public {
_deposit(_pid, _amount, _account, msg.sender);
}
function withdrawOnBehalf(uint256 _pid, uint256 _amount, address _account) isAdmin public {
_withdraw(_pid, _amount, _account);
}
function emergencyWithdrawOnBehalf(uint256 _pid, address _account) isAdmin public {
_emergencyWithdraw(_pid, _account);
}
function harvestOnBehalf(uint256 _pid, address _account) isAdmin public {
_harvest(_pid, _account);
}
function mintRewards(uint256 _pid, uint256 _amount, IERC20 _token, address _recipient) public {
require(vaults[_pid] == msg.sender, "Vaults-Mint: not auth");
rewardsPool.mint(_amount, _token, _recipient);
}
function resetPeriodTracking(address _token) isAdmin public {
for (uint256 pid = 0; pid < farms.getTotalPools(); pid++) {
if (vaults[pid] != address(0)) {
Vault(vaults[pid]).resetPeriodTracking(_token);
}
}
}
function updateRouter(address _newRouter) isAdmin public {
router = _newRouter;
}
function updateRewardsPool(RewardsPool _newRewardsPool) isAdmin public {
rewardsPool = _newRewardsPool;
}
function updateTeamWallet(address _newTeamWallet) isAdmin public {
teamWallet = _newTeamWallet;
}
function updateRewardWallet(address _newRewardWallet) isAdmin public {
rewardWallet = _newRewardWallet;
}
/* ---------- StakingFunctions ---------- */
function deposit(uint256 _pid, uint256 _amount) public {
_deposit(_pid, _amount, msg.sender, msg.sender);
}
function withdraw(uint256 _pid, uint256 _amount) public {
_withdraw(_pid, _amount, msg.sender);
}
function emergencyWithdraw(uint256 _pid) public {
_emergencyWithdraw(_pid, msg.sender);
}
function harvest(uint256 _pid) public {
_harvest(_pid, msg.sender);
}
function autoCompound() public {
for (uint256 pid = 0; pid < farms.getTotalPools(); pid++) {
if (vaults[pid] != address(0)) {
Vault(vaults[pid]).autoCompound();
}
}
lastCompounded = block.timestamp;
}
function pendingRewards(uint256 _pid, address _account) public view returns (uint256, uint256, uint256) {
return Vault(vaults[_pid]).pendingRewards(_account);
}
/* ---------- InternalFunctions ---------- */
function _deposit(uint256 _pid, uint256 _amount, address _account, address _payee) internal {
autoCompound();
Farms.PoolInfo memory pool = farms.getPool(_pid);
require(_amount > 0, "Vaults-Deposit: amount must be larger than 0");
require(vaults[_pid] != address(0), "Vaults-Deposit: pool not allowed");
IERC20 lpToken = IERC20(pool.lpToken);
require(lpToken.balanceOf(_payee) >= _amount, "Vaults-Deposit: balance to low");
require(lpToken.allowance(_payee, address(this)) >= _amount, "Vaults-Deposit: amount not approved");
lpToken.transferFrom(_payee, address(this), _amount);
lpToken.approve(vaults[_pid], _amount);
Vault(vaults[_pid]).deposit(_amount, _account);
emit Deposit(_account, _pid, _amount);
}
function _withdraw(uint256 _pid, uint256 _amount, address _account) internal {
autoCompound();
Vault(vaults[_pid]).withdraw(_amount, _account);
emit Withdraw(_account, _pid, _amount);
}
function _emergencyWithdraw(uint256 _pid, address _account) internal {
Vault(vaults[_pid]).emergencyWithdraw(_account);
emit EmergencyWithdraw(_account, _pid);
}
function _harvest(uint256 _pid, address _account) internal {
autoCompound();
Vault(vaults[_pid]).harvest(_account);
emit Harvest(_account, _pid);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"AddAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RemoveAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_vault","type":"address"}],"name":"addVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"admin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoCompound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"depositOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"emergencyWithdrawOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getAccPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getAllTimeTracking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastCompounded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPeriodLastReset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPeriodTracking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPool","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"bool","name":"isLp","type":"bool"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"},{"internalType":"uint256","name":"accPerShare","type":"uint256"},{"internalType":"contract ERC721[]","name":"boosters","type":"address[]"},{"internalType":"string[]","name":"boostersMetaData","type":"string[]"},{"internalType":"uint256[]","name":"boostersPerc","type":"uint256[]"}],"internalType":"struct Farms.PoolInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getTvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"getUser","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"lastStaked","type":"uint256"}],"internalType":"struct Vault.UserInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"harvestOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"resetPeriodTracking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRewardWallet","type":"address"}],"name":"updateRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract RewardsPool","name":"_newRewardsPool","type":"address"}],"name":"updateRewardsPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTeamWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"withdrawOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526000600155600280546001600160a01b031990811673f2f1565a3801742c42286e2c6717460dfb9ae9cd1790915560038054821673b6b72f2a5ff537c0f0b21580b2bd64432541109490811790915560048054831673565c093907e5d8148e5964a6cae76780140c300417905560058054831673c1e351b1156b55a611b77e2bf3b60ded44db28b3179055600680549092161790553480156100a557600080fd5b506100af336100b4565b610104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612a91806101136000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c8063821c057611610130578063c648f83f116100b8578063d67dff011161007c578063d67dff011461052a578063ddc632621461053b578063e0f560101461054e578063e2bbb15814610561578063f2fde38b1461057457600080fd5b8063c648f83f146104bb578063c851cc32146104c3578063c9dd1f3c146104d6578063cc600f91146104e9578063d18df53c146104fc57600080fd5b8063a5de3619116100ff578063a5de36191461045c578063aefbced814610471578063b0f479a114610484578063b9e280e714610495578063c0288846146104a857600080fd5b8063821c0576146104075780638a765f721461040f5780638da5cb5b146104225780639403b6341461043357600080fd5b80635312ea8e116101b3578063704802751161018257806370480275146103b3578063715018a6146103c6578063762e16ac146103ce5780637cb332bb146103e15780637f76bf82146103f457600080fd5b80635312ea8e1461033e57806363a846f81461035157806363bee3691461038d5780636653a340146103a057600080fd5b80631785f53c116101fa5780631785f53c146102ac578063257664a4146102bf57806336b787a414610305578063441a3e70146103185780634747fb5a1461032b57600080fd5b8063026549b51461022c578063026944f814610252578063068bcd8d146102675780630759a35414610287575b600080fd5b61023f61023a366004612139565b610587565b6040519081526020015b60405180910390f35b610265610260366004612167565b610612565b005b61027a610275366004612139565b61071f565b60405161024991906122ad565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610249565b6102656102ba366004612376565b610818565b6102d26102cd366004612167565b610a6c565b60405161024991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b610265610313366004612393565b610b19565b6102656103263660046123dd565b610beb565b61023f610339366004612376565b610bfa565b61026561034c366004612139565b610d3b565b61037d61035f366004612376565b6001600160a01b031660009081526008602052604090205460ff1690565b6040519015158152602001610249565b61026561039b3660046123ff565b610d48565b6102656103ae366004612376565b610dbf565b6102656103c1366004612376565b610e47565b610265610fca565b6102656103dc3660046123ff565b611030565b6102656103ef366004612376565b6110a0565b61023f610402366004612376565b611128565b61026561121e565b61023f61041d366004612139565b61133a565b6000546001600160a01b0316610294565b610294610441366004612139565b6000908152600760205260409020546001600160a01b031690565b6104646113b0565b6040516102499190612438565b61026561047f366004612167565b611412565b6004546001600160a01b0316610294565b61023f6104a3366004612376565b611486565b6102656104b6366004612167565b61157c565b60015461023f565b6102656104d1366004612376565b6115eb565b61023f6104e4366004612139565b611673565b6102656104f7366004612376565b6116c5565b61050f61050a366004612167565b61174d565b60408051938452602084019290925290820152606001610249565b6006546001600160a01b0316610294565b610265610549366004612139565b6117d7565b61026561055c366004612376565b6117e1565b61026561056f3660046123dd565b611963565b610265610582366004612376565b61196f565b60025460008281526007602052604080822054905163095d992960e21b8152600481018590526001600160a01b0391821660248201529192169063257664a49060440160a060405180830381865afa1580156105e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060b91906124f6565b5192915050565b6000336106276000546001600160a01b031690565b6001600160a01b031603610639575060015b3360009081526008602052604090205460ff1615610655575060015b6001811515146106805760405162461bcd60e51b815260040161067790612566565b60405180910390fd5b6000838152600760205260409020546001600160a01b0316156106f05760405162461bcd60e51b815260206004820152602260248201527f5661756c74732d41646d696e3a207661756c7420616c72656164792065786973604482015261747360f01b6064820152608401610677565b5060009182526007602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6107796040518061012001604052806060815260200160006001600160a01b031681526020016000151581526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b60025460405163068bcd8d60e01b8152600481018490526000916001600160a01b03169063068bcd8d90602401600060405180830381865afa1580156107c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107eb91908101906127ab565b6000848152600760205260409020549091506001600160a01b031661081257600060408201525b92915050565b60003361082d6000546001600160a01b031690565b6001600160a01b03160361083f575060015b3360009081526008602052604090205460ff161561085b575060015b60018115151461087d5760405162461bcd60e51b815260040161067790612566565b6001600160a01b03821633036108a55760405162461bcd60e51b8152600401610677906128c9565b6001600160a01b03821660009081526008602052604090205460ff1661090d5760405162461bcd60e51b815260206004820152601a60248201527f5661756c74732d41646d696e3a206e6f7420616e2061646d696e0000000000006044820152606401610677565b6001600160a01b0382166000908152600860205260408120805460ff191690555b600954811015610a3357826001600160a01b03166009828154811061095557610955612912565b6000918252602090912001546001600160a01b031603610a21576009805461097f9060019061293e565b8154811061098f5761098f612912565b600091825260209091200154600980546001600160a01b0390921691839081106109bb576109bb612912565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806109fa576109fa612951565b600082815260209020810160001990810180546001600160a01b0319169055019055610a33565b80610a2b81612967565b91505061092e565b506040516001600160a01b038316907f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90600090a25050565b610a976040518060800160405280600081526020016000815260200160008152602001600081525090565b60008381526007602052604090819020549051636f77926b60e01b81526001600160a01b03848116600483015290911690636f77926b90602401608060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190612980565b9392505050565b6000848152600760205260409020546001600160a01b03163314610b775760405162461bcd60e51b81526020600482015260156024820152740acc2ead8e8e65a9ad2dce87440dcdee840c2eae8d605b1b6044820152606401610677565b60035460405163da39b3e760e01b8152600481018590526001600160a01b03848116602483015283811660448301529091169063da39b3e790606401600060405180830381600087803b158015610bcd57600080fd5b505af1158015610be1573d6000803e3d6000fd5b5050505050505050565b610bf6828233611a37565b5050565b600080805b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7691906129e6565b811015610d34576000818152600760205260409020546001600160a01b031615610d2257600081815260076020526040908190205490516323a3fdad60e11b81526001600160a01b038681166004830152610d1f921690634747fb5a906024015b602060405180830381865afa158015610cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1891906129e6565b8390611af9565b91505b80610d2c81612967565b915050610bff565b5092915050565b610d458133611b05565b50565b600033610d5d6000546001600160a01b031690565b6001600160a01b031603610d6f575060015b3360009081526008602052604090205460ff1615610d8b575060015b600181151514610dad5760405162461bcd60e51b815260040161067790612566565b610db984848433611bab565b50505050565b600033610dd46000546001600160a01b031690565b6001600160a01b031603610de6575060015b3360009081526008602052604090205460ff1615610e02575060015b600181151514610e245760405162461bcd60e51b815260040161067790612566565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b600033610e5c6000546001600160a01b031690565b6001600160a01b031603610e6e575060015b3360009081526008602052604090205460ff1615610e8a575060015b600181151514610eac5760405162461bcd60e51b815260040161067790612566565b6001600160a01b0382163303610ed45760405162461bcd60e51b8152600401610677906128c9565b6001600160a01b03821660009081526008602052604090205460ff1615610f3d5760405162461bcd60e51b815260206004820152601b60248201527f5661756c74732d41646d696e3a20616c72656164792061646d696e00000000006044820152606401610677565b6001600160a01b038216600081815260086020526040808220805460ff1916600190811790915560098054918201815583527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191684179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba9190a25050565b6000546001600160a01b031633146110245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610677565b61102e600061203b565b565b6000336110456000546001600160a01b031690565b6001600160a01b031603611057575060015b3360009081526008602052604090205460ff1615611073575060015b6001811515146110955760405162461bcd60e51b815260040161067790612566565b610db9848484611a37565b6000336110b56000546001600160a01b031690565b6001600160a01b0316036110c7575060015b3360009081526008602052604090205460ff16156110e3575060015b6001811515146111055760405162461bcd60e51b815260040161067790612566565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a491906129e6565b811015610d34576000818152600760205260409020546001600160a01b03161561120c5760008181526007602052604090819020549051633fbb5fc160e11b81526001600160a01b038681166004830152611209921690637f76bf8290602401610cd7565b91505b8061121681612967565b91505061112d565b60005b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129891906129e6565b811015611333576000818152600760205260409020546001600160a01b0316156113215760008181526007602052604080822054815163410e02bb60e11b815291516001600160a01b039091169263821c0576926004808201939182900301818387803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050505b8061132b81612967565b915050611221565b5042600155565b6000818152600760209081526040808320548151634be6152d60e11b815291516001600160a01b03909116926397cc2a5a92600480820193918290030181865afa15801561138c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081291906129e6565b6060600980548060200260200160405190810160405280929190818152602001828054801561140857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113ea575b5050505050905090565b6000336114276000546001600160a01b031690565b6001600160a01b031603611439575060015b3360009081526008602052604090205460ff1615611455575060015b6001811515146114775760405162461bcd60e51b815260040161067790612566565b6114818383611b05565b505050565b600080805b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150291906129e6565b811015610d34576000818152600760205260409020546001600160a01b03161561156a576000818152600760205260409081902054905163b9e280e760e01b81526001600160a01b03868116600483015261156792169063b9e280e790602401610cd7565b91505b8061157481612967565b91505061148b565b6000336115916000546001600160a01b031690565b6001600160a01b0316036115a3575060015b3360009081526008602052604090205460ff16156115bf575060015b6001811515146115e15760405162461bcd60e51b815260040161067790612566565b611481838361208b565b6000336116006000546001600160a01b031690565b6001600160a01b031603611612575060015b3360009081526008602052604090205460ff161561162e575060015b6001811515146116505760405162461bcd60e51b815260040161067790612566565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526007602090815260408083205481516314a6bf0f60e01b815291516001600160a01b03909116926314a6bf0f92600480820193918290030181865afa15801561138c573d6000803e3d6000fd5b6000336116da6000546001600160a01b031690565b6001600160a01b0316036116ec575060015b3360009081526008602052604090205460ff1615611708575060015b60018115151461172a5760405162461bcd60e51b815260040161067790612566565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600760205260408082205490516318ebd13160e11b81526001600160a01b038481166004830152839283929116906331d7a26290602401606060405180830381865afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca91906129ff565b9250925092509250925092565b610d45813361208b565b6000336117f66000546001600160a01b031690565b6001600160a01b031603611808575060015b3360009081526008602052604090205460ff1615611824575060015b6001811515146118465760405162461bcd60e51b815260040161067790612566565b60005b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c091906129e6565b811015611481576000818152600760205260409020546001600160a01b0316156119515760008181526007602052604090819020549051630e0f560160e41b81526001600160a01b0385811660048301529091169063e0f5601090602401600060405180830381600087803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b505050505b8061195b81612967565b915050611849565b610bf682823333611bab565b6000546001600160a01b031633146119c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610677565b6001600160a01b038116611a2e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610677565b610d458161203b565b611a3f61121e565b60008381526007602052604090819020549051627b8a6760e11b8152600481018490526001600160a01b0383811660248301529091169062f714ce90604401600060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b5050505082816001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56884604051611aec91815260200190565b60405180910390a3505050565b6000610b128284612a2d565b60008281526007602052604090819020549051631bfc726f60e21b81526001600160a01b03838116600483015290911690636ff1c9bc90602401600060405180830381600087803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b50506040518492506001600160a01b03841691507f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd969590600090a35050565b611bb361121e565b60025460405163068bcd8d60e01b8152600481018690526000916001600160a01b03169063068bcd8d90602401600060405180830381865afa158015611bfd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c2591908101906127ab565b905060008411611c8c5760405162461bcd60e51b815260206004820152602c60248201527f5661756c74732d4465706f7369743a20616d6f756e74206d757374206265206c60448201526b06172676572207468616e20360a41b6064820152608401610677565b6000858152600760205260409020546001600160a01b0316611cf05760405162461bcd60e51b815260206004820181905260248201527f5661756c74732d4465706f7369743a20706f6f6c206e6f7420616c6c6f7765646044820152606401610677565b60208101516040516370a0823160e01b81526001600160a01b0384811660048301528691908316906370a0823190602401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6291906129e6565b1015611db05760405162461bcd60e51b815260206004820152601e60248201527f5661756c74732d4465706f7369743a2062616c616e636520746f206c6f7700006044820152606401610677565b604051636eb1769f60e11b81526001600160a01b03848116600483015230602483015286919083169063dd62ed3e90604401602060405180830381865afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2391906129e6565b1015611e7d5760405162461bcd60e51b815260206004820152602360248201527f5661756c74732d4465706f7369743a20616d6f756e74206e6f7420617070726f6044820152621d995960ea1b6064820152608401610677565b6040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018790528216906323b872dd906064016020604051808303816000875af1158015611ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef69190612a40565b506000868152600760205260409081902054905163095ea7b360e01b81526001600160a01b039182166004820152602481018790529082169063095ea7b3906044016020604051808303816000875af1158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190612a40565b5060008681526007602052604090819020549051636e553f6560e01b8152600481018790526001600160a01b03868116602483015290911690636e553f6590604401600060405180830381600087803b158015611fd757600080fd5b505af1158015611feb573d6000803e3d6000fd5b5050505085846001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158760405161202b91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61209361121e565b6000828152600760205260409081902054905163072e008f60e11b81526001600160a01b03838116600483015290911690630e5c011e90602401600060405180830381600087803b1580156120e757600080fd5b505af11580156120fb573d6000803e3d6000fd5b50506040518492506001600160a01b03841691507fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba90600090a35050565b60006020828403121561214b57600080fd5b5035919050565b6001600160a01b0381168114610d4557600080fd5b6000806040838503121561217a57600080fd5b82359150602083013561218c81612152565b809150509250929050565b60005b838110156121b257818101518382015260200161219a565b50506000910152565b600081518084526121d3816020860160208601612197565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156122205781516001600160a01b0316875295820195908201906001016121fb565b509495945050505050565b6000815180845260208085019450848260051b860182860160005b8581101561227057838303895261225e8383516121bb565b98850198925090840190600101612246565b5090979650505050505050565b600081518084526020808501945080840160005b8381101561222057815187529582019590820190600101612291565b60208152600082516101208060208501526122cc6101408501836121bb565b915060208501516122e860408601826001600160a01b03169052565b50604085015180151560608601525060608501516080850152608085015160a085015260a085015160c085015260c0850151601f19808685030160e087015261233184836121e7565b935060e08701519150610100818786030181880152612350858461222b565b90880151878203909201848801529350905061236c838261227d565b9695505050505050565b60006020828403121561238857600080fd5b8135610b1281612152565b600080600080608085870312156123a957600080fd5b843593506020850135925060408501356123c281612152565b915060608501356123d281612152565b939692955090935050565b600080604083850312156123f057600080fd5b50508035926020909101359150565b60008060006060848603121561241457600080fd5b8335925060208401359150604084013561242d81612152565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156124795783516001600160a01b031683529284019291840191600101612454565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156124bf576124bf612485565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156124ee576124ee612485565b604052919050565b600060a0828403121561250857600080fd5b60405160a0810181811067ffffffffffffffff8211171561252b5761252b612485565b806040525082518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b60208082526026908201527f5661756c74732d697341646d696e3a2063616c6c6572206973206e6f7420616e6040820152651030b236b4b760d11b606082015260800190565b600082601f8301126125bd57600080fd5b815167ffffffffffffffff8111156125d7576125d7612485565b6125ea601f8201601f19166020016124c5565b8181528460208386010111156125ff57600080fd5b612610826020830160208701612197565b949350505050565b805161262381612152565b919050565b8051801515811461262357600080fd5b600067ffffffffffffffff82111561265257612652612485565b5060051b60200190565b600082601f83011261266d57600080fd5b8151602061268261267d83612638565b6124c5565b82815260059290921b840181019181810190868411156126a157600080fd5b8286015b848110156126c55780516126b881612152565b83529183019183016126a5565b509695505050505050565b600082601f8301126126e157600080fd5b815160206126f161267d83612638565b82815260059290921b8401810191818101908684111561271057600080fd5b8286015b848110156126c557805167ffffffffffffffff8111156127345760008081fd5b6127428986838b01016125ac565b845250918301918301612714565b600082601f83011261276157600080fd5b8151602061277161267d83612638565b82815260059290921b8401810191818101908684111561279057600080fd5b8286015b848110156126c55780518352918301918301612794565b6000602082840312156127bd57600080fd5b815167ffffffffffffffff808211156127d557600080fd5b9083019061012082860312156127ea57600080fd5b6127f261249b565b82518281111561280157600080fd5b61280d878286016125ac565b82525061281c60208401612618565b602082015261282d60408401612628565b6040820152606083015160608201526080830151608082015260a083015160a082015260c08301518281111561286257600080fd5b61286e8782860161265c565b60c08301525060e08301518281111561288657600080fd5b612892878286016126d0565b60e08301525061010080840151838111156128ac57600080fd5b6128b888828701612750565b918301919091525095945050505050565b60208082526029908201527f5661756c74732d41646d696e3a2063616e6e6f742065646974206f776e207065604082015268726d697373696f6e7360b81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561081257610812612928565b634e487b7160e01b600052603160045260246000fd5b60006001820161297957612979612928565b5060010190565b60006080828403121561299257600080fd5b6040516080810181811067ffffffffffffffff821117156129b5576129b5612485565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b6000602082840312156129f857600080fd5b5051919050565b600080600060608486031215612a1457600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561081257610812612928565b600060208284031215612a5257600080fd5b610b128261262856fea2646970667358221220598ada9fd3454d93a8a8e7b768edf2edffcee4269c3e83bed60791aab9c567e264736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c8063821c057611610130578063c648f83f116100b8578063d67dff011161007c578063d67dff011461052a578063ddc632621461053b578063e0f560101461054e578063e2bbb15814610561578063f2fde38b1461057457600080fd5b8063c648f83f146104bb578063c851cc32146104c3578063c9dd1f3c146104d6578063cc600f91146104e9578063d18df53c146104fc57600080fd5b8063a5de3619116100ff578063a5de36191461045c578063aefbced814610471578063b0f479a114610484578063b9e280e714610495578063c0288846146104a857600080fd5b8063821c0576146104075780638a765f721461040f5780638da5cb5b146104225780639403b6341461043357600080fd5b80635312ea8e116101b3578063704802751161018257806370480275146103b3578063715018a6146103c6578063762e16ac146103ce5780637cb332bb146103e15780637f76bf82146103f457600080fd5b80635312ea8e1461033e57806363a846f81461035157806363bee3691461038d5780636653a340146103a057600080fd5b80631785f53c116101fa5780631785f53c146102ac578063257664a4146102bf57806336b787a414610305578063441a3e70146103185780634747fb5a1461032b57600080fd5b8063026549b51461022c578063026944f814610252578063068bcd8d146102675780630759a35414610287575b600080fd5b61023f61023a366004612139565b610587565b6040519081526020015b60405180910390f35b610265610260366004612167565b610612565b005b61027a610275366004612139565b61071f565b60405161024991906122ad565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610249565b6102656102ba366004612376565b610818565b6102d26102cd366004612167565b610a6c565b60405161024991908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b610265610313366004612393565b610b19565b6102656103263660046123dd565b610beb565b61023f610339366004612376565b610bfa565b61026561034c366004612139565b610d3b565b61037d61035f366004612376565b6001600160a01b031660009081526008602052604090205460ff1690565b6040519015158152602001610249565b61026561039b3660046123ff565b610d48565b6102656103ae366004612376565b610dbf565b6102656103c1366004612376565b610e47565b610265610fca565b6102656103dc3660046123ff565b611030565b6102656103ef366004612376565b6110a0565b61023f610402366004612376565b611128565b61026561121e565b61023f61041d366004612139565b61133a565b6000546001600160a01b0316610294565b610294610441366004612139565b6000908152600760205260409020546001600160a01b031690565b6104646113b0565b6040516102499190612438565b61026561047f366004612167565b611412565b6004546001600160a01b0316610294565b61023f6104a3366004612376565b611486565b6102656104b6366004612167565b61157c565b60015461023f565b6102656104d1366004612376565b6115eb565b61023f6104e4366004612139565b611673565b6102656104f7366004612376565b6116c5565b61050f61050a366004612167565b61174d565b60408051938452602084019290925290820152606001610249565b6006546001600160a01b0316610294565b610265610549366004612139565b6117d7565b61026561055c366004612376565b6117e1565b61026561056f3660046123dd565b611963565b610265610582366004612376565b61196f565b60025460008281526007602052604080822054905163095d992960e21b8152600481018590526001600160a01b0391821660248201529192169063257664a49060440160a060405180830381865afa1580156105e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060b91906124f6565b5192915050565b6000336106276000546001600160a01b031690565b6001600160a01b031603610639575060015b3360009081526008602052604090205460ff1615610655575060015b6001811515146106805760405162461bcd60e51b815260040161067790612566565b60405180910390fd5b6000838152600760205260409020546001600160a01b0316156106f05760405162461bcd60e51b815260206004820152602260248201527f5661756c74732d41646d696e3a207661756c7420616c72656164792065786973604482015261747360f01b6064820152608401610677565b5060009182526007602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6107796040518061012001604052806060815260200160006001600160a01b031681526020016000151581526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b60025460405163068bcd8d60e01b8152600481018490526000916001600160a01b03169063068bcd8d90602401600060405180830381865afa1580156107c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107eb91908101906127ab565b6000848152600760205260409020549091506001600160a01b031661081257600060408201525b92915050565b60003361082d6000546001600160a01b031690565b6001600160a01b03160361083f575060015b3360009081526008602052604090205460ff161561085b575060015b60018115151461087d5760405162461bcd60e51b815260040161067790612566565b6001600160a01b03821633036108a55760405162461bcd60e51b8152600401610677906128c9565b6001600160a01b03821660009081526008602052604090205460ff1661090d5760405162461bcd60e51b815260206004820152601a60248201527f5661756c74732d41646d696e3a206e6f7420616e2061646d696e0000000000006044820152606401610677565b6001600160a01b0382166000908152600860205260408120805460ff191690555b600954811015610a3357826001600160a01b03166009828154811061095557610955612912565b6000918252602090912001546001600160a01b031603610a21576009805461097f9060019061293e565b8154811061098f5761098f612912565b600091825260209091200154600980546001600160a01b0390921691839081106109bb576109bb612912565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060098054806109fa576109fa612951565b600082815260209020810160001990810180546001600160a01b0319169055019055610a33565b80610a2b81612967565b91505061092e565b506040516001600160a01b038316907f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b90600090a25050565b610a976040518060800160405280600081526020016000815260200160008152602001600081525090565b60008381526007602052604090819020549051636f77926b60e01b81526001600160a01b03848116600483015290911690636f77926b90602401608060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190612980565b9392505050565b6000848152600760205260409020546001600160a01b03163314610b775760405162461bcd60e51b81526020600482015260156024820152740acc2ead8e8e65a9ad2dce87440dcdee840c2eae8d605b1b6044820152606401610677565b60035460405163da39b3e760e01b8152600481018590526001600160a01b03848116602483015283811660448301529091169063da39b3e790606401600060405180830381600087803b158015610bcd57600080fd5b505af1158015610be1573d6000803e3d6000fd5b5050505050505050565b610bf6828233611a37565b5050565b600080805b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7691906129e6565b811015610d34576000818152600760205260409020546001600160a01b031615610d2257600081815260076020526040908190205490516323a3fdad60e11b81526001600160a01b038681166004830152610d1f921690634747fb5a906024015b602060405180830381865afa158015610cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1891906129e6565b8390611af9565b91505b80610d2c81612967565b915050610bff565b5092915050565b610d458133611b05565b50565b600033610d5d6000546001600160a01b031690565b6001600160a01b031603610d6f575060015b3360009081526008602052604090205460ff1615610d8b575060015b600181151514610dad5760405162461bcd60e51b815260040161067790612566565b610db984848433611bab565b50505050565b600033610dd46000546001600160a01b031690565b6001600160a01b031603610de6575060015b3360009081526008602052604090205460ff1615610e02575060015b600181151514610e245760405162461bcd60e51b815260040161067790612566565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b600033610e5c6000546001600160a01b031690565b6001600160a01b031603610e6e575060015b3360009081526008602052604090205460ff1615610e8a575060015b600181151514610eac5760405162461bcd60e51b815260040161067790612566565b6001600160a01b0382163303610ed45760405162461bcd60e51b8152600401610677906128c9565b6001600160a01b03821660009081526008602052604090205460ff1615610f3d5760405162461bcd60e51b815260206004820152601b60248201527f5661756c74732d41646d696e3a20616c72656164792061646d696e00000000006044820152606401610677565b6001600160a01b038216600081815260086020526040808220805460ff1916600190811790915560098054918201815583527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191684179055517fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba9190a25050565b6000546001600160a01b031633146110245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610677565b61102e600061203b565b565b6000336110456000546001600160a01b031690565b6001600160a01b031603611057575060015b3360009081526008602052604090205460ff1615611073575060015b6001811515146110955760405162461bcd60e51b815260040161067790612566565b610db9848484611a37565b6000336110b56000546001600160a01b031690565b6001600160a01b0316036110c7575060015b3360009081526008602052604090205460ff16156110e3575060015b6001811515146111055760405162461bcd60e51b815260040161067790612566565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a491906129e6565b811015610d34576000818152600760205260409020546001600160a01b03161561120c5760008181526007602052604090819020549051633fbb5fc160e11b81526001600160a01b038681166004830152611209921690637f76bf8290602401610cd7565b91505b8061121681612967565b91505061112d565b60005b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611274573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129891906129e6565b811015611333576000818152600760205260409020546001600160a01b0316156113215760008181526007602052604080822054815163410e02bb60e11b815291516001600160a01b039091169263821c0576926004808201939182900301818387803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050505b8061132b81612967565b915050611221565b5042600155565b6000818152600760209081526040808320548151634be6152d60e11b815291516001600160a01b03909116926397cc2a5a92600480820193918290030181865afa15801561138c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081291906129e6565b6060600980548060200260200160405190810160405280929190818152602001828054801561140857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113ea575b5050505050905090565b6000336114276000546001600160a01b031690565b6001600160a01b031603611439575060015b3360009081526008602052604090205460ff1615611455575060015b6001811515146114775760405162461bcd60e51b815260040161067790612566565b6114818383611b05565b505050565b600080805b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150291906129e6565b811015610d34576000818152600760205260409020546001600160a01b03161561156a576000818152600760205260409081902054905163b9e280e760e01b81526001600160a01b03868116600483015261156792169063b9e280e790602401610cd7565b91505b8061157481612967565b91505061148b565b6000336115916000546001600160a01b031690565b6001600160a01b0316036115a3575060015b3360009081526008602052604090205460ff16156115bf575060015b6001811515146115e15760405162461bcd60e51b815260040161067790612566565b611481838361208b565b6000336116006000546001600160a01b031690565b6001600160a01b031603611612575060015b3360009081526008602052604090205460ff161561162e575060015b6001811515146116505760405162461bcd60e51b815260040161067790612566565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526007602090815260408083205481516314a6bf0f60e01b815291516001600160a01b03909116926314a6bf0f92600480820193918290030181865afa15801561138c573d6000803e3d6000fd5b6000336116da6000546001600160a01b031690565b6001600160a01b0316036116ec575060015b3360009081526008602052604090205460ff1615611708575060015b60018115151461172a5760405162461bcd60e51b815260040161067790612566565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600760205260408082205490516318ebd13160e11b81526001600160a01b038481166004830152839283929116906331d7a26290602401606060405180830381865afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca91906129ff565b9250925092509250925092565b610d45813361208b565b6000336117f66000546001600160a01b031690565b6001600160a01b031603611808575060015b3360009081526008602052604090205460ff1615611824575060015b6001811515146118465760405162461bcd60e51b815260040161067790612566565b60005b600260009054906101000a90046001600160a01b03166001600160a01b031663d3ffe67a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c091906129e6565b811015611481576000818152600760205260409020546001600160a01b0316156119515760008181526007602052604090819020549051630e0f560160e41b81526001600160a01b0385811660048301529091169063e0f5601090602401600060405180830381600087803b15801561193857600080fd5b505af115801561194c573d6000803e3d6000fd5b505050505b8061195b81612967565b915050611849565b610bf682823333611bab565b6000546001600160a01b031633146119c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610677565b6001600160a01b038116611a2e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610677565b610d458161203b565b611a3f61121e565b60008381526007602052604090819020549051627b8a6760e11b8152600481018490526001600160a01b0383811660248301529091169062f714ce90604401600060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b5050505082816001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56884604051611aec91815260200190565b60405180910390a3505050565b6000610b128284612a2d565b60008281526007602052604090819020549051631bfc726f60e21b81526001600160a01b03838116600483015290911690636ff1c9bc90602401600060405180830381600087803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b50506040518492506001600160a01b03841691507f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd969590600090a35050565b611bb361121e565b60025460405163068bcd8d60e01b8152600481018690526000916001600160a01b03169063068bcd8d90602401600060405180830381865afa158015611bfd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c2591908101906127ab565b905060008411611c8c5760405162461bcd60e51b815260206004820152602c60248201527f5661756c74732d4465706f7369743a20616d6f756e74206d757374206265206c60448201526b06172676572207468616e20360a41b6064820152608401610677565b6000858152600760205260409020546001600160a01b0316611cf05760405162461bcd60e51b815260206004820181905260248201527f5661756c74732d4465706f7369743a20706f6f6c206e6f7420616c6c6f7765646044820152606401610677565b60208101516040516370a0823160e01b81526001600160a01b0384811660048301528691908316906370a0823190602401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6291906129e6565b1015611db05760405162461bcd60e51b815260206004820152601e60248201527f5661756c74732d4465706f7369743a2062616c616e636520746f206c6f7700006044820152606401610677565b604051636eb1769f60e11b81526001600160a01b03848116600483015230602483015286919083169063dd62ed3e90604401602060405180830381865afa158015611dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2391906129e6565b1015611e7d5760405162461bcd60e51b815260206004820152602360248201527f5661756c74732d4465706f7369743a20616d6f756e74206e6f7420617070726f6044820152621d995960ea1b6064820152608401610677565b6040516323b872dd60e01b81526001600160a01b038481166004830152306024830152604482018790528216906323b872dd906064016020604051808303816000875af1158015611ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef69190612a40565b506000868152600760205260409081902054905163095ea7b360e01b81526001600160a01b039182166004820152602481018790529082169063095ea7b3906044016020604051808303816000875af1158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190612a40565b5060008681526007602052604090819020549051636e553f6560e01b8152600481018790526001600160a01b03868116602483015290911690636e553f6590604401600060405180830381600087803b158015611fd757600080fd5b505af1158015611feb573d6000803e3d6000fd5b5050505085846001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158760405161202b91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61209361121e565b6000828152600760205260409081902054905163072e008f60e11b81526001600160a01b03838116600483015290911690630e5c011e90602401600060405180830381600087803b1580156120e757600080fd5b505af11580156120fb573d6000803e3d6000fd5b50506040518492506001600160a01b03841691507fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba90600090a35050565b60006020828403121561214b57600080fd5b5035919050565b6001600160a01b0381168114610d4557600080fd5b6000806040838503121561217a57600080fd5b82359150602083013561218c81612152565b809150509250929050565b60005b838110156121b257818101518382015260200161219a565b50506000910152565b600081518084526121d3816020860160208601612197565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156122205781516001600160a01b0316875295820195908201906001016121fb565b509495945050505050565b6000815180845260208085019450848260051b860182860160005b8581101561227057838303895261225e8383516121bb565b98850198925090840190600101612246565b5090979650505050505050565b600081518084526020808501945080840160005b8381101561222057815187529582019590820190600101612291565b60208152600082516101208060208501526122cc6101408501836121bb565b915060208501516122e860408601826001600160a01b03169052565b50604085015180151560608601525060608501516080850152608085015160a085015260a085015160c085015260c0850151601f19808685030160e087015261233184836121e7565b935060e08701519150610100818786030181880152612350858461222b565b90880151878203909201848801529350905061236c838261227d565b9695505050505050565b60006020828403121561238857600080fd5b8135610b1281612152565b600080600080608085870312156123a957600080fd5b843593506020850135925060408501356123c281612152565b915060608501356123d281612152565b939692955090935050565b600080604083850312156123f057600080fd5b50508035926020909101359150565b60008060006060848603121561241457600080fd5b8335925060208401359150604084013561242d81612152565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b818110156124795783516001600160a01b031683529284019291840191600101612454565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156124bf576124bf612485565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156124ee576124ee612485565b604052919050565b600060a0828403121561250857600080fd5b60405160a0810181811067ffffffffffffffff8211171561252b5761252b612485565b806040525082518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b60208082526026908201527f5661756c74732d697341646d696e3a2063616c6c6572206973206e6f7420616e6040820152651030b236b4b760d11b606082015260800190565b600082601f8301126125bd57600080fd5b815167ffffffffffffffff8111156125d7576125d7612485565b6125ea601f8201601f19166020016124c5565b8181528460208386010111156125ff57600080fd5b612610826020830160208701612197565b949350505050565b805161262381612152565b919050565b8051801515811461262357600080fd5b600067ffffffffffffffff82111561265257612652612485565b5060051b60200190565b600082601f83011261266d57600080fd5b8151602061268261267d83612638565b6124c5565b82815260059290921b840181019181810190868411156126a157600080fd5b8286015b848110156126c55780516126b881612152565b83529183019183016126a5565b509695505050505050565b600082601f8301126126e157600080fd5b815160206126f161267d83612638565b82815260059290921b8401810191818101908684111561271057600080fd5b8286015b848110156126c557805167ffffffffffffffff8111156127345760008081fd5b6127428986838b01016125ac565b845250918301918301612714565b600082601f83011261276157600080fd5b8151602061277161267d83612638565b82815260059290921b8401810191818101908684111561279057600080fd5b8286015b848110156126c55780518352918301918301612794565b6000602082840312156127bd57600080fd5b815167ffffffffffffffff808211156127d557600080fd5b9083019061012082860312156127ea57600080fd5b6127f261249b565b82518281111561280157600080fd5b61280d878286016125ac565b82525061281c60208401612618565b602082015261282d60408401612628565b6040820152606083015160608201526080830151608082015260a083015160a082015260c08301518281111561286257600080fd5b61286e8782860161265c565b60c08301525060e08301518281111561288657600080fd5b612892878286016126d0565b60e08301525061010080840151838111156128ac57600080fd5b6128b888828701612750565b918301919091525095945050505050565b60208082526029908201527f5661756c74732d41646d696e3a2063616e6e6f742065646974206f776e207065604082015268726d697373696f6e7360b81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561081257610812612928565b634e487b7160e01b600052603160045260246000fd5b60006001820161297957612979612928565b5060010190565b60006080828403121561299257600080fd5b6040516080810181811067ffffffffffffffff821117156129b5576129b5612485565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b6000602082840312156129f857600080fd5b5051919050565b600080600060608486031215612a1457600080fd5b8351925060208401519150604084015190509250925092565b8082018082111561081257610812612928565b600060208284031215612a5257600080fd5b610b128261262856fea2646970667358221220598ada9fd3454d93a8a8e7b768edf2edffcee4269c3e83bed60791aab9c567e264736f6c63430008130033
Deployed Bytecode Sourcemap
21209:9034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22973:123;;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;22973:123:0;;;;;;;;26072:187;;;;;;:::i;:::-;;:::i;:::-;;22582:227;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23651:91::-;23724:10;;-1:-1:-1;;;;;23724:10:0;23651:91;;;-1:-1:-1;;;;;4666:32:1;;;4648:51;;4636:2;4621:18;23651:91:0;4502:203:1;25527:539:0;;;;;;:::i;:::-;;:::i;22815:152::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;5179:13:1;;5161:32;;5249:4;5237:17;;;5231:24;5209:20;;;5202:54;5312:4;5300:17;;;5294:24;5272:20;;;5265:54;5375:4;5363:17;;;5357:24;5335:20;;;5328:54;;;;5148:3;5133:19;;4962:426;26835:229:0;;;;;;:::i;:::-;;:::i;27997:111::-;;;;;;:::i;:::-;;:::i;23849:361::-;;;;;;:::i;:::-;;:::i;28114:103::-;;;;;;:::i;:::-;;:::i;24948:102::-;;;;;;:::i;:::-;-1:-1:-1;;;;;25026:16:0;25002:4;25026:16;;;:6;:16;;;;;;;;;24948:102;;;;6355:14:1;;6348:22;6330:41;;6318:2;6303:18;24948:102:0;6190:187:1;26265:153:0;;;;;;:::i;:::-;;:::i;27451:119::-;;;;;;:::i;:::-;;:::i;25204:317::-;;;;;;:::i;:::-;;:::i;772:103::-;;;:::i;26424:143::-;;;;;;:::i;:::-;;:::i;27576:111::-;;;;;;:::i;:::-;;:::i;24216:359::-;;;;;;:::i;:::-;;:::i;28312:275::-;;;:::i;23429:127::-;;;;;;:::i;:::-;;:::i;549:87::-;595:7;622:6;-1:-1:-1;;;;;622:6:0;549:87;;23326:97;;;;;;:::i;:::-;23376:7;23403:12;;;:6;:12;;;;;;-1:-1:-1;;;;;23403:12:0;;23326:97;25056:92;;;:::i;:::-;;;;;;;:::i;26573:135::-;;;;;;:::i;:::-;;:::i;23562:83::-;23631:6;;-1:-1:-1;;;;;23631:6:0;23562:83;;24581:361;;;;;;:::i;:::-;;:::i;26714:115::-;;;;;;:::i;:::-;;:::i;23102:99::-;23179:14;;23102:99;;27350:95;;;;;;:::i;:::-;;:::i;23207:113::-;;;;;;:::i;:::-;;:::i;27693:119::-;;;;;;:::i;:::-;;:::i;28597:174::-;;;;;;:::i;:::-;;:::i;:::-;;;;7907:25:1;;;7963:2;7948:18;;7941:34;;;;7991:18;;;7984:34;7895:2;7880:18;28597:174:0;7705:319:1;23748:95:0;23823:12;;-1:-1:-1;;;;;23823:12:0;23748:95;;28223:83;;;;;;:::i;:::-;;:::i;27070:274::-;;;;;;:::i;:::-;;:::i;27870:121::-;;;;;;:::i;:::-;;:::i;883:201::-;;;;;;:::i;:::-;;:::i;22973:123::-;23048:5;;23021:7;23068:12;;;:6;:12;;;;;;;23048:33;;-1:-1:-1;;;23048:33:0;;;;;8203:25:1;;;-1:-1:-1;;;;;23068:12:0;;;8244:18:1;;;8237:60;23021:7:0;;23048:5;;:13;;8176:18:1;;23048:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;22973:123;-1:-1:-1;;22973:123:0:o;26072:187::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;;;;;;;;;26178:1:::1;26154:12:::0;;;:6:::1;:12;::::0;;;;;-1:-1:-1;;;;;26154:12:0::1;:26:::0;26146:73:::1;;;::::0;-1:-1:-1;;;26146:73:0;;10277:2:1;26146:73:0::1;::::0;::::1;10259:21:1::0;10316:2;10296:18;;;10289:30;10355:34;10335:18;;;10328:62;-1:-1:-1;;;10406:18:1;;;10399:32;10448:19;;26146:73:0::1;10075:398:1::0;26146:73:0::1;-1:-1:-1::0;26230:12:0::1;::::0;;;:6:::1;:12;::::0;;;;;:21;;-1:-1:-1;;;;;;26230:21:0::1;-1:-1:-1::0;;;;;26230:21:0;;::::1;::::0;;;::::1;::::0;;26072:187::o;22582:227::-;22634:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22634:21:0;22697:5;;:19;;-1:-1:-1;;;22697:19:0;;;;;345:25:1;;;22668:26:0;;-1:-1:-1;;;;;22697:5:0;;:13;;318:18:1;;22697:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22697:19:0;;;;;;;;;;;;:::i;:::-;22754:1;22730:12;;;:6;:12;;;;;;22668:48;;-1:-1:-1;;;;;;22730:12:0;22727:53;;22772:5;22760:9;;;:17;22727:53;22797:4;22582:227;-1:-1:-1;;22582:227:0:o;25527:539::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25600:22:0;::::1;:10;:22:::0;25592:76:::1;;;;-1:-1:-1::0;;;25592:76:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25687:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;::::1;;25679:55;;;::::0;-1:-1:-1;;;25679:55:0;;15991:2:1;25679:55:0::1;::::0;::::1;15973:21:1::0;16030:2;16010:18;;;16003:30;16069:28;16049:18;;;16042:56;16115:18;;25679:55:0::1;15789:350:1::0;25679:55:0::1;-1:-1:-1::0;;;;;25745:16:0;::::1;25764:5;25745:16:::0;;;:6:::1;:16;::::0;;;;:24;;-1:-1:-1;;25745:24:0::1;::::0;;25780:242:::1;25804:9;:16:::0;25800:20;::::1;25780:242;;;25862:8;-1:-1:-1::0;;;;;25846:24:0::1;:9;25856:1;25846:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25846:12:0::1;:24:::0;25842:169:::1;;25906:9;25916:16:::0;;:20:::1;::::0;25935:1:::1;::::0;25916:20:::1;:::i;:::-;25906:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25891:9:::1;:12:::0;;-1:-1:-1;;;;;25906:31:0;;::::1;::::0;25901:1;;25891:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;25891:46:0::1;;;;;-1:-1:-1::0;;;;;25891:46:0::1;;;;;;25956:9;:15;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25956:15:0;;;;;-1:-1:-1;;;;;;25956:15:0::1;::::0;;;;;25990:5:::1;;25842:169;25822:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25780:242;;;-1:-1:-1::0;26037:21:0::1;::::0;-1:-1:-1;;;;;26037:21:0;::::1;::::0;::::1;::::0;;;::::1;22282:245:::0;25527:539;:::o;22815:152::-;22881:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22881:21:0;22928:12;;;;:6;:12;;;;;;;;22922:37;;-1:-1:-1;;;22922:37:0;;-1:-1:-1;;;;;4666:32:1;;;22922:37:0;;;4648:51:1;22928:12:0;;;;22922:27;;4621:18:1;;22922:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22915:44;22815:152;-1:-1:-1;;;22815:152:0:o;26835:229::-;26948:12;;;;:6;:12;;;;;;-1:-1:-1;;;;;26948:12:0;26964:10;26948:26;26940:60;;;;-1:-1:-1;;;26940:60:0;;17642:2:1;26940:60:0;;;17624:21:1;17681:2;17661:18;;;17654:30;-1:-1:-1;;;17700:18:1;;;17693:51;17761:18;;26940:60:0;17440:345:1;26940:60:0;27011:11;;:45;;-1:-1:-1;;;27011:45:0;;;;;18006:25:1;;;-1:-1:-1;;;;;18105:15:1;;;18085:18;;;18078:43;18157:15;;;18137:18;;;18130:43;27011:11:0;;;;:16;;17979:18:1;;27011:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26835:229;;;;:::o;27997:111::-;28064:36;28074:4;28080:7;28089:10;28064:9;:36::i;:::-;27997:111;;:::o;23849:361::-;23914:7;;;23963:216;23991:5;;;;;;;;;-1:-1:-1;;;;;23991:5:0;-1:-1:-1;;;;;23991:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23985:3;:27;23963:216;;;24063:1;24040:11;;;:6;:11;;;;;;-1:-1:-1;;;;;24040:11:0;:25;24036:132;;24112:11;;;;:6;:11;;;;;;;;24106:45;;-1:-1:-1;;;24106:45:0;;-1:-1:-1;;;;;4666:32:1;;;24106:45:0;;;4648:51:1;24095:57:0;;24112:11;;24106:37;;4621:18:1;;24106:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24095:6;;:10;:57::i;:::-;24086:66;;24036:132;24014:5;;;;:::i;:::-;;;;23963:216;;;-1:-1:-1;24196:6:0;23849:361;-1:-1:-1;;23849:361:0:o;28114:103::-;28173:36;28192:4;28198:10;28173:18;:36::i;:::-;28114:103;:::o;26265:153::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;26365:45:::1;26374:4;26380:7;26389:8;26399:10;26365:8;:45::i;:::-;22282:245:::0;26265:153;;;:::o;27451:119::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;-1:-1:-1;27533:11:0::1;:29:::0;;-1:-1:-1;;;;;;27533:29:0::1;-1:-1:-1::0;;;;;27533:29:0;;;::::1;::::0;;;::::1;::::0;;27451:119::o;25204:317::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25274:22:0;::::1;:10;:22:::0;25266:76:::1;;;;-1:-1:-1::0;;;25266:76:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25362:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;::::1;;25361:17;25353:57;;;::::0;-1:-1:-1;;;25353:57:0;;18575:2:1;25353:57:0::1;::::0;::::1;18557:21:1::0;18614:2;18594:18;;;18587:30;18653:29;18633:18;;;18626:57;18700:18;;25353:57:0::1;18373:351:1::0;25353:57:0::1;-1:-1:-1::0;;;;;25421:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:23;;-1:-1:-1;;25421:23:0::1;25440:4;25421:23:::0;;::::1;::::0;;;25455:9:::1;:24:::0;;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;25455:24:0::1;::::0;::::1;::::0;;25495:18;::::1;::::0;25421:16;25495:18:::1;22282:245:::0;25204:317;:::o;772:103::-;595:7;622:6;-1:-1:-1;;;;;622:6:0;179:10;684:23;676:68;;;;-1:-1:-1;;;676:68:0;;18931:2:1;676:68:0;;;18913:21:1;;;18950:18;;;18943:30;19009:34;18989:18;;;18982:62;19061:18;;676:68:0;18729:356:1;676:68:0;837:30:::1;864:1;837:18;:30::i;:::-;772:103::o:0;26424:143::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;26525:34:::1;26535:4;26541:7;26550:8;26525:9;:34::i;27576:111::-:0;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;-1:-1:-1;27652:10:0::1;:27:::0;;-1:-1:-1;;;;;;27652:27:0::1;-1:-1:-1::0;;;;;27652:27:0;;;::::1;::::0;;;::::1;::::0;;27576:111::o;24216:359::-;24280:7;;;24329:215;24357:5;;;;;;;;;-1:-1:-1;;;;;24357:5:0;-1:-1:-1;;;;;24357:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24351:3;:27;24329:215;;;24429:1;24406:11;;;:6;:11;;;;;;-1:-1:-1;;;;;24406:11:0;:25;24402:131;;24478:11;;;;:6;:11;;;;;;;;24472:44;;-1:-1:-1;;;24472:44:0;;-1:-1:-1;;;;;4666:32:1;;;24472:44:0;;;4648:51:1;24461:56:0;;24478:11;;24472:36;;4621:18:1;;24472:44:0;4502:203:1;24461:56:0;24452:65;;24402:131;24380:5;;;;:::i;:::-;;;;24329:215;;28312:275;28359:11;28354:183;28382:5;;;;;;;;;-1:-1:-1;;;;;28382:5:0;-1:-1:-1;;;;;28382:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28376:3;:27;28354:183;;;28454:1;28431:11;;;:6;:11;;;;;;-1:-1:-1;;;;;28431:11:0;:25;28427:99;;28483:11;;;;:6;:11;;;;;;;28477:33;;-1:-1:-1;;;28477:33:0;;;;-1:-1:-1;;;;;28483:11:0;;;;28477:31;;:33;;;;;;;;;;;28483:11;;28477:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28427:99;28405:5;;;;:::i;:::-;;;;28354:183;;;-1:-1:-1;28564:15:0;28547:14;:32;28312:275::o;23429:127::-;23485:7;23518:12;;;:6;:12;;;;;;;;;23512:36;;-1:-1:-1;;;23512:36:0;;;;-1:-1:-1;;;;;23518:12:0;;;;23512:34;;:36;;;;;;;;;;;23518:12;23512:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25056:92::-;25095:16;25131:9;25124:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25124:16:0;;;;;;;;;;;;;;;;;;;;;;;25056:92;:::o;26573:135::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;26666:34:::1;26685:4;26691:8;26666:18;:34::i;:::-;22282:245:::0;26573:135;;:::o;24581:361::-;24646:7;;;24695:216;24723:5;;;;;;;;;-1:-1:-1;;;;;24723:5:0;-1:-1:-1;;;;;24723:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24717:3;:27;24695:216;;;24795:1;24772:11;;;:6;:11;;;;;;-1:-1:-1;;;;;24772:11:0;:25;24768:132;;24844:11;;;;:6;:11;;;;;;;;24838:45;;-1:-1:-1;;;24838:45:0;;-1:-1:-1;;;;;4666:32:1;;;24838:45:0;;;4648:51:1;24827:57:0;;24844:11;;24838:37;;4621:18:1;;24838:45:0;4502:203:1;24827:57:0;24818:66;;24768:132;24746:5;;;;:::i;:::-;;;;24695:216;;26714:115;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;26797:24:::1;26806:4;26812:8;26797;:24::i;27350:95::-:0;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;-1:-1:-1;27418:6:0::1;:19:::0;;-1:-1:-1;;;;;;27418:19:0::1;-1:-1:-1::0;;;;;27418:19:0;;;::::1;::::0;;;::::1;::::0;;27350:95::o;23207:113::-;23256:7;23289:12;;;:6;:12;;;;;;;;;23283:29;;-1:-1:-1;;;23283:29:0;;;;-1:-1:-1;;;;;23289:12:0;;;;23283:27;;:29;;;;;;;;;;;23289:12;23283:29;;;;;;;;;;;;;;27693:119;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;-1:-1:-1;27773:12:0::1;:31:::0;;-1:-1:-1;;;;;;27773:31:0::1;-1:-1:-1::0;;;;;27773:31:0;;;::::1;::::0;;;::::1;::::0;;27693:119::o;28597:174::-;28674:7;28725:12;;;:6;:12;;;;;;;28719:44;;-1:-1:-1;;;28719:44:0;;-1:-1:-1;;;;;4666:32:1;;;28719:44:0;;;4648:51:1;28674:7:0;;;;28725:12;;;28719:34;;4621:18:1;;28719:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28712:51;;;;;;28597:174;;;;;:::o;28223:83::-;28272:26;28281:4;28287:10;28272:8;:26::i;27070:274::-;22293:14;22341:10;22330:7;595;622:6;-1:-1:-1;;;;;622:6:0;;549:87;22330:7;-1:-1:-1;;;;;22330:21:0;;22326:48;;-1:-1:-1;22367:4:0;22326:48;22395:10;22388:18;;;;:6;:18;;;;;;;;22384:45;;;-1:-1:-1;22422:4:0;22384:45;22460:4;22447:17;;;;22439:68;;;;-1:-1:-1;;;22439:68:0;;;;;;;:::i;:::-;27146:11:::1;27141:196;27169:5;;;;;;;;;-1:-1:-1::0;;;;;27169:5:0::1;-1:-1:-1::0;;;;;27169:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27163:3;:27;27141:196;;;27241:1;27218:11:::0;;;:6:::1;:11;::::0;;;;;-1:-1:-1;;;;;27218:11:0::1;:25:::0;27214:112:::1;;27270:11;::::0;;;:6:::1;:11;::::0;;;;;;;27264:46;;-1:-1:-1;;;27264:46:0;;-1:-1:-1;;;;;4666:32:1;;;27264:46:0::1;::::0;::::1;4648:51:1::0;27270:11:0;;::::1;::::0;27264:38:::1;::::0;4621:18:1;;27264:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27214:112;27192:5:::0;::::1;::::0;::::1;:::i;:::-;;;;27141:196;;27870:121:::0;27936:47;27945:4;27951:7;27960:10;27972;27936:8;:47::i;883:201::-;595:7;622:6;-1:-1:-1;;;;;622:6:0;179:10;684:23;676:68;;;;-1:-1:-1;;;676:68:0;;18931:2:1;676:68:0;;;18913:21:1;;;18950:18;;;18943:30;19009:34;18989:18;;;18982:62;19061:18;;676:68:0;18729:356:1;676:68:0;-1:-1:-1;;;;;972:22:0;::::1;964:73;;;::::0;-1:-1:-1;;;964:73:0;;19603:2:1;964:73:0::1;::::0;::::1;19585:21:1::0;19642:2;19622:18;;;19615:30;19681:34;19661:18;;;19654:62;-1:-1:-1;;;19732:18:1;;;19725:36;19778:19;;964:73:0::1;19401:402:1::0;964:73:0::1;1048:28;1067:8;1048:18;:28::i;29648:217::-:0;29736:14;:12;:14::i;:::-;29767:12;;;;:6;:12;;;;;;;;29761:47;;-1:-1:-1;;;29761:47:0;;;;;8203:25:1;;;-1:-1:-1;;;;;8264:32:1;;;8244:18;;;8237:60;29767:12:0;;;;29761:28;;8176:18:1;;29761:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29843:4;29833:8;-1:-1:-1;;;;;29824:33:0;;29849:7;29824:33;;;;345:25:1;;333:2;318:18;;199:177;29824:33:0;;;;;;;;29648:217;;;:::o;5872:98::-;5930:7;5957:5;5961:1;5957;:5;:::i;29871:184::-;29957:12;;;;:6;:12;;;;;;;;29951:47;;-1:-1:-1;;;29951:47:0;;-1:-1:-1;;;;;4666:32:1;;;29951:47:0;;;4648:51:1;29957:12:0;;;;29951:37;;4621:18:1;;29951:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30014:33:0;;30042:4;;-1:-1:-1;;;;;;30014:33:0;;;-1:-1:-1;30014:33:0;;;;;29871:184;;:::o;28830:810::-;28933:14;:12;:14::i;:::-;28987:5;;:19;;-1:-1:-1;;;28987:19:0;;;;;345:25:1;;;28958:26:0;;-1:-1:-1;;;;;28987:5:0;;:13;;318:18:1;;28987:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28987:19:0;;;;;;;;;;;;:::i;:::-;28958:48;;29035:1;29025:7;:11;29017:68;;;;-1:-1:-1;;;29017:68:0;;20140:2:1;29017:68:0;;;20122:21:1;20179:2;20159:18;;;20152:30;20218:34;20198:18;;;20191:62;-1:-1:-1;;;20269:18:1;;;20262:42;20321:19;;29017:68:0;19938:408:1;29017:68:0;29128:1;29104:12;;;:6;:12;;;;;;-1:-1:-1;;;;;29104:12:0;29096:71;;;;-1:-1:-1;;;29096:71:0;;20553:2:1;29096:71:0;;;20535:21:1;;;20572:18;;;20565:30;20631:34;20611:18;;;20604:62;20683:18;;29096:71:0;20351:356:1;29096:71:0;29202:12;;;;29234:25;;-1:-1:-1;;;29234:25:0;;-1:-1:-1;;;;;4666:32:1;;;29234:25:0;;;4648:51:1;29263:7:0;;29234:17;;;;;;4621:18:1;;29234:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;29226:79;;;;-1:-1:-1;;;29226:79:0;;20914:2:1;29226:79:0;;;20896:21:1;20953:2;20933:18;;;20926:30;20992:32;20972:18;;;20965:60;21042:18;;29226:79:0;20712:354:1;29226:79:0;29324:40;;-1:-1:-1;;;29324:40:0;;-1:-1:-1;;;;;21301:15:1;;;29324:40:0;;;21283:34:1;29358:4:0;21333:18:1;;;21326:43;29368:7:0;;29324:17;;;;;;21218:18:1;;29324:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;29316:99;;;;-1:-1:-1;;;29316:99:0;;21582:2:1;29316:99:0;;;21564:21:1;21621:2;21601:18;;;21594:30;21660:34;21640:18;;;21633:62;-1:-1:-1;;;21711:18:1;;;21704:33;21754:19;;29316:99:0;21380:399:1;29316:99:0;29426:52;;-1:-1:-1;;;29426:52:0;;-1:-1:-1;;;;;22042:15:1;;;29426:52:0;;;22024:34:1;29463:4:0;22074:18:1;;;22067:43;22126:18;;;22119:34;;;29426:20:0;;;;;21959:18:1;;29426:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29505:12:0;;;;:6;:12;;;;;;;;29489:38;;-1:-1:-1;;;29489:38:0;;-1:-1:-1;;;;;29505:12:0;;;29489:38;;;22545:51:1;22612:18;;;22605:34;;;29489:15:0;;;;;;22518:18:1;;29489:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29544:12:0;;;;:6;:12;;;;;;;;29538:46;;-1:-1:-1;;;29538:46:0;;;;;8203:25:1;;;-1:-1:-1;;;;;8264:32:1;;;8244:18;;;8237:60;29544:12:0;;;;29538:27;;8176:18:1;;29538:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29618:4;29608:8;-1:-1:-1;;;;;29600:32:0;;29624:7;29600:32;;;;345:25:1;;333:2;318:18;;199:177;29600:32:0;;;;;;;;28922:718;;28830:810;;;;:::o;1092:191::-;1166:16;1185:6;;-1:-1:-1;;;;;1202:17:0;;;-1:-1:-1;;;;;;1202:17:0;;;;;;1235:40;;1185:6;;;;;;;1235:40;;1166:16;1235:40;1155:128;1092:191;:::o;30061:179::-;30131:14;:12;:14::i;:::-;30162:12;;;;:6;:12;;;;;;;;30156:37;;-1:-1:-1;;;30156:37:0;;-1:-1:-1;;;;;4666:32:1;;;30156:37:0;;;4648:51:1;30162:12:0;;;;30156:27;;4621:18:1;;30156:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30209:23:0;;30227:4;;-1:-1:-1;;;;;;30209:23:0;;;-1:-1:-1;30209:23:0;;;;;30061:179;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:131::-;-1:-1:-1;;;;;456:31:1;;446:42;;436:70;;502:1;499;492:12;517:315;585:6;593;646:2;634:9;625:7;621:23;617:32;614:52;;;662:1;659;652:12;614:52;698:9;685:23;675:33;;758:2;747:9;743:18;730:32;771:31;796:5;771:31;:::i;:::-;821:5;811:15;;;517:315;;;;;:::o;837:250::-;922:1;932:113;946:6;943:1;940:13;932:113;;;1022:11;;;1016:18;1003:11;;;996:39;968:2;961:10;932:113;;;-1:-1:-1;;1079:1:1;1061:16;;1054:27;837:250::o;1092:271::-;1134:3;1172:5;1166:12;1199:6;1194:3;1187:19;1215:76;1284:6;1277:4;1272:3;1268:14;1261:4;1254:5;1250:16;1215:76;:::i;:::-;1345:2;1324:15;-1:-1:-1;;1320:29:1;1311:39;;;;1352:4;1307:50;;1092:271;-1:-1:-1;;1092:271:1:o;1581:469::-;1642:3;1680:5;1674:12;1707:6;1702:3;1695:19;1733:4;1762:2;1757:3;1753:12;1746:19;;1799:2;1792:5;1788:14;1820:1;1830:195;1844:6;1841:1;1838:13;1830:195;;;1909:13;;-1:-1:-1;;;;;1905:39:1;1893:52;;1965:12;;;;2000:15;;;;1941:1;1859:9;1830:195;;;-1:-1:-1;2041:3:1;;1581:469;-1:-1:-1;;;;;1581:469:1:o;2055:567::-;2107:3;2145:5;2139:12;2172:6;2167:3;2160:19;2198:4;2227:2;2222:3;2218:12;2211:19;;2252:3;2292:6;2289:1;2285:14;2280:3;2276:24;2334:2;2327:5;2323:14;2355:1;2365:231;2379:6;2376:1;2373:13;2365:231;;;2450:5;2444:4;2440:16;2435:3;2428:29;2478:38;2511:4;2502:6;2496:13;2478:38;:::i;:::-;2574:12;;;;2470:46;-1:-1:-1;2539:15:1;;;;2401:1;2394:9;2365:231;;;-1:-1:-1;2612:4:1;;2055:567;-1:-1:-1;;;;;;;2055:567:1:o;2627:435::-;2680:3;2718:5;2712:12;2745:6;2740:3;2733:19;2771:4;2800:2;2795:3;2791:12;2784:19;;2837:2;2830:5;2826:14;2858:1;2868:169;2882:6;2879:1;2876:13;2868:169;;;2943:13;;2931:26;;2977:12;;;;3012:15;;;;2904:1;2897:9;2868:169;;3067:1430;3248:2;3237:9;3230:21;3211:4;3286:6;3280:13;3312:6;3354:2;3349;3338:9;3334:18;3327:30;3380:52;3427:3;3416:9;3412:19;3398:12;3380:52;:::i;:::-;3366:66;;3481:2;3473:6;3469:15;3463:22;3494:62;3552:2;3541:9;3537:18;3521:14;-1:-1:-1;;;;;1442:31:1;1430:44;;1368:112;3494:62;-1:-1:-1;3605:2:1;3593:15;;3587:22;1555:13;;1548:21;3665:2;3650:18;;1536:34;3618:51;3724:2;3716:6;3712:15;3706:22;3700:3;3689:9;3685:19;3678:51;3784:3;3776:6;3772:16;3766:23;3760:3;3749:9;3745:19;3738:52;3845:3;3837:6;3833:16;3827:23;3821:3;3810:9;3806:19;3799:52;3900:3;3892:6;3888:16;3882:23;3928:2;3924:7;3996:2;3984:9;3976:6;3972:22;3968:31;3962:3;3951:9;3947:19;3940:60;4023;4076:6;4060:14;4023:60;:::i;:::-;4009:74;;4132:3;4124:6;4120:16;4114:23;4092:45;;4156:3;4223:2;4211:9;4203:6;4199:22;4195:31;4190:2;4179:9;4175:18;4168:59;4250:51;4294:6;4278:14;4250:51;:::i;:::-;4338:15;;;4332:22;4394;;;4390:31;;;4370:18;;;4363:59;4236:65;-1:-1:-1;4332:22:1;-1:-1:-1;4439:52:1;4236:65;4332:22;4439:52;:::i;:::-;4431:60;3067:1430;-1:-1:-1;;;;;;3067:1430:1:o;4710:247::-;4769:6;4822:2;4810:9;4801:7;4797:23;4793:32;4790:52;;;4838:1;4835;4828:12;4790:52;4877:9;4864:23;4896:31;4921:5;4896:31;:::i;5393:539::-;5493:6;5501;5509;5517;5570:3;5558:9;5549:7;5545:23;5541:33;5538:53;;;5587:1;5584;5577:12;5538:53;5623:9;5610:23;5600:33;;5680:2;5669:9;5665:18;5652:32;5642:42;;5734:2;5723:9;5719:18;5706:32;5747:31;5772:5;5747:31;:::i;:::-;5797:5;-1:-1:-1;5854:2:1;5839:18;;5826:32;5867:33;5826:32;5867:33;:::i;:::-;5393:539;;;;-1:-1:-1;5393:539:1;;-1:-1:-1;;5393:539:1:o;5937:248::-;6005:6;6013;6066:2;6054:9;6045:7;6041:23;6037:32;6034:52;;;6082:1;6079;6072:12;6034:52;-1:-1:-1;;6105:23:1;;;6175:2;6160:18;;;6147:32;;-1:-1:-1;5937:248:1:o;6382:383::-;6459:6;6467;6475;6528:2;6516:9;6507:7;6503:23;6499:32;6496:52;;;6544:1;6541;6534:12;6496:52;6580:9;6567:23;6557:33;;6637:2;6626:9;6622:18;6609:32;6599:42;;6691:2;6680:9;6676:18;6663:32;6704:31;6729:5;6704:31;:::i;:::-;6754:5;6744:15;;;6382:383;;;;;:::o;7042:658::-;7213:2;7265:21;;;7335:13;;7238:18;;;7357:22;;;7184:4;;7213:2;7436:15;;;;7410:2;7395:18;;;7184:4;7479:195;7493:6;7490:1;7487:13;7479:195;;;7558:13;;-1:-1:-1;;;;;7554:39:1;7542:52;;7649:15;;;;7614:12;;;;7590:1;7508:9;7479:195;;;-1:-1:-1;7691:3:1;;7042:658;-1:-1:-1;;;;;;7042:658:1:o;8308:127::-;8369:10;8364:3;8360:20;8357:1;8350:31;8400:4;8397:1;8390:15;8424:4;8421:1;8414:15;8440:255;8512:2;8506:9;8554:6;8542:19;;8591:18;8576:34;;8612:22;;;8573:62;8570:88;;;8638:18;;:::i;:::-;8674:2;8667:22;8440:255;:::o;8700:275::-;8771:2;8765:9;8836:2;8817:13;;-1:-1:-1;;8813:27:1;8801:40;;8871:18;8856:34;;8892:22;;;8853:62;8850:88;;;8918:18;;:::i;:::-;8954:2;8947:22;8700:275;;-1:-1:-1;8700:275:1:o;8980:683::-;9076:6;9129:3;9117:9;9108:7;9104:23;9100:33;9097:53;;;9146:1;9143;9136:12;9097:53;9179:2;9173:9;9221:3;9213:6;9209:16;9291:6;9279:10;9276:22;9255:18;9243:10;9240:34;9237:62;9234:88;;;9302:18;;:::i;:::-;9342:10;9338:2;9331:22;;9383:9;9377:16;9369:6;9362:32;9448:2;9437:9;9433:18;9427:25;9422:2;9414:6;9410:15;9403:50;9507:2;9496:9;9492:18;9486:25;9481:2;9473:6;9469:15;9462:50;9566:2;9555:9;9551:18;9545:25;9540:2;9532:6;9528:15;9521:50;9626:3;9615:9;9611:19;9605:26;9599:3;9591:6;9587:16;9580:52;9651:6;9641:16;;;8980:683;;;;:::o;9668:402::-;9870:2;9852:21;;;9909:2;9889:18;;;9882:30;9948:34;9943:2;9928:18;;9921:62;-1:-1:-1;;;10014:2:1;9999:18;;9992:36;10060:3;10045:19;;9668:402::o;10478:510::-;10532:5;10585:3;10578:4;10570:6;10566:17;10562:27;10552:55;;10603:1;10600;10593:12;10552:55;10632:6;10626:13;10658:18;10654:2;10651:26;10648:52;;;10680:18;;:::i;:::-;10724:55;10767:2;10748:13;;-1:-1:-1;;10744:27:1;10773:4;10740:38;10724:55;:::i;:::-;10804:2;10795:7;10788:19;10850:3;10843:4;10838:2;10830:6;10826:15;10822:26;10819:35;10816:55;;;10867:1;10864;10857:12;10816:55;10880:77;10954:2;10947:4;10938:7;10934:18;10927:4;10919:6;10915:17;10880:77;:::i;:::-;10975:7;10478:510;-1:-1:-1;;;;10478:510:1:o;10993:146::-;11080:13;;11102:31;11080:13;11102:31;:::i;:::-;10993:146;;;:::o;11144:164::-;11220:13;;11269;;11262:21;11252:32;;11242:60;;11298:1;11295;11288:12;11313:191;11381:4;11414:18;11406:6;11403:30;11400:56;;;11436:18;;:::i;:::-;-1:-1:-1;11481:1:1;11477:14;11493:4;11473:25;;11313:191::o;11509:750::-;11582:5;11635:3;11628:4;11620:6;11616:17;11612:27;11602:55;;11653:1;11650;11643:12;11602:55;11682:6;11676:13;11708:4;11732:68;11748:51;11796:2;11748:51;:::i;:::-;11732:68;:::i;:::-;11834:15;;;11920:1;11916:10;;;;11904:23;;11900:32;;;11865:12;;;;11944:15;;;11941:35;;;11972:1;11969;11962:12;11941:35;12008:2;12000:6;11996:15;12020:210;12036:6;12031:3;12028:15;12020:210;;;12109:3;12103:10;12126:31;12151:5;12126:31;:::i;:::-;12170:18;;12208:12;;;;12053;;12020:210;;;-1:-1:-1;12248:5:1;11509:750;-1:-1:-1;;;;;;11509:750:1:o;12264:904::-;12328:5;12381:3;12374:4;12366:6;12362:17;12358:27;12348:55;;12399:1;12396;12389:12;12348:55;12428:6;12422:13;12454:4;12478:68;12494:51;12542:2;12494:51;:::i;12478:68::-;12580:15;;;12666:1;12662:10;;;;12650:23;;12646:32;;;12611:12;;;;12690:15;;;12687:35;;;12718:1;12715;12708:12;12687:35;12754:2;12746:6;12742:15;12766:373;12782:6;12777:3;12774:15;12766:373;;;12861:3;12855:10;12897:18;12884:11;12881:35;12878:125;;;12957:1;12986:2;12982;12975:14;12878:125;13028:68;13092:3;13087:2;13073:11;13065:6;13061:24;13057:33;13028:68;:::i;:::-;13016:81;;-1:-1:-1;13117:12:1;;;;12799;;12766:373;;13173:667;13238:5;13291:3;13284:4;13276:6;13272:17;13268:27;13258:55;;13309:1;13306;13299:12;13258:55;13338:6;13332:13;13364:4;13388:68;13404:51;13452:2;13404:51;:::i;13388:68::-;13490:15;;;13576:1;13572:10;;;;13560:23;;13556:32;;;13521:12;;;;13600:15;;;13597:35;;;13628:1;13625;13618:12;13597:35;13664:2;13656:6;13652:15;13676:135;13692:6;13687:3;13684:15;13676:135;;;13758:10;;13746:23;;13789:12;;;;13709;;13676:135;;13845:1529;13941:6;13994:2;13982:9;13973:7;13969:23;13965:32;13962:52;;;14010:1;14007;14000:12;13962:52;14043:9;14037:16;14072:18;14113:2;14105:6;14102:14;14099:34;;;14129:1;14126;14119:12;14099:34;14152:22;;;;14208:6;14190:16;;;14186:29;14183:49;;;14228:1;14225;14218:12;14183:49;14254:22;;:::i;:::-;14307:2;14301:9;14335:2;14325:8;14322:16;14319:36;;;14351:1;14348;14341:12;14319:36;14378:56;14426:7;14415:8;14411:2;14407:17;14378:56;:::i;:::-;14371:5;14364:71;;14467:50;14513:2;14509;14505:11;14467:50;:::i;:::-;14462:2;14455:5;14451:14;14444:74;14550:39;14585:2;14581;14577:11;14550:39;:::i;:::-;14545:2;14538:5;14534:14;14527:63;14636:2;14632;14628:11;14622:18;14617:2;14610:5;14606:14;14599:42;14688:3;14684:2;14680:12;14674:19;14668:3;14661:5;14657:15;14650:44;14741:3;14737:2;14733:12;14727:19;14721:3;14714:5;14710:15;14703:44;14786:3;14782:2;14778:12;14772:19;14816:2;14806:8;14803:16;14800:36;;;14832:1;14829;14822:12;14800:36;14869:75;14936:7;14925:8;14921:2;14917:17;14869:75;:::i;:::-;14863:3;14856:5;14852:15;14845:100;;14984:3;14980:2;14976:12;14970:19;15014:2;15004:8;15001:16;14998:36;;;15030:1;15027;15020:12;14998:36;15067:66;15125:7;15114:8;15110:2;15106:17;15067:66;:::i;:::-;15061:3;15054:5;15050:15;15043:91;;15153:3;15195:2;15191;15187:11;15181:18;15224:2;15214:8;15211:16;15208:36;;;15240:1;15237;15230:12;15208:36;15276:67;15335:7;15324:8;15320:2;15316:17;15276:67;:::i;:::-;15260:14;;;15253:91;;;;-1:-1:-1;15264:5:1;13845:1529;-1:-1:-1;;;;;13845:1529:1:o;15379:405::-;15581:2;15563:21;;;15620:2;15600:18;;;15593:30;15659:34;15654:2;15639:18;;15632:62;-1:-1:-1;;;15725:2:1;15710:18;;15703:39;15774:3;15759:19;;15379:405::o;16144:127::-;16205:10;16200:3;16196:20;16193:1;16186:31;16236:4;16233:1;16226:15;16260:4;16257:1;16250:15;16276:127;16337:10;16332:3;16328:20;16325:1;16318:31;16368:4;16365:1;16358:15;16392:4;16389:1;16382:15;16408:128;16475:9;;;16496:11;;;16493:37;;;16510:18;;:::i;16541:127::-;16602:10;16597:3;16593:20;16590:1;16583:31;16633:4;16630:1;16623:15;16657:4;16654:1;16647:15;16673:135;16712:3;16733:17;;;16730:43;;16753:18;;:::i;:::-;-1:-1:-1;16800:1:1;16789:13;;16673:135::o;16813:622::-;16909:6;16962:3;16950:9;16941:7;16937:23;16933:33;16930:53;;;16979:1;16976;16969:12;16930:53;17012:2;17006:9;17054:3;17046:6;17042:16;17124:6;17112:10;17109:22;17088:18;17076:10;17073:34;17070:62;17067:88;;;17135:18;;:::i;:::-;17175:10;17171:2;17164:22;;17216:9;17210:16;17202:6;17195:32;17281:2;17270:9;17266:18;17260:25;17255:2;17247:6;17243:15;17236:50;17340:2;17329:9;17325:18;17319:25;17314:2;17306:6;17302:15;17295:50;17399:2;17388:9;17384:18;17378:25;17373:2;17365:6;17361:15;17354:50;17423:6;17413:16;;;16813:622;;;;:::o;18184:184::-;18254:6;18307:2;18295:9;18286:7;18282:23;18278:32;18275:52;;;18323:1;18320;18313:12;18275:52;-1:-1:-1;18346:16:1;;18184:184;-1:-1:-1;18184:184:1:o;19090:306::-;19178:6;19186;19194;19247:2;19235:9;19226:7;19222:23;19218:32;19215:52;;;19263:1;19260;19253:12;19215:52;19292:9;19286:16;19276:26;;19342:2;19331:9;19327:18;19321:25;19311:35;;19386:2;19375:9;19371:18;19365:25;19355:35;;19090:306;;;;;:::o;19808:125::-;19873:9;;;19894:10;;;19891:36;;;19907:18;;:::i;22164:202::-;22231:6;22284:2;22272:9;22263:7;22259:23;22255:32;22252:52;;;22300:1;22297;22290:12;22252:52;22323:37;22350:9;22323:37;:::i
Swarm Source
ipfs://598ada9fd3454d93a8a8e7b768edf2edffcee4269c3e83bed60791aab9c567e2
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.