More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 709 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 18288559 | 445 days ago | IN | 0 ETH | 0.00026535 | ||||
Withdraw | 18226880 | 453 days ago | IN | 0 ETH | 0.00048211 | ||||
Claim Minter Rew... | 17706326 | 526 days ago | IN | 0 ETH | 0.00308243 | ||||
Withdraw | 17703945 | 526 days ago | IN | 0 ETH | 0.00189707 | ||||
Claim Minter Rew... | 17703923 | 527 days ago | IN | 0 ETH | 0.00266372 | ||||
Claim | 17702859 | 527 days ago | IN | 0 ETH | 0.00075466 | ||||
Withdraw | 17702857 | 527 days ago | IN | 0 ETH | 0.00080791 | ||||
Claim Minter Rew... | 17701887 | 527 days ago | IN | 0 ETH | 0.00218585 | ||||
Withdraw | 17698619 | 527 days ago | IN | 0 ETH | 0.0007991 | ||||
Claim Minter Rew... | 17698572 | 527 days ago | IN | 0 ETH | 0.00395255 | ||||
Claim Minter Rew... | 17682392 | 530 days ago | IN | 0 ETH | 0.00305136 | ||||
Claim Minter Rew... | 17666863 | 532 days ago | IN | 0 ETH | 0.00584968 | ||||
Claim | 17654225 | 534 days ago | IN | 0 ETH | 0.0014988 | ||||
Claim | 17654213 | 534 days ago | IN | 0 ETH | 0.00139888 | ||||
Withdraw | 17654201 | 534 days ago | IN | 0 ETH | 0.00157325 | ||||
Claim Minter Rew... | 17653334 | 534 days ago | IN | 0 ETH | 0.00250284 | ||||
Claim Minter Rew... | 17649988 | 534 days ago | IN | 0 ETH | 0.00626702 | ||||
Claim Minter Rew... | 17647543 | 534 days ago | IN | 0 ETH | 0.00311787 | ||||
Claim Minter Rew... | 17647067 | 535 days ago | IN | 0 ETH | 0.00189503 | ||||
Claim Minter Rew... | 17634190 | 536 days ago | IN | 0 ETH | 0.00424936 | ||||
Claim Minter Rew... | 17623533 | 538 days ago | IN | 0 ETH | 0.00895438 | ||||
Claim Minter Rew... | 17619109 | 538 days ago | IN | 0 ETH | 0.00414269 | ||||
Claim Minter Rew... | 17619029 | 538 days ago | IN | 0 ETH | 0.00285171 | ||||
Claim Minter Rew... | 17618251 | 539 days ago | IN | 0 ETH | 0.00488572 | ||||
Claim Minter Rew... | 17617514 | 539 days ago | IN | 0 ETH | 0.0021464 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MintPool
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface IERC20 { function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == msg.sender, "!o"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "n0"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface ISwapPair { function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); } interface INFT { function balanceOf(address owner) external view returns (uint256 balance); function mint(address to) external; } abstract contract AbsPool is Ownable { struct UserInfo { bool isActive; uint256 amount; uint256 rewardMintDebt; uint256 calMintReward; uint256 teamNum; bool claimNFT; uint256 inviteReward; } struct PoolInfo { uint256 totalAmount; uint256 accMintPerShare; uint256 accMintReward; uint256 mintPerBlock; uint256 lastMintBlock; uint256 totalMintReward; } PoolInfo private poolInfo; mapping(address => UserInfo) private userInfo; address private _lpToken; string private _lpTokenSymbol; address private _mintRewardToken; mapping(address => address) public _invitor; mapping(address => address[]) public _binder; uint256 public _inviteFee = 1000; address public _defaultInvitor; address public immutable _weth; address public immutable _usdt; ISwapPair public immutable _wethUsdtPair; INFT public _nft; constructor( address LPToken, string memory LPTokenSymbol, address MintRewardToken, address DefaultInvitor, address MinterToken, address NFTAddress, address WETH, address USDT, address WETHUSDTPair ){ _lpToken = LPToken; _lpTokenSymbol = LPTokenSymbol; _mintRewardToken = MintRewardToken; poolInfo.lastMintBlock = block.number; _defaultInvitor = DefaultInvitor; userInfo[DefaultInvitor].isActive = true; _minterToken = MinterToken; _minterTokenUnit = 10 ** IERC20(MinterToken).decimals(); _minterRewardPerAmountPerDay = 42 * 10 ** IERC20(MintRewardToken).decimals() / 100; _nft = INFT(NFTAddress); _weth = WETH; _usdt = USDT; _wethUsdtPair = ISwapPair(WETHUSDTPair); require(IERC20(WETH).balanceOf(WETHUSDTPair) > 0 && IERC20(USDT).balanceOf(WETHUSDTPair) > 0, "weth-usdt"); _claimNFTLPUCondition = 20000 * 10 ** IERC20(USDT).decimals(); poolInfo.totalMintReward = 210000000000000000000000; } receive() external payable {} function deposit(uint256 amount, address invitor) external { require(amount > 0, "=0"); address account = msg.sender; _checkInvitor(account, invitor); UserInfo storage user = userInfo[account]; _calReward(user); _takeToken(_lpToken, account, address(this), amount); user.amount += amount; poolInfo.totalAmount += amount; user.rewardMintDebt = user.amount * poolInfo.accMintPerShare / 1e18; } function _checkInvitor(address account, address invitor) private { UserInfo storage user = userInfo[account]; uint256 inviteLen = _teamLength; address current = account; if (!user.isActive) { require(userInfo[invitor].isActive, "!Active"); _invitor[account] = invitor; _binder[invitor].push(account); for (uint256 i; i < inviteLen;) { invitor = _invitor[current]; if (address(0) == invitor) { break; } userInfo[invitor].teamNum += 1; current = invitor; unchecked{ ++i; } } user.isActive = true; } } function withdraw() public { address account = msg.sender; UserInfo storage user = userInfo[account]; _calReward(user); uint256 amount = user.amount; _giveToken(_lpToken, account, amount); user.amount -= amount; poolInfo.totalAmount -= amount; user.rewardMintDebt = user.amount * poolInfo.accMintPerShare / 1e18; } function claim() public { address account = msg.sender; UserInfo storage user = userInfo[account]; _calReward(user); uint256 pendingMint = user.calMintReward; if (pendingMint > 0) { address mintRewardToken = _mintRewardToken; address invitor = _invitor[account]; if (address(0) != invitor) { uint256 inviteAmount = pendingMint * _inviteFee / 10000; if (inviteAmount > 0) { pendingMint -= inviteAmount; _giveToken(mintRewardToken, invitor, inviteAmount); userInfo[invitor].inviteReward += inviteAmount; } } _giveToken(mintRewardToken, account, pendingMint); user.calMintReward = 0; } } function _updatePool() private { PoolInfo storage pool = poolInfo; uint256 blockNum = block.number; uint256 lastRewardBlock = pool.lastMintBlock; if (blockNum <= lastRewardBlock) { return; } pool.lastMintBlock = blockNum; uint256 accReward = pool.accMintReward; uint256 totalReward = pool.totalMintReward; if (accReward >= totalReward) { return; } uint256 totalAmount = pool.totalAmount; uint256 rewardPerBlock = pool.mintPerBlock; if (0 < totalAmount && 0 < rewardPerBlock) { uint256 reward = rewardPerBlock * (blockNum - lastRewardBlock); uint256 remainReward = totalReward - accReward; if (reward > remainReward) { reward = remainReward; } pool.accMintPerShare += reward * 1e18 / totalAmount; pool.accMintReward += reward; } } function _calReward(UserInfo storage user) private { _updatePool(); if (user.amount > 0) { uint256 accMintReward = user.amount * poolInfo.accMintPerShare / 1e18; uint256 pendingMintAmount = accMintReward - user.rewardMintDebt; if (pendingMintAmount > 0) { user.rewardMintDebt = accMintReward; user.calMintReward += pendingMintAmount; } } } function _calPendingMintReward(address account) private view returns (uint256 reward) { reward = 0; PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[account]; if (user.amount > 0) { uint256 poolPendingReward; uint256 blockNum = block.number; uint256 lastRewardBlock = pool.lastMintBlock; if (blockNum > lastRewardBlock) { poolPendingReward = pool.mintPerBlock * (blockNum - lastRewardBlock); uint256 totalReward = pool.totalMintReward; uint256 accReward = pool.accMintReward; uint256 remainReward; if (totalReward > accReward) { remainReward = totalReward - accReward; } if (poolPendingReward > remainReward) { poolPendingReward = remainReward; } } reward = user.amount * (pool.accMintPerShare + poolPendingReward * 1e18 / pool.totalAmount) / 1e18 - user.rewardMintDebt; } } function getLPPoolInfo() public view returns ( uint256 totalAmount, uint256 accMintPerShare, uint256 accMintReward, uint256 mintPerBlock, uint256 lastMintBlock, uint256 totalMintReward ) { totalAmount = poolInfo.totalAmount; accMintPerShare = poolInfo.accMintPerShare; accMintReward = poolInfo.accMintReward; mintPerBlock = poolInfo.mintPerBlock; lastMintBlock = poolInfo.lastMintBlock; totalMintReward = poolInfo.totalMintReward; } function getPoolInfo() public view returns ( uint256 totalLPAmount, uint256 totalLP, uint256 totalLPUValue, uint256 minterRewardPerAmountPerDay, uint256 minterTotalAmount, uint256 minterActiveAmount, uint256 claimNFTMinterTeamCondition, uint256 claimNFTLPUCondition, uint256 totalMinterReward, uint256 totalMinterInviteReward ){ totalLPAmount = poolInfo.totalAmount; (totalLP, totalLPUValue) = getLPInfo(); minterRewardPerAmountPerDay = _minterRewardPerAmountPerDay; minterTotalAmount = _minterTotalAmount; minterActiveAmount = _minterActiveAmount; claimNFTMinterTeamCondition = _claimNFTMinterTeamCondition; claimNFTLPUCondition = _claimNFTLPUCondition; totalMinterReward = _totalMinterReward; totalMinterInviteReward = _totalMinterInviteReward; } function getUserInfo(address account) public view returns ( bool isActive, uint256 amount, uint256 lpBalance, uint256 lpAllowance, uint256 pendingMintReward, uint256 inviteReward, uint256 teamNum, bool claimedNFT ) { UserInfo storage user = userInfo[account]; isActive = user.isActive; amount = user.amount; lpBalance = IERC20(_lpToken).balanceOf(account); lpAllowance = IERC20(_lpToken).allowance(account, address(this)); pendingMintReward = _calPendingMintReward(account) + user.calMintReward; inviteReward = user.inviteReward; teamNum = user.teamNum; claimedNFT = user.claimNFT; } function getUserExtInfo(address account) public view returns ( uint256 calMintReward, uint256 rewardMintDebt ) { UserInfo storage user = userInfo[account]; calMintReward = user.calMintReward; rewardMintDebt = user.rewardMintDebt; } function getUserTeamInfo(address account) public view returns ( uint256 amount, uint256 teamAmount ) { amount = userInfo[account].amount; teamAmount = _minterInfos[account].minterTeamAmount; } function getBaseInfo() external view returns ( address lpToken, uint256 lpTokenDecimals, string memory lpTokenSymbol, address mintRewardToken, uint256 mintRewardTokenDecimals, string memory mintRewardTokenSymbol, address minterToken, uint256 minterTokenDecimals, string memory minterTokenSymbol ){ lpToken = _lpToken; lpTokenDecimals = IERC20(lpToken).decimals(); lpTokenSymbol = _lpTokenSymbol; mintRewardToken = _mintRewardToken; mintRewardTokenDecimals = IERC20(mintRewardToken).decimals(); mintRewardTokenSymbol = IERC20(mintRewardToken).symbol(); minterToken = _minterToken; minterTokenDecimals = IERC20(minterToken).decimals(); minterTokenSymbol = IERC20(minterToken).symbol(); } function getBinderLength(address account) public view returns (uint256){ return _binder[account].length; } function setLPToken(address lpToken, string memory lpSymbol) external onlyOwner { require(poolInfo.totalAmount == 0, "started"); _lpToken = lpToken; _lpTokenSymbol = lpSymbol; } function setMintRewardToken(address rewardToken) external onlyOwner { _mintRewardToken = rewardToken; } function setMintPerBlock(uint256 mintPerBlock) external onlyOwner { _updatePool(); poolInfo.mintPerBlock = mintPerBlock; } function setTotalMintReward(uint256 totalReward) external onlyOwner { _updatePool(); poolInfo.totalMintReward = totalReward; } function setInviteFee(uint256 fee) external onlyOwner { _inviteFee = fee; } function claimBalance(address to, uint256 amount) external onlyOwner { safeTransferETH(to, amount); } function claimToken(address token, address to, uint256 amount) external onlyOwner { if (token == _lpToken) { return; } safeTransfer(token, to, amount); } function safeTransfer(address token, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); if (success && data.length > 0) { } } function safeTransferETH(address to, uint value) internal { (bool success,bytes memory data) = to.call{value : value}(new bytes(0)); if (success && data.length > 0) { } } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); if (success && data.length > 0) { } } function setDefaultInvitor(address adr) external onlyOwner { _defaultInvitor = adr; userInfo[adr].isActive = true; } struct UserMinterInfo { uint256 minterAmount; uint256 activeRecordIndex; uint256 minterClaimedReward; uint256 minterInviteAmount; uint256 minterTeamAmount; } struct MinterRecord { uint256 minterAmount; uint256 minterStart; uint256 minterEnd; uint256 lastMinterRewardTime; uint256 claimedMinterReward; } mapping(address => UserMinterInfo) private _minterInfos; uint256 public _maxActiveRecordLen = 10; mapping(address => MinterRecord[]) private _minterRecords; uint256 private constant _teamLength = 2; uint256 public _minterInviteFee = 1000; uint256 private constant _feeDivFactor = 10000; address public _minterReceiveAddress = address(0x000000000000000000000000000000000000dEaD); address private _minterToken; uint256 public _minterTokenUnit; uint256 public _minterDuration = 30 days; uint256 private _minterRewardPerAmountPerDay; uint256 private _minterTotalAmount; uint256 private _minterActiveAmount; uint256 private _claimNFTMinterTeamCondition = 5000; uint256 private _claimNFTLPUCondition; uint256 private _totalMinterReward; uint256 private _totalMinterInviteReward; bool public _pauseNFT; //invitor,joiner,index,bool mapping(address => mapping(address => mapping(uint256 => bool))) public _hasCalTeamAmount; function _giveToken(address tokenAddress, address account, uint256 amount) private { if (0 == amount) { return; } IERC20 token = IERC20(tokenAddress); require(token.balanceOf(address(this)) >= amount, "PTNE"); safeTransfer(tokenAddress, account, amount); } function _takeToken(address tokenAddress, address from, address to, uint256 tokenNum) private { IERC20 token = IERC20(tokenAddress); require(token.balanceOf(address(from)) >= tokenNum, "TNE"); safeTransferFrom(tokenAddress, from, to, tokenNum); } function mint(uint256 amount, address invitor) external { require(amount > 0, "0"); address account = msg.sender; _checkInvitor(account, invitor); _claimMinterReward(account); UserMinterInfo storage minterInfo = _minterInfos[account]; uint256 userRecordLen = _minterRecords[account].length; require(minterInfo.activeRecordIndex + _maxActiveRecordLen > userRecordLen, "ML"); _takeToken(_minterToken, account, _minterReceiveAddress, amount * _minterTokenUnit); uint256 blockTime = block.timestamp; uint256 endTime = blockTime + _minterDuration; _addRecord(account, amount, blockTime, endTime); minterInfo.minterAmount += amount; _minterTotalAmount += amount; _minterActiveAmount += amount; uint256 len = _teamLength; address current = account; UserMinterInfo storage invitorInfo; uint256 claimNFTTeamCondition = _claimNFTMinterTeamCondition; for (uint256 i; i < len;) { if (_minterInfos[current].minterTeamAmount >= claimNFTTeamCondition) { break; } invitor = _invitor[current]; if (address(0) == invitor) { break; } invitorInfo = _minterInfos[invitor]; invitorInfo.minterTeamAmount += amount; _hasCalTeamAmount[invitor][account][userRecordLen] = true; current = invitor; unchecked{ ++i; } } } function _addRecord(address account, uint256 amount, uint256 blockTime, uint256 endTime) private { _minterRecords[account].push( MinterRecord(amount, blockTime, endTime, blockTime, 0) ); } function claimMinterReward() external { address account = msg.sender; _claimMinterReward(account); } function _claimMinterReward(address account) private { UserMinterInfo storage minterInfo = _minterInfos[account]; uint256 recordLen = _minterRecords[account].length; uint256 blockTime = block.timestamp; uint256 activeRecordIndex = minterInfo.activeRecordIndex; MinterRecord storage record; uint256 rewardPerAmountPerDay = _minterRewardPerAmountPerDay; uint256 pendingReward; for (uint256 i = activeRecordIndex; i < recordLen;) { record = _minterRecords[account][i]; uint256 lastRewardTime = record.lastMinterRewardTime; uint256 endTime = record.minterEnd; uint256 amount = record.minterAmount; if (lastRewardTime < endTime && lastRewardTime < blockTime) { if (endTime > blockTime) { endTime = blockTime; } else { activeRecordIndex = i + 1; _expire(account, i, amount); minterInfo.minterAmount -= amount; } record.lastMinterRewardTime = endTime; uint256 reward = amount * rewardPerAmountPerDay * (endTime - lastRewardTime) / 1 days; record.claimedMinterReward += reward; pendingReward += reward; } unchecked{ ++i; } } minterInfo.activeRecordIndex = activeRecordIndex; _giveToken(_mintRewardToken, account, pendingReward); minterInfo.minterClaimedReward += pendingReward; _totalMinterReward += pendingReward; address invitor = _invitor[account]; if (address(0) != invitor) { uint256 inviteReward = pendingReward * _minterInviteFee / _feeDivFactor; _giveToken(_mintRewardToken, invitor, inviteReward); _totalMinterInviteReward += inviteReward; _minterInfos[invitor].minterInviteAmount += inviteReward; } } function _expire(address account, uint256 currentRecordIndex, uint256 amount) private { _minterActiveAmount -= amount; uint256 len = _teamLength; address current = account; address invitor; UserMinterInfo storage invitorInfo; for (uint256 i; i < len;) { invitor = _invitor[current]; if (address(0) == invitor) { break; } if (!_hasCalTeamAmount[invitor][account][currentRecordIndex]) { break; } invitorInfo = _minterInfos[invitor]; invitorInfo.minterTeamAmount -= amount; current = invitor; unchecked{ ++i; } } } function getRecordLength(address account) public view returns (uint256){ return _minterRecords[account].length; } function getRecords( address account, uint256 start, uint256 length ) external view returns ( uint256 returnCount, uint256[] memory amount, uint256[] memory startTime, uint256[] memory endTime, uint256[] memory lastRewardTime, uint256[] memory claimedRewards, uint256[] memory totalRewards ){ uint256 recordLen = _minterRecords[account].length; if (0 == length) { length = recordLen; } returnCount = length; amount = new uint256[](length); startTime = new uint256[](length); endTime = new uint256[](length); lastRewardTime = new uint256[](length); claimedRewards = new uint256[](length); totalRewards = new uint256[](length); uint256 index = 0; for (uint256 i = start; i < start + length; i++) { if (i >= recordLen) { return (index, amount, startTime, endTime, lastRewardTime, claimedRewards, totalRewards); } (amount[index], startTime[index], endTime[index], lastRewardTime[index], claimedRewards[index]) = getRecord(account, i); totalRewards[index] = getPendingMinterRecordReward(account, i); index++; } } function getUserMinterInfo(address account) public view returns ( uint256 minterAmount, uint256 activeRecordIndex, uint256 minterClaimedReward, uint256 minterInviteAmount, uint256 minterTeamAmount, uint256 minterPendingReward, uint256 minterTokenBalance, uint256 minterTokenAllowance ){ UserMinterInfo storage minterInfo = _minterInfos[account]; minterAmount = minterInfo.minterAmount; activeRecordIndex = minterInfo.activeRecordIndex; minterClaimedReward = minterInfo.minterClaimedReward; minterInviteAmount = minterInfo.minterInviteAmount; minterTeamAmount = minterInfo.minterTeamAmount; minterPendingReward = getPendingMinterReward(account); minterTokenBalance = IERC20(_minterToken).balanceOf(account); minterTokenAllowance = IERC20(_minterToken).allowance(account, address(this)); } function getPendingMinterRecordReward(address account, uint256 i) public view returns (uint256 pendingReward){ uint256 blockTime = block.timestamp; MinterRecord storage record = _minterRecords[account][i]; uint256 rewardPerAmountPerDay = _minterRewardPerAmountPerDay; uint256 lastRewardTime = record.lastMinterRewardTime; uint256 endTime = record.minterEnd; if (lastRewardTime < endTime && lastRewardTime < blockTime) { if (endTime > blockTime) { endTime = blockTime; } pendingReward += record.minterAmount * rewardPerAmountPerDay * (endTime - lastRewardTime) / 1 days; } } function getRecord(address account, uint256 i) public view returns ( uint256 amount, uint256 startTime, uint256 endTime, uint256 lastRewardTime, uint256 claimedReward ){ MinterRecord storage record = _minterRecords[account][i]; amount = record.minterAmount; startTime = record.minterStart; endTime = record.minterEnd; lastRewardTime = record.lastMinterRewardTime; claimedReward = record.claimedMinterReward; } function getPendingMinterReward(address account) public view returns (uint256 pendingReward){ UserMinterInfo storage minterInfo = _minterInfos[account]; uint256 recordLen = _minterRecords[account].length; uint256 blockTime = block.timestamp; uint256 activeRecordIndex = minterInfo.activeRecordIndex; MinterRecord storage record; uint256 rewardPerAmountPerDay = _minterRewardPerAmountPerDay; for (uint256 i = activeRecordIndex; i < recordLen;) { record = _minterRecords[account][i]; uint256 lastRewardTime = record.lastMinterRewardTime; uint256 endTime = record.minterEnd; if (lastRewardTime < endTime && lastRewardTime < blockTime) { if (endTime > blockTime) { endTime = blockTime; } pendingReward += record.minterAmount * rewardPerAmountPerDay * (endTime - lastRewardTime) / 1 days; } unchecked{ ++i; } } } function setMinterRewardPerAmountPerDay(uint256 a) public onlyOwner { _minterRewardPerAmountPerDay = a; } function setMinterDuration(uint256 d) public onlyOwner { if (_minterActiveAmount > 0) { require(d > _minterDuration, "longer"); } _minterDuration = d; } function setMinterToken(address t) public onlyOwner { _minterToken = t; _minterTokenUnit = 10 ** IERC20(t).decimals(); } function setMaxActiveRecordLen(uint256 l) public onlyOwner { _maxActiveRecordLen = l; } function setMinterInviteFee(uint256 f) public onlyOwner { _minterInviteFee = f; } function setMinterReceiveAddress(address r) public onlyOwner { _minterReceiveAddress = r; } function setClaimNFTMinterTeamCondition(uint256 c) public onlyOwner { _claimNFTMinterTeamCondition = c; } function setClaimNFTLPUCondition(uint256 c) public onlyOwner { _claimNFTLPUCondition = c; } function setNFT(address nft) public onlyOwner { _nft = INFT(nft); } function setPauseNFT(bool pause) public onlyOwner { _pauseNFT = pause; } function claimNFT() external { require(!_pauseNFT, "pause"); address account = msg.sender; UserInfo storage user = userInfo[account]; require(!user.claimNFT, "claimed"); require(_minterInfos[account].minterTeamAmount >= _claimNFTMinterTeamCondition && user.amount >= getNFTRewardLPCondition(), "NAC"); user.claimNFT = true; _nft.mint(account); } function getNFTRewardLPCondition() public view returns (uint256 lpCondition){ (uint256 totalLP,uint256 totalLPValue) = getLPInfo(); lpCondition = _claimNFTLPUCondition * totalLP / totalLPValue; } function getLPInfo() public view returns (uint256 totalLP, uint256 totalLPValue){ (uint256 rOther,) = __getReserves(); (uint256 rEth,uint256 rUsdt) = getETHUSDTReserves(); totalLPValue = 2 * rOther * rUsdt / rEth; totalLP = IERC20(_lpToken).totalSupply(); } function __getReserves() public view returns (uint256 rOther, uint256 rThis){ ISwapPair mainPair = ISwapPair(_lpToken); (uint r0, uint256 r1,) = mainPair.getReserves(); if (_weth < _minterToken) { rOther = r0; rThis = r1; } else { rOther = r1; rThis = r0; } } function getETHUSDTReserves() public view returns (uint256 rEth, uint256 rUsdt){ (uint r0, uint256 r1,) = _wethUsdtPair.getReserves(); if (_weth < _usdt) { rEth = r0; rUsdt = r1; } else { rEth = r1; rUsdt = r0; } } function claimMinter(address account) external { _claimMinterReward(account); } function claimMinters(address[] memory accounts) external { uint256 len = accounts.length; for (uint256 i; i < len;) { _claimMinterReward(accounts[i]); unchecked{ ++i; } } } } contract MintPool is AbsPool { constructor() AbsPool( //ZM-ETH-LP address(0x86E6c6Fd93eA7Bb809026dbe7CcaA9f571a6026C), "ZM-ETH-LP", //ETX address(0x469fc807543A766199C07d3a76A3e7A6EC1A2004), //DefaultInvitor address(0x68DAc8c072e3BF0407933984E6DBaD605D3b7874), //ZM address(0xf315EC7B1063E21d5AbaF12cA3470F57AbF47ea5), //NFT address(0x22D21831fA435B9f38E2a67Fe0a4A8CBfEAa1327), //WETH address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2), //USDT address(0xdAC17F958D2ee523a2206206994597C13D831ec7), //eth-usdt-pair address(0x0d4a11d5EEaaC28EC3F61d100daF4d40471f1852) ){ } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"__getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_binder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_defaultInvitor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_hasCalTeamAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_inviteFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_invitor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxActiveRecordLen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minterDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minterInviteFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minterReceiveAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minterTokenUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nft","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pauseNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wethUsdtPair","outputs":[{"internalType":"contract ISwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claimMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMinterReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"claimMinters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"invitor","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseInfo","outputs":[{"internalType":"address","name":"lpToken","type":"address"},{"internalType":"uint256","name":"lpTokenDecimals","type":"uint256"},{"internalType":"string","name":"lpTokenSymbol","type":"string"},{"internalType":"address","name":"mintRewardToken","type":"address"},{"internalType":"uint256","name":"mintRewardTokenDecimals","type":"uint256"},{"internalType":"string","name":"mintRewardTokenSymbol","type":"string"},{"internalType":"address","name":"minterToken","type":"address"},{"internalType":"uint256","name":"minterTokenDecimals","type":"uint256"},{"internalType":"string","name":"minterTokenSymbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getBinderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHUSDTReserves","outputs":[{"internalType":"uint256","name":"rEth","type":"uint256"},{"internalType":"uint256","name":"rUsdt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPInfo","outputs":[{"internalType":"uint256","name":"totalLP","type":"uint256"},{"internalType":"uint256","name":"totalLPValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPPoolInfo","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"accMintPerShare","type":"uint256"},{"internalType":"uint256","name":"accMintReward","type":"uint256"},{"internalType":"uint256","name":"mintPerBlock","type":"uint256"},{"internalType":"uint256","name":"lastMintBlock","type":"uint256"},{"internalType":"uint256","name":"totalMintReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTRewardLPCondition","outputs":[{"internalType":"uint256","name":"lpCondition","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getPendingMinterRecordReward","outputs":[{"internalType":"uint256","name":"pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getPendingMinterReward","outputs":[{"internalType":"uint256","name":"pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolInfo","outputs":[{"internalType":"uint256","name":"totalLPAmount","type":"uint256"},{"internalType":"uint256","name":"totalLP","type":"uint256"},{"internalType":"uint256","name":"totalLPUValue","type":"uint256"},{"internalType":"uint256","name":"minterRewardPerAmountPerDay","type":"uint256"},{"internalType":"uint256","name":"minterTotalAmount","type":"uint256"},{"internalType":"uint256","name":"minterActiveAmount","type":"uint256"},{"internalType":"uint256","name":"claimNFTMinterTeamCondition","type":"uint256"},{"internalType":"uint256","name":"claimNFTLPUCondition","type":"uint256"},{"internalType":"uint256","name":"totalMinterReward","type":"uint256"},{"internalType":"uint256","name":"totalMinterInviteReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getRecord","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"claimedReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRecordLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"getRecords","outputs":[{"internalType":"uint256","name":"returnCount","type":"uint256"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"},{"internalType":"uint256[]","name":"startTime","type":"uint256[]"},{"internalType":"uint256[]","name":"endTime","type":"uint256[]"},{"internalType":"uint256[]","name":"lastRewardTime","type":"uint256[]"},{"internalType":"uint256[]","name":"claimedRewards","type":"uint256[]"},{"internalType":"uint256[]","name":"totalRewards","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserExtInfo","outputs":[{"internalType":"uint256","name":"calMintReward","type":"uint256"},{"internalType":"uint256","name":"rewardMintDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"uint256","name":"lpAllowance","type":"uint256"},{"internalType":"uint256","name":"pendingMintReward","type":"uint256"},{"internalType":"uint256","name":"inviteReward","type":"uint256"},{"internalType":"uint256","name":"teamNum","type":"uint256"},{"internalType":"bool","name":"claimedNFT","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserMinterInfo","outputs":[{"internalType":"uint256","name":"minterAmount","type":"uint256"},{"internalType":"uint256","name":"activeRecordIndex","type":"uint256"},{"internalType":"uint256","name":"minterClaimedReward","type":"uint256"},{"internalType":"uint256","name":"minterInviteAmount","type":"uint256"},{"internalType":"uint256","name":"minterTeamAmount","type":"uint256"},{"internalType":"uint256","name":"minterPendingReward","type":"uint256"},{"internalType":"uint256","name":"minterTokenBalance","type":"uint256"},{"internalType":"uint256","name":"minterTokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserTeamInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"teamAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"invitor","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"c","type":"uint256"}],"name":"setClaimNFTLPUCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"c","type":"uint256"}],"name":"setClaimNFTMinterTeamCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setDefaultInvitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setInviteFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lpToken","type":"address"},{"internalType":"string","name":"lpSymbol","type":"string"}],"name":"setLPToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l","type":"uint256"}],"name":"setMaxActiveRecordLen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPerBlock","type":"uint256"}],"name":"setMintPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardToken","type":"address"}],"name":"setMintRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"d","type":"uint256"}],"name":"setMinterDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"f","type":"uint256"}],"name":"setMinterInviteFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setMinterReceiveAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"setMinterRewardPerAmountPerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t","type":"address"}],"name":"setMinterToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"}],"name":"setNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"pause","type":"bool"}],"name":"setPauseNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalReward","type":"uint256"}],"name":"setTotalMintReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526103e8600d819055600a601155601355601480546001600160a01b03191661dead17905562278d00601755611388601b553480156200004257600080fd5b50604080518082018252600981526805a4d2d4554482d4c560bc1b6020820152600080546001600160a01b03191633908117825592517386e6c6fd93ea7bb809026dbe7ccaa9f571a6026c9373469fc807543a766199c07d3a76a3e7a6ec1a2004927368dac8c072e3bf0407933984e6dbad605d3b78749273f315ec7b1063e21d5abaf12ca3470f57abf47ea5927322d21831fa435b9f38e2a67fe0a4a8cbfeaa13279273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29273dac17f958d2ee523a2206206994597c13d831ec792730d4a11d5eeaac28ec3f61d100daf4d40471f18529290918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600880546001600160a01b0319166001600160a01b038b1617905560096200017c898262000577565b50600a80546001600160a01b03808a166001600160a01b03199283161790925543600555600e80548984169083168117909155600090815260076020908152604091829020805460ff1916600117905560158054948a16949093168417909255805163313ce56760e01b8152905163313ce567926004838101939192918290030181865afa15801562000213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000239919062000643565b6200024690600a62000784565b6016819055506064876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b3919062000643565b620002c090600a62000784565b620002cd90602a62000795565b620002d99190620007af565b601855600f80546001600160a01b0319166001600160a01b0386811691909117909155838116608081905283821660a05290821660c08190526040516370a0823160e01b81526004810191909152600091906370a0823190602401602060405180830381865afa15801562000352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003789190620007d2565b118015620003f457506040516370a0823160e01b81526001600160a01b038281166004830152600091908416906370a0823190602401602060405180830381865afa158015620003cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f29190620007d2565b115b620004315760405162461bcd60e51b81526020600482015260096024820152681dd95d1a0b5d5cd91d60ba1b604482015260640160405180910390fd5b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000496919062000643565b620004a390600a62000784565b620004b190614e2062000795565b601c555050692c781f708c509f40000060065550620007ec95505050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004fd57607f821691505b6020821081036200051e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200057257600081815260208120601f850160051c810160208610156200054d5750805b601f850160051c820191505b818110156200056e5782815560010162000559565b5050505b505050565b81516001600160401b03811115620005935762000593620004d2565b620005ab81620005a48454620004e8565b8462000524565b602080601f831160018114620005e35760008415620005ca5750858301515b600019600386901b1c1916600185901b1785556200056e565b600085815260208120601f198616915b828110156200061457888601518255948401946001909101908401620005f3565b5085821015620006335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200065657600080fd5b815160ff811681146200066857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006c6578160001904821115620006aa57620006aa6200066f565b80851615620006b857918102915b93841c93908002906200068a565b509250929050565b600082620006df575060016200077e565b81620006ee575060006200077e565b8160018114620007075760028114620007125762000732565b60019150506200077e565b60ff8411156200072657620007266200066f565b50506001821b6200077e565b5060208310610133831016604e8410600b841016171562000757575081810a6200077e565b62000763838362000685565b80600019048211156200077a576200077a6200066f565b0290505b92915050565b60006200066860ff841683620006ce565b80820281158282048414176200077e576200077e6200066f565b600082620007cd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007e557600080fd5b5051919050565b60805160a05160c051613b0f62000838600039600081816108af01526113ca015260008181610aca015261146301526000818161094d0152818161148d0152611b350152613b0f6000f3fe6080604052600436106103a65760003560e01c80638da5cb5b116101e7578063bde057d61161010d578063e7e9605b116100a0578063f30bee181161006f578063f30bee1814610c5d578063f56e9c6614610cb8578063fa2987c514610cd8578063faf7292114610cf857600080fd5b8063e7e9605b14610bfd578063f057c56414610c13578063f0c52e4c14610c28578063f2fde38b14610c3d57600080fd5b8063cafb9b35116100dc578063cafb9b3514610b55578063cdb8acf014610b75578063d664814514610bbd578063e5053a5714610bdd57600080fd5b8063bde057d614610a98578063be3601f814610ab8578063c09d0e0f14610aec578063c990fee514610b3557600080fd5b8063a811d27711610185578063adc7924211610154578063adc79242146109f9578063af50138a14610a19578063b525066414610a39578063b75265d314610a7857600080fd5b8063a811d2771461096f578063aa8b38d914610999578063aab5a74f146109b9578063ab806d23146109d957600080fd5b806394bf804d116101c157806394bf804d146108d15780639551ae44146108f157806398300e181461091b578063a17645951461093b57600080fd5b80638da5cb5b1461085f5780638f7d928d1461087d5780639071ce791461089d57600080fd5b806343b6caf3116102cc57806369da13261161026a578063715018a611610239578063715018a6146107c95780637a37a0ed146107de5780638593b2b1146107f357806388cba6371461081357600080fd5b806369da1326146107255780636e553f65146107735780636f45b3c9146107935780637142b204146107a957600080fd5b806360246c88116102a657806360246c881461063d578063625163591461069c5780636386c1c7146106b1578063672756ad1461071057600080fd5b806343b6caf3146105f25780634e71d92d1461061257806354c8f0f61461062757600080fd5b80631b967ad4116103445780632917e00c116103135780632917e00c146105525780632c53b3f1146105a85780633ccfd60b146105c857806340d13988146105dd57600080fd5b80631b967ad4146104935780631bdb94a4146104c95780631e96ec2c146104fc57806327341faa1461051c57600080fd5b80630fb4f717116103805780630fb4f71714610414578063125bfb661461043d578063164c62801461045d5780631a98a7761461047d57600080fd5b806302f6b29e146103b257806305271188146103d4578063071ca191146103f457600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103d26103cd36600461322c565b610d18565b005b3480156103e057600080fd5b506103d26103ef36600461322c565b610d58565b34801561040057600080fd5b506103d261040f366004613261565b610d87565b34801561042057600080fd5b5061042a60115481565b6040519081526020015b60405180910390f35b34801561044957600080fd5b506103d2610458366004613283565b610e3f565b34801561046957600080fd5b506103d261047836600461322c565b610e8e565b34801561048957600080fd5b5061042a60135481565b34801561049f57600080fd5b5061042a6104ae366004613261565b6001600160a01b03166000908152600c602052604090205490565b3480156104d557600080fd5b506104e96104e43660046132bf565b610ebd565b604051610434979695949392919061332d565b34801561050857600080fd5b506103d2610517366004613425565b6111a8565b34801561052857600080fd5b5061042a610537366004613261565b6001600160a01b031660009081526012602052604090205490565b34801561055e57600080fd5b5061059361056d366004613261565b6001600160a01b0316600090815260076020526040902060038101546002909101549091565b60408051928352602083019190915201610434565b3480156105b457600080fd5b5061042a6105c3366004613261565b611233565b3480156105d457600080fd5b506103d2611329565b3480156105e957600080fd5b506105936113c2565b3480156105fe57600080fd5b506103d261060d36600461322c565b6114d3565b34801561061e57600080fd5b506103d261150a565b34801561063357600080fd5b5061042a600d5481565b34801561064957600080fd5b506106526115dd565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015261010083015261012082015261014001610434565b3480156106a857600080fd5b5061042a611629565b3480156106bd57600080fd5b506106d16106cc366004613261565b61165a565b6040805198151589526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e082015261010001610434565b34801561071c57600080fd5b506103d26117ad565b34801561073157600080fd5b5061075b610740366004613261565b600b602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610434565b34801561077f57600080fd5b506103d261078e3660046134b6565b611912565b34801561079f57600080fd5b5061042a60165481565b3480156107b557600080fd5b506103d26107c436600461322c565b6119ee565b3480156107d557600080fd5b506103d2611a1d565b3480156107ea57600080fd5b50610593611a91565b3480156107ff57600080fd5b5061075b61080e3660046134e2565b611b76565b34801561081f57600080fd5b50600154600254600354600454600554600654604080519687526020870195909552938501929092526060840152608083015260a082015260c001610434565b34801561086b57600080fd5b506000546001600160a01b031661075b565b34801561088957600080fd5b5060145461075b906001600160a01b031681565b3480156108a957600080fd5b5061075b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108dd57600080fd5b506103d26108ec3660046134b6565b611bae565b3480156108fd57600080fd5b50610906611e46565b6040516104349998979695949392919061355c565b34801561092757600080fd5b50600f5461075b906001600160a01b031681565b34801561094757600080fd5b5061075b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561097b57600080fd5b50601f546109899060ff1681565b6040519015158152602001610434565b3480156109a557600080fd5b506103d26109b43660046134e2565b61213a565b3480156109c557600080fd5b5061042a6109d43660046134e2565b612172565b3480156109e557600080fd5b50600e5461075b906001600160a01b031681565b348015610a0557600080fd5b506103d2610a143660046135df565b61222e565b348015610a2557600080fd5b506103d2610a3436600461368c565b612265565b348015610a4557600080fd5b50610989610a54366004613283565b60208080526000938452604080852082529284528284209052825290205460ff1681565b348015610a8457600080fd5b506103d2610a93366004613261565b6122a2565b348015610aa457600080fd5b506103d2610ab336600461322c565b612306565b348015610ac457600080fd5b5061075b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610af857600080fd5b50610593610b07366004613261565b6001600160a01b03166000908152600760209081526040808320600101546010909252909120600401549091565b348015610b4157600080fd5b506103d2610b5036600461322c565b612335565b348015610b6157600080fd5b506103d2610b70366004613261565b612364565b348015610b8157600080fd5b50610b95610b903660046134e2565b612370565b604080519586526020860194909452928401919091526060830152608082015260a001610434565b348015610bc957600080fd5b506103d2610bd8366004613261565b6123e9565b348015610be957600080fd5b506103d2610bf8366004613261565b612435565b348015610c0957600080fd5b5061042a60175481565b348015610c1f57600080fd5b506103d2612481565b348015610c3457600080fd5b5061059361248b565b348015610c4957600080fd5b506103d2610c58366004613261565b61254e565b348015610c6957600080fd5b50610c7d610c78366004613261565b61260e565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610434565b348015610cc457600080fd5b506103d2610cd3366004613261565b612747565b348015610ce457600080fd5b506103d2610cf336600461322c565b612793565b348015610d0457600080fd5b506103d2610d1336600461322c565b6127c2565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610d42906136ae565b60405180910390fd5b610d53612833565b600655565b6000546001600160a01b03163314610d825760405162461bcd60e51b8152600401610d42906136ae565b601155565b6000546001600160a01b03163314610db15760405162461bcd60e51b8152600401610d42906136ae565b601580546001600160a01b0319166001600160a01b0383169081179091556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e91906136ca565b610e3990600a6137e9565b60165550565b6000546001600160a01b03163314610e695760405162461bcd60e51b8152600401610d42906136ae565b6008546001600160a01b03848116911614610e8957610e8983838361290f565b505050565b6000546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610d42906136ae565b600d55565b6001600160a01b03831660009081526012602052604081205460609081908190819081908190888803610eee578098505b8897508867ffffffffffffffff811115610f0a57610f0a6133b6565b604051908082528060200260200182016040528015610f33578160200160208202803683370190505b5096508867ffffffffffffffff811115610f4f57610f4f6133b6565b604051908082528060200260200182016040528015610f78578160200160208202803683370190505b5095508867ffffffffffffffff811115610f9457610f946133b6565b604051908082528060200260200182016040528015610fbd578160200160208202803683370190505b5094508867ffffffffffffffff811115610fd957610fd96133b6565b604051908082528060200260200182016040528015611002578160200160208202803683370190505b5093508867ffffffffffffffff81111561101e5761101e6133b6565b604051908082528060200260200182016040528015611047578160200160208202803683370190505b5092508867ffffffffffffffff811115611063576110636133b6565b60405190808252806020026020018201604052801561108c578160200160208202803683370190505b50915060008a5b61109d8b8d6137f8565b811015611197578281106110b55750975061119b9050565b6110bf8d82612370565b8d87815181106110d1576110d161380b565b602002602001018d88815181106110ea576110ea61380b565b602002602001018d89815181106111035761110361380b565b602002602001018d8a8151811061111c5761111c61380b565b602002602001018d8b815181106111355761113561380b565b60209081029190910101949094529390925292909152919091525261115a8d82612172565b84838151811061116c5761116c61380b565b60209081029190910101528161118181613821565b925050808061118f90613821565b915050611093565b5050505b9397509397509397909450565b6000546001600160a01b031633146111d25760405162461bcd60e51b8152600401610d42906136ae565b6001541561120c5760405162461bcd60e51b81526020600482015260076024820152661cdd185c9d195960ca1b6044820152606401610d42565b600880546001600160a01b0319166001600160a01b0384161790556009610e8982826138ba565b6001600160a01b0381166000908152601060209081526040808320601290925282205460018201546018544291908590825b8581101561131d576001600160a01b03891660009081526012602052604090208054829081106112975761129761380b565b9060005260206000209060050201925060008360030154905060008460020154905080821080156112c757508682105b1561131357868111156112d75750855b620151806112e5838361397a565b86546112f290879061398d565b6112fc919061398d565b61130691906139a4565b611310908b6137f8565b99505b5050600101611265565b50505050505050919050565b336000818152600760205260409020611341816129c2565b600181015460085461135d906001600160a01b03168483612a40565b80826001016000828254611371919061397a565b90915550506001805482919060009061138b90849061397a565b90915550506002546001830154670de0b6b3a7640000916113ab9161398d565b6113b591906139a4565b8260020181905550505050565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144a91906139dd565b506001600160701b031691506001600160701b031691507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031610156114c6578193508092506114cd565b8093508192505b50509091565b6000546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610d42906136ae565b611505612833565b600455565b336000818152600760205260409020611522816129c2565b60038101548015610e8957600a546001600160a01b038481166000908152600b6020526040902054918116911680156115c4576000612710600d5485611568919061398d565b61157291906139a4565b905080156115c257611584818561397a565b9350611591838383612a40565b6001600160a01b038216600090815260076020526040812060060180548392906115bc9084906137f8565b90915550505b505b6115cf828685612a40565b505060006003830155505050565b600154600080808080808080806115f261248b565b809950819a50505060185496506019549550601a549450601b549350601c549250601d549150601e54905090919293949596979899565b600080600061163661248b565b915091508082601c54611649919061398d565b61165391906139a4565b9250505090565b6001600160a01b038181166000818152600760205260408082208054600182015460085493516370a0823160e01b8152600481019690965260ff90911695909484938493849384938493909116906370a0823190602401602060405180830381865afa1580156116ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f29190613a2d565b600854604051636eb1769f60e11b81526001600160a01b038d8116600483015230602483015292995091169063dd62ed3e90604401602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190613a2d565b955080600301546117788b612b01565b61178291906137f8565b600682015460048301546005909301549a9c999b509799969890979691955060ff9091169350915050565b601f5460ff16156117e85760405162461bcd60e51b8152602060048201526005602482015264706175736560d81b6044820152606401610d42565b336000818152600760205260409020600581015460ff16156118365760405162461bcd60e51b815260206004820152600760248201526618db185a5b595960ca1b6044820152606401610d42565b601b546001600160a01b0383166000908152601060205260409020600401541080159061186e5750611866611629565b816001015410155b6118a05760405162461bcd60e51b81526020600482015260036024820152624e414360e81b6044820152606401610d42565b60058101805460ff19166001179055600f546040516335313c2160e11b81526001600160a01b03848116600483015290911690636a62784290602401600060405180830381600087803b1580156118f657600080fd5b505af115801561190a573d6000803e3d6000fd5b505050505050565b600082116119475760405162461bcd60e51b815260206004820152600260248201526103d360f41b6044820152606401610d42565b336119528183612beb565b6001600160a01b0381166000908152600760205260409020611973816129c2565b60085461198b906001600160a01b0316833087612d32565b8381600101600082825461199f91906137f8565b9091555050600180548591906000906119b99084906137f8565b90915550506002546001820154670de0b6b3a7640000916119d99161398d565b6119e391906139a4565b600290910155505050565b6000546001600160a01b03163314611a185760405162461bcd60e51b8152600401610d42906136ae565b601b55565b6000546001600160a01b03163314611a475760405162461bcd60e51b8152600401610d42906136ae565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000600860009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1391906139dd565b506015546001600160701b039283169450911691506001600160a01b039081167f00000000000000000000000000000000000000000000000000000000000000009091161015611b6857819450809350611b6f565b8094508193505b5050509091565b600c6020528160005260406000208181548110611b9257600080fd5b6000918252602090912001546001600160a01b03169150829050565b60008211611be25760405162461bcd60e51b81526020600482015260016024820152600360fc1b6044820152606401610d42565b33611bed8183612beb565b611bf681612de0565b6001600160a01b038116600090815260106020908152604080832060129092529091205460115460018301548291611c2d916137f8565b11611c5f5760405162461bcd60e51b8152602060048201526002602482015261135360f21b6044820152606401610d42565b601554601454601654611c8c926001600160a01b03908116928792911690611c87908a61398d565b612d32565b6017544290600090611c9e90836137f8565b6001600160a01b0386166000908152601260209081526040808320815160a0810183528c815280840188815292810186815260608201898152608083018781528454600180820187559589529690972092516005909602909201948555925191840191909155905160028301555160038201559051600490910155905086846000016000828254611d2f91906137f8565b925050819055508660196000828254611d4891906137f8565b9250508190555086601a6000828254611d6191906137f8565b9091555050601b546002908690600090815b84811015611e38576001600160a01b038416600090815260106020526040902060040154821115611e38576001600160a01b038085166000908152600b6020526040902054169a508a15611e38576001600160a01b038b1660009081526010602052604081206004810180549195508e929091611df19084906137f8565b90915550506001600160a01b03808c16600090815260208080526040808320938e1683529281528282208b8352905220805460ff191660019081179091558b945001611d73565b505050505050505050505050565b600080606060008060606000806060600860009054906101000a90046001600160a01b03169850886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecf91906136ca565b60ff16975060098054611ee19061383a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0d9061383a565b8015611f5a5780601f10611f2f57610100808354040283529160200191611f5a565b820191906000526020600020905b815481529060010190602001808311611f3d57829003601f168201915b50505050509650600a60009054906101000a90046001600160a01b03169550856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdb91906136ca565b60ff169450856001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561201e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120469190810190613a46565b9350601560009054906101000a90046001600160a01b03169250826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c291906136ca565b60ff169150826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612105573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261212d9190810190613a46565b9050909192939495969798565b6000546001600160a01b031633146121645760405162461bcd60e51b8152600401610d42906136ae565b61216e8282613027565b5050565b6001600160a01b0382166000908152601260205260408120805442918391859081106121a0576121a061380b565b906000526020600020906005020190506000601854905060008260030154905060008360020154905080821080156121d757508482105b1561222357848111156121e75750835b620151806121f5838361397a565b855461220290869061398d565b61220c919061398d565b61221691906139a4565b61222090876137f8565b95505b505050505092915050565b805160005b81811015610e895761225d8382815181106122505761225061380b565b6020026020010151612de0565b600101612233565b6000546001600160a01b0316331461228f5760405162461bcd60e51b8152600401610d42906136ae565b601f805460ff1916911515919091179055565b6000546001600160a01b031633146122cc5760405162461bcd60e51b8152600401610d42906136ae565b600e80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146123305760405162461bcd60e51b8152600401610d42906136ae565b601355565b6000546001600160a01b0316331461235f5760405162461bcd60e51b8152600401610d42906136ae565b601855565b61236d81612de0565b50565b60008060008060008060126000896001600160a01b03166001600160a01b0316815260200190815260200160002087815481106123af576123af61380b565b600091825260209091206005909102018054600182015460028301546003840154600490940154929c919b50995091975095509350505050565b6000546001600160a01b031633146124135760405162461bcd60e51b8152600401610d42906136ae565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461245f5760405162461bcd60e51b8152600401610d42906136ae565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b3361236d81612de0565b6000806000612498611a91565b5090506000806124a66113c2565b909250905081816124b885600261398d565b6124c2919061398d565b6124cc91906139a4565b9350600860009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125459190613a2d565b94505050509091565b6000546001600160a01b031633146125785760405162461bcd60e51b8152600401610d42906136ae565b6001600160a01b0381166125b35760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610d42565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526010602052604081208054600182015460028301546003840154600485015493959294919390929091819081906126538a611233565b6015546040516370a0823160e01b81526001600160a01b038d811660048301529296509116906370a0823190602401602060405180830381865afa15801561269f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c39190613a2d565b601554604051636eb1769f60e11b81526001600160a01b038d8116600483015230602483015292955091169063dd62ed3e90604401602060405180830381865afa158015612715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127399190613a2d565b915050919395975091939597565b6000546001600160a01b031633146127715760405162461bcd60e51b8152600401610d42906136ae565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146127bd5760405162461bcd60e51b8152600401610d42906136ae565b601c55565b6000546001600160a01b031633146127ec5760405162461bcd60e51b8152600401610d42906136ae565b601a541561282e57601754811161282e5760405162461bcd60e51b81526020600482015260066024820152653637b733b2b960d11b6044820152606401610d42565b601755565b600554600190439080821161284757505050565b6004830182905560028301546005840154808210612866575050505050565b84546003860154811580159061287c5750806000105b1561290657600061288d868861397a565b612897908361398d565b905060006128a5868661397a565b9050808211156128b3578091505b836128c683670de0b6b3a764000061398d565b6128d091906139a4565b8960010160008282546128e391906137f8565b92505081905550818960020160008282546128fe91906137f8565b909155505050505b50505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161296b9190613abd565b6000604051808303816000865af19150503d80600081146129a8576040519150601f19603f3d011682016040523d82523d6000602084013e6129ad565b606091505b509150915081801561190a57505b5050505050565b6129ca612833565b60018101541561236d576000670de0b6b3a7640000600180015483600101546129f3919061398d565b6129fd91906139a4565b90506000826002015482612a11919061397a565b90508015610e895781836002018190555080836003016000828254612a3691906137f8565b9091555050505050565b80600003612a4d57505050565b6040516370a0823160e01b8152306004820152839082906001600160a01b038316906370a0823190602401602060405180830381865afa158015612a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab99190613a2d565b1015612af05760405162461bcd60e51b8152600401610d429060208082526004908201526350544e4560e01b604082015260600190565b612afb84848461290f565b50505050565b6001600160a01b038116600090815260076020526040812060018181015490919015612be4576004820154600090439080821115612b8757612b43818361397a565b8560030154612b52919061398d565b6005860154600287015491945090600081831115612b7757612b74828461397a565b90505b80861115612b83578095505b5050505b60028401548554670de0b6b3a764000090612ba2868361398d565b612bac91906139a4565b8760010154612bbb91906137f8565b8660010154612bca919061398d565b612bd491906139a4565b612bde919061397a565b95505050505b5050919050565b6001600160a01b03821660009081526007602052604090208054600290849060ff166129bb576001600160a01b03841660009081526007602052604090205460ff16612c635760405162461bcd60e51b81526020600482015260076024820152662141637469766560c81b6044820152606401610d42565b6001600160a01b038086166000818152600b602090815260408083208054958a166001600160a01b031996871681179091558352600c8252822080546001810182559083529082200180549093169091179091555b82811015612d1f576001600160a01b038083166000908152600b60205260409020541694508415612d1f576001600160a01b0385166000908152600760205260408120600401805460019290612d0f9084906137f8565b9091555085925050600101612cb8565b50825460ff191660011783555050505050565b6040516370a0823160e01b81526001600160a01b038481166004830152859183918316906370a0823190602401602060405180830381865afa158015612d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da09190613a2d565b1015612dd45760405162461bcd60e51b8152602060048201526003602482015262544e4560e81b6044820152606401610d42565b6129bb858585856130a6565b6001600160a01b0381166000908152601060209081526040808320601290925282205460018201546018549293919242929081835b86811015612f2a576001600160a01b0389166000908152601260205260409020805482908110612e4757612e4761380b565b6000918252602090912060059091020160038101546002820154825492965090918183108015612e7657508883105b15612f1c5788821115612e8b57889150612ebd565b612e968460016137f8565b9750612ea38c8583613161565b808b6000016000828254612eb7919061397a565b90915550505b60038701829055600062015180612ed4858561397a565b612ede898561398d565b612ee8919061398d565b612ef291906139a4565b905080886004016000828254612f0891906137f8565b90915550612f18905081876137f8565b9550505b836001019350505050612e15565b5060018701849055600a54612f49906001600160a01b03168983612a40565b80876002016000828254612f5d91906137f8565b9250508190555080601d6000828254612f7691906137f8565b90915550506001600160a01b038089166000908152600b602052604090205416801561301c57600061271060135484612faf919061398d565b612fb991906139a4565b600a54909150612fd3906001600160a01b03168383612a40565b80601e6000828254612fe591906137f8565b90915550506001600160a01b038216600090815260106020526040812060030180548392906130159084906137f8565b9091555050505b505050505050505050565b60408051600080825260208201928390529182916001600160a01b03861691859161305191613abd565b60006040518083038185875af1925050503d806000811461308e576040519150601f19603f3d011682016040523d82523d6000602084013e613093565b606091505b50915091508180156129bb575050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161310a9190613abd565b6000604051808303816000865af19150503d8060008114613147576040519150601f19603f3d011682016040523d82523d6000602084013e61314c565b606091505b50915091508180156129065750505050505050565b80601a6000828254613173919061397a565b909155506002905083600080805b84811015613222576001600160a01b038085166000908152600b60205260409020541692508215613222576001600160a01b03808416600090815260208080526040808320938c1683529281528282208a83529052205460ff1615613222576001600160a01b03831660009081526010602052604081206004810180549194508892909161321090849061397a565b90915550929350839250600101613181565b5050505050505050565b60006020828403121561323e57600080fd5b5035919050565b80356001600160a01b038116811461325c57600080fd5b919050565b60006020828403121561327357600080fd5b61327c82613245565b9392505050565b60008060006060848603121561329857600080fd5b6132a184613245565b92506132af60208501613245565b9150604084013590509250925092565b6000806000606084860312156132d457600080fd5b6132dd84613245565b95602085013595506040909401359392505050565b600081518084526020808501945080840160005b8381101561332257815187529582019590820190600101613306565b509495945050505050565b87815260e06020820152600061334660e08301896132f2565b828103604084015261335881896132f2565b9050828103606084015261336c81886132f2565b9050828103608084015261338081876132f2565b905082810360a084015261339481866132f2565b905082810360c08401526133a881856132f2565b9a9950505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133f5576133f56133b6565b604052919050565b600067ffffffffffffffff821115613417576134176133b6565b50601f01601f191660200190565b6000806040838503121561343857600080fd5b61344183613245565b9150602083013567ffffffffffffffff81111561345d57600080fd5b8301601f8101851361346e57600080fd5b803561348161347c826133fd565b6133cc565b81815286602083850101111561349657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080604083850312156134c957600080fd5b823591506134d960208401613245565b90509250929050565b600080604083850312156134f557600080fd5b6134fe83613245565b946020939093013593505050565b60005b8381101561352757818101518382015260200161350f565b50506000910152565b6000815180845261354881602086016020860161350c565b601f01601f19169290920160200192915050565b6001600160a01b038a81168252602082018a9052610120604083018190526000916135898483018c613530565b9150808a16606085015288608085015283820360a08501526135ab8289613530565b915080871660c0850152508460e08401528281036101008401526135cf8185613530565b9c9b505050505050505050505050565b600060208083850312156135f257600080fd5b823567ffffffffffffffff8082111561360a57600080fd5b818501915085601f83011261361e57600080fd5b813581811115613630576136306133b6565b8060051b91506136418483016133cc565b818152918301840191848101908884111561365b57600080fd5b938501935b838510156136805761367185613245565b82529385019390850190613660565b98975050505050505050565b60006020828403121561369e57600080fd5b8135801515811461327c57600080fd5b602080825260029082015261216f60f01b604082015260600190565b6000602082840312156136dc57600080fd5b815160ff8116811461327c57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561373e578160001904821115613724576137246136ed565b8085161561373157918102915b93841c9390800290613708565b509250929050565b600082613755575060016137e3565b81613762575060006137e3565b816001811461377857600281146137825761379e565b60019150506137e3565b60ff841115613793576137936136ed565b50506001821b6137e3565b5060208310610133831016604e8410600b84101617156137c1575081810a6137e3565b6137cb8383613703565b80600019048211156137df576137df6136ed565b0290505b92915050565b600061327c60ff841683613746565b808201808211156137e3576137e36136ed565b634e487b7160e01b600052603260045260246000fd5b600060018201613833576138336136ed565b5060010190565b600181811c9082168061384e57607f821691505b60208210810361386e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610e8957600081815260208120601f850160051c8101602086101561389b5750805b601f850160051c820191505b8181101561190a578281556001016138a7565b815167ffffffffffffffff8111156138d4576138d46133b6565b6138e8816138e2845461383a565b84613874565b602080601f83116001811461391d57600084156139055750858301515b600019600386901b1c1916600185901b17855561190a565b600085815260208120601f198616915b8281101561394c5788860151825594840194600190910190840161392d565b508582101561396a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156137e3576137e36136ed565b80820281158282048414176137e3576137e36136ed565b6000826139c157634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461325c57600080fd5b6000806000606084860312156139f257600080fd5b6139fb846139c6565b9250613a09602085016139c6565b9150604084015163ffffffff81168114613a2257600080fd5b809150509250925092565b600060208284031215613a3f57600080fd5b5051919050565b600060208284031215613a5857600080fd5b815167ffffffffffffffff811115613a6f57600080fd5b8201601f81018413613a8057600080fd5b8051613a8e61347c826133fd565b818152856020838501011115613aa357600080fd5b613ab482602083016020860161350c565b95945050505050565b60008251613acf81846020870161350c565b919091019291505056fea2646970667358221220de9604b507b7112cea7a5d51093ce8a926937d97c3cf5701001a669784623bae64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106103a65760003560e01c80638da5cb5b116101e7578063bde057d61161010d578063e7e9605b116100a0578063f30bee181161006f578063f30bee1814610c5d578063f56e9c6614610cb8578063fa2987c514610cd8578063faf7292114610cf857600080fd5b8063e7e9605b14610bfd578063f057c56414610c13578063f0c52e4c14610c28578063f2fde38b14610c3d57600080fd5b8063cafb9b35116100dc578063cafb9b3514610b55578063cdb8acf014610b75578063d664814514610bbd578063e5053a5714610bdd57600080fd5b8063bde057d614610a98578063be3601f814610ab8578063c09d0e0f14610aec578063c990fee514610b3557600080fd5b8063a811d27711610185578063adc7924211610154578063adc79242146109f9578063af50138a14610a19578063b525066414610a39578063b75265d314610a7857600080fd5b8063a811d2771461096f578063aa8b38d914610999578063aab5a74f146109b9578063ab806d23146109d957600080fd5b806394bf804d116101c157806394bf804d146108d15780639551ae44146108f157806398300e181461091b578063a17645951461093b57600080fd5b80638da5cb5b1461085f5780638f7d928d1461087d5780639071ce791461089d57600080fd5b806343b6caf3116102cc57806369da13261161026a578063715018a611610239578063715018a6146107c95780637a37a0ed146107de5780638593b2b1146107f357806388cba6371461081357600080fd5b806369da1326146107255780636e553f65146107735780636f45b3c9146107935780637142b204146107a957600080fd5b806360246c88116102a657806360246c881461063d578063625163591461069c5780636386c1c7146106b1578063672756ad1461071057600080fd5b806343b6caf3146105f25780634e71d92d1461061257806354c8f0f61461062757600080fd5b80631b967ad4116103445780632917e00c116103135780632917e00c146105525780632c53b3f1146105a85780633ccfd60b146105c857806340d13988146105dd57600080fd5b80631b967ad4146104935780631bdb94a4146104c95780631e96ec2c146104fc57806327341faa1461051c57600080fd5b80630fb4f717116103805780630fb4f71714610414578063125bfb661461043d578063164c62801461045d5780631a98a7761461047d57600080fd5b806302f6b29e146103b257806305271188146103d4578063071ca191146103f457600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103d26103cd36600461322c565b610d18565b005b3480156103e057600080fd5b506103d26103ef36600461322c565b610d58565b34801561040057600080fd5b506103d261040f366004613261565b610d87565b34801561042057600080fd5b5061042a60115481565b6040519081526020015b60405180910390f35b34801561044957600080fd5b506103d2610458366004613283565b610e3f565b34801561046957600080fd5b506103d261047836600461322c565b610e8e565b34801561048957600080fd5b5061042a60135481565b34801561049f57600080fd5b5061042a6104ae366004613261565b6001600160a01b03166000908152600c602052604090205490565b3480156104d557600080fd5b506104e96104e43660046132bf565b610ebd565b604051610434979695949392919061332d565b34801561050857600080fd5b506103d2610517366004613425565b6111a8565b34801561052857600080fd5b5061042a610537366004613261565b6001600160a01b031660009081526012602052604090205490565b34801561055e57600080fd5b5061059361056d366004613261565b6001600160a01b0316600090815260076020526040902060038101546002909101549091565b60408051928352602083019190915201610434565b3480156105b457600080fd5b5061042a6105c3366004613261565b611233565b3480156105d457600080fd5b506103d2611329565b3480156105e957600080fd5b506105936113c2565b3480156105fe57600080fd5b506103d261060d36600461322c565b6114d3565b34801561061e57600080fd5b506103d261150a565b34801561063357600080fd5b5061042a600d5481565b34801561064957600080fd5b506106526115dd565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015261010083015261012082015261014001610434565b3480156106a857600080fd5b5061042a611629565b3480156106bd57600080fd5b506106d16106cc366004613261565b61165a565b6040805198151589526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e082015261010001610434565b34801561071c57600080fd5b506103d26117ad565b34801561073157600080fd5b5061075b610740366004613261565b600b602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610434565b34801561077f57600080fd5b506103d261078e3660046134b6565b611912565b34801561079f57600080fd5b5061042a60165481565b3480156107b557600080fd5b506103d26107c436600461322c565b6119ee565b3480156107d557600080fd5b506103d2611a1d565b3480156107ea57600080fd5b50610593611a91565b3480156107ff57600080fd5b5061075b61080e3660046134e2565b611b76565b34801561081f57600080fd5b50600154600254600354600454600554600654604080519687526020870195909552938501929092526060840152608083015260a082015260c001610434565b34801561086b57600080fd5b506000546001600160a01b031661075b565b34801561088957600080fd5b5060145461075b906001600160a01b031681565b3480156108a957600080fd5b5061075b7f0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f185281565b3480156108dd57600080fd5b506103d26108ec3660046134b6565b611bae565b3480156108fd57600080fd5b50610906611e46565b6040516104349998979695949392919061355c565b34801561092757600080fd5b50600f5461075b906001600160a01b031681565b34801561094757600080fd5b5061075b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561097b57600080fd5b50601f546109899060ff1681565b6040519015158152602001610434565b3480156109a557600080fd5b506103d26109b43660046134e2565b61213a565b3480156109c557600080fd5b5061042a6109d43660046134e2565b612172565b3480156109e557600080fd5b50600e5461075b906001600160a01b031681565b348015610a0557600080fd5b506103d2610a143660046135df565b61222e565b348015610a2557600080fd5b506103d2610a3436600461368c565b612265565b348015610a4557600080fd5b50610989610a54366004613283565b60208080526000938452604080852082529284528284209052825290205460ff1681565b348015610a8457600080fd5b506103d2610a93366004613261565b6122a2565b348015610aa457600080fd5b506103d2610ab336600461322c565b612306565b348015610ac457600080fd5b5061075b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b348015610af857600080fd5b50610593610b07366004613261565b6001600160a01b03166000908152600760209081526040808320600101546010909252909120600401549091565b348015610b4157600080fd5b506103d2610b5036600461322c565b612335565b348015610b6157600080fd5b506103d2610b70366004613261565b612364565b348015610b8157600080fd5b50610b95610b903660046134e2565b612370565b604080519586526020860194909452928401919091526060830152608082015260a001610434565b348015610bc957600080fd5b506103d2610bd8366004613261565b6123e9565b348015610be957600080fd5b506103d2610bf8366004613261565b612435565b348015610c0957600080fd5b5061042a60175481565b348015610c1f57600080fd5b506103d2612481565b348015610c3457600080fd5b5061059361248b565b348015610c4957600080fd5b506103d2610c58366004613261565b61254e565b348015610c6957600080fd5b50610c7d610c78366004613261565b61260e565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610434565b348015610cc457600080fd5b506103d2610cd3366004613261565b612747565b348015610ce457600080fd5b506103d2610cf336600461322c565b612793565b348015610d0457600080fd5b506103d2610d1336600461322c565b6127c2565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610d42906136ae565b60405180910390fd5b610d53612833565b600655565b6000546001600160a01b03163314610d825760405162461bcd60e51b8152600401610d42906136ae565b601155565b6000546001600160a01b03163314610db15760405162461bcd60e51b8152600401610d42906136ae565b601580546001600160a01b0319166001600160a01b0383169081179091556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e91906136ca565b610e3990600a6137e9565b60165550565b6000546001600160a01b03163314610e695760405162461bcd60e51b8152600401610d42906136ae565b6008546001600160a01b03848116911614610e8957610e8983838361290f565b505050565b6000546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610d42906136ae565b600d55565b6001600160a01b03831660009081526012602052604081205460609081908190819081908190888803610eee578098505b8897508867ffffffffffffffff811115610f0a57610f0a6133b6565b604051908082528060200260200182016040528015610f33578160200160208202803683370190505b5096508867ffffffffffffffff811115610f4f57610f4f6133b6565b604051908082528060200260200182016040528015610f78578160200160208202803683370190505b5095508867ffffffffffffffff811115610f9457610f946133b6565b604051908082528060200260200182016040528015610fbd578160200160208202803683370190505b5094508867ffffffffffffffff811115610fd957610fd96133b6565b604051908082528060200260200182016040528015611002578160200160208202803683370190505b5093508867ffffffffffffffff81111561101e5761101e6133b6565b604051908082528060200260200182016040528015611047578160200160208202803683370190505b5092508867ffffffffffffffff811115611063576110636133b6565b60405190808252806020026020018201604052801561108c578160200160208202803683370190505b50915060008a5b61109d8b8d6137f8565b811015611197578281106110b55750975061119b9050565b6110bf8d82612370565b8d87815181106110d1576110d161380b565b602002602001018d88815181106110ea576110ea61380b565b602002602001018d89815181106111035761110361380b565b602002602001018d8a8151811061111c5761111c61380b565b602002602001018d8b815181106111355761113561380b565b60209081029190910101949094529390925292909152919091525261115a8d82612172565b84838151811061116c5761116c61380b565b60209081029190910101528161118181613821565b925050808061118f90613821565b915050611093565b5050505b9397509397509397909450565b6000546001600160a01b031633146111d25760405162461bcd60e51b8152600401610d42906136ae565b6001541561120c5760405162461bcd60e51b81526020600482015260076024820152661cdd185c9d195960ca1b6044820152606401610d42565b600880546001600160a01b0319166001600160a01b0384161790556009610e8982826138ba565b6001600160a01b0381166000908152601060209081526040808320601290925282205460018201546018544291908590825b8581101561131d576001600160a01b03891660009081526012602052604090208054829081106112975761129761380b565b9060005260206000209060050201925060008360030154905060008460020154905080821080156112c757508682105b1561131357868111156112d75750855b620151806112e5838361397a565b86546112f290879061398d565b6112fc919061398d565b61130691906139a4565b611310908b6137f8565b99505b5050600101611265565b50505050505050919050565b336000818152600760205260409020611341816129c2565b600181015460085461135d906001600160a01b03168483612a40565b80826001016000828254611371919061397a565b90915550506001805482919060009061138b90849061397a565b90915550506002546001830154670de0b6b3a7640000916113ab9161398d565b6113b591906139a4565b8260020181905550505050565b6000806000807f0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f18526001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144a91906139dd565b506001600160701b031691506001600160701b031691507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b03167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031610156114c6578193508092506114cd565b8093508192505b50509091565b6000546001600160a01b031633146114fd5760405162461bcd60e51b8152600401610d42906136ae565b611505612833565b600455565b336000818152600760205260409020611522816129c2565b60038101548015610e8957600a546001600160a01b038481166000908152600b6020526040902054918116911680156115c4576000612710600d5485611568919061398d565b61157291906139a4565b905080156115c257611584818561397a565b9350611591838383612a40565b6001600160a01b038216600090815260076020526040812060060180548392906115bc9084906137f8565b90915550505b505b6115cf828685612a40565b505060006003830155505050565b600154600080808080808080806115f261248b565b809950819a50505060185496506019549550601a549450601b549350601c549250601d549150601e54905090919293949596979899565b600080600061163661248b565b915091508082601c54611649919061398d565b61165391906139a4565b9250505090565b6001600160a01b038181166000818152600760205260408082208054600182015460085493516370a0823160e01b8152600481019690965260ff90911695909484938493849384938493909116906370a0823190602401602060405180830381865afa1580156116ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f29190613a2d565b600854604051636eb1769f60e11b81526001600160a01b038d8116600483015230602483015292995091169063dd62ed3e90604401602060405180830381865afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190613a2d565b955080600301546117788b612b01565b61178291906137f8565b600682015460048301546005909301549a9c999b509799969890979691955060ff9091169350915050565b601f5460ff16156117e85760405162461bcd60e51b8152602060048201526005602482015264706175736560d81b6044820152606401610d42565b336000818152600760205260409020600581015460ff16156118365760405162461bcd60e51b815260206004820152600760248201526618db185a5b595960ca1b6044820152606401610d42565b601b546001600160a01b0383166000908152601060205260409020600401541080159061186e5750611866611629565b816001015410155b6118a05760405162461bcd60e51b81526020600482015260036024820152624e414360e81b6044820152606401610d42565b60058101805460ff19166001179055600f546040516335313c2160e11b81526001600160a01b03848116600483015290911690636a62784290602401600060405180830381600087803b1580156118f657600080fd5b505af115801561190a573d6000803e3d6000fd5b505050505050565b600082116119475760405162461bcd60e51b815260206004820152600260248201526103d360f41b6044820152606401610d42565b336119528183612beb565b6001600160a01b0381166000908152600760205260409020611973816129c2565b60085461198b906001600160a01b0316833087612d32565b8381600101600082825461199f91906137f8565b9091555050600180548591906000906119b99084906137f8565b90915550506002546001820154670de0b6b3a7640000916119d99161398d565b6119e391906139a4565b600290910155505050565b6000546001600160a01b03163314611a185760405162461bcd60e51b8152600401610d42906136ae565b601b55565b6000546001600160a01b03163314611a475760405162461bcd60e51b8152600401610d42906136ae565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000806000600860009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1391906139dd565b506015546001600160701b039283169450911691506001600160a01b039081167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29091161015611b6857819450809350611b6f565b8094508193505b5050509091565b600c6020528160005260406000208181548110611b9257600080fd5b6000918252602090912001546001600160a01b03169150829050565b60008211611be25760405162461bcd60e51b81526020600482015260016024820152600360fc1b6044820152606401610d42565b33611bed8183612beb565b611bf681612de0565b6001600160a01b038116600090815260106020908152604080832060129092529091205460115460018301548291611c2d916137f8565b11611c5f5760405162461bcd60e51b8152602060048201526002602482015261135360f21b6044820152606401610d42565b601554601454601654611c8c926001600160a01b03908116928792911690611c87908a61398d565b612d32565b6017544290600090611c9e90836137f8565b6001600160a01b0386166000908152601260209081526040808320815160a0810183528c815280840188815292810186815260608201898152608083018781528454600180820187559589529690972092516005909602909201948555925191840191909155905160028301555160038201559051600490910155905086846000016000828254611d2f91906137f8565b925050819055508660196000828254611d4891906137f8565b9250508190555086601a6000828254611d6191906137f8565b9091555050601b546002908690600090815b84811015611e38576001600160a01b038416600090815260106020526040902060040154821115611e38576001600160a01b038085166000908152600b6020526040902054169a508a15611e38576001600160a01b038b1660009081526010602052604081206004810180549195508e929091611df19084906137f8565b90915550506001600160a01b03808c16600090815260208080526040808320938e1683529281528282208b8352905220805460ff191660019081179091558b945001611d73565b505050505050505050505050565b600080606060008060606000806060600860009054906101000a90046001600160a01b03169850886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecf91906136ca565b60ff16975060098054611ee19061383a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0d9061383a565b8015611f5a5780601f10611f2f57610100808354040283529160200191611f5a565b820191906000526020600020905b815481529060010190602001808311611f3d57829003601f168201915b50505050509650600a60009054906101000a90046001600160a01b03169550856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdb91906136ca565b60ff169450856001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561201e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120469190810190613a46565b9350601560009054906101000a90046001600160a01b03169250826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561209e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c291906136ca565b60ff169150826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612105573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261212d9190810190613a46565b9050909192939495969798565b6000546001600160a01b031633146121645760405162461bcd60e51b8152600401610d42906136ae565b61216e8282613027565b5050565b6001600160a01b0382166000908152601260205260408120805442918391859081106121a0576121a061380b565b906000526020600020906005020190506000601854905060008260030154905060008360020154905080821080156121d757508482105b1561222357848111156121e75750835b620151806121f5838361397a565b855461220290869061398d565b61220c919061398d565b61221691906139a4565b61222090876137f8565b95505b505050505092915050565b805160005b81811015610e895761225d8382815181106122505761225061380b565b6020026020010151612de0565b600101612233565b6000546001600160a01b0316331461228f5760405162461bcd60e51b8152600401610d42906136ae565b601f805460ff1916911515919091179055565b6000546001600160a01b031633146122cc5760405162461bcd60e51b8152600401610d42906136ae565b600e80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b6000546001600160a01b031633146123305760405162461bcd60e51b8152600401610d42906136ae565b601355565b6000546001600160a01b0316331461235f5760405162461bcd60e51b8152600401610d42906136ae565b601855565b61236d81612de0565b50565b60008060008060008060126000896001600160a01b03166001600160a01b0316815260200190815260200160002087815481106123af576123af61380b565b600091825260209091206005909102018054600182015460028301546003840154600490940154929c919b50995091975095509350505050565b6000546001600160a01b031633146124135760405162461bcd60e51b8152600401610d42906136ae565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461245f5760405162461bcd60e51b8152600401610d42906136ae565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b3361236d81612de0565b6000806000612498611a91565b5090506000806124a66113c2565b909250905081816124b885600261398d565b6124c2919061398d565b6124cc91906139a4565b9350600860009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125459190613a2d565b94505050509091565b6000546001600160a01b031633146125785760405162461bcd60e51b8152600401610d42906136ae565b6001600160a01b0381166125b35760405162461bcd60e51b815260206004820152600260248201526106e360f41b6044820152606401610d42565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526010602052604081208054600182015460028301546003840154600485015493959294919390929091819081906126538a611233565b6015546040516370a0823160e01b81526001600160a01b038d811660048301529296509116906370a0823190602401602060405180830381865afa15801561269f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c39190613a2d565b601554604051636eb1769f60e11b81526001600160a01b038d8116600483015230602483015292955091169063dd62ed3e90604401602060405180830381865afa158015612715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127399190613a2d565b915050919395975091939597565b6000546001600160a01b031633146127715760405162461bcd60e51b8152600401610d42906136ae565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146127bd5760405162461bcd60e51b8152600401610d42906136ae565b601c55565b6000546001600160a01b031633146127ec5760405162461bcd60e51b8152600401610d42906136ae565b601a541561282e57601754811161282e5760405162461bcd60e51b81526020600482015260066024820152653637b733b2b960d11b6044820152606401610d42565b601755565b600554600190439080821161284757505050565b6004830182905560028301546005840154808210612866575050505050565b84546003860154811580159061287c5750806000105b1561290657600061288d868861397a565b612897908361398d565b905060006128a5868661397a565b9050808211156128b3578091505b836128c683670de0b6b3a764000061398d565b6128d091906139a4565b8960010160008282546128e391906137f8565b92505081905550818960020160008282546128fe91906137f8565b909155505050505b50505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161296b9190613abd565b6000604051808303816000865af19150503d80600081146129a8576040519150601f19603f3d011682016040523d82523d6000602084013e6129ad565b606091505b509150915081801561190a57505b5050505050565b6129ca612833565b60018101541561236d576000670de0b6b3a7640000600180015483600101546129f3919061398d565b6129fd91906139a4565b90506000826002015482612a11919061397a565b90508015610e895781836002018190555080836003016000828254612a3691906137f8565b9091555050505050565b80600003612a4d57505050565b6040516370a0823160e01b8152306004820152839082906001600160a01b038316906370a0823190602401602060405180830381865afa158015612a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab99190613a2d565b1015612af05760405162461bcd60e51b8152600401610d429060208082526004908201526350544e4560e01b604082015260600190565b612afb84848461290f565b50505050565b6001600160a01b038116600090815260076020526040812060018181015490919015612be4576004820154600090439080821115612b8757612b43818361397a565b8560030154612b52919061398d565b6005860154600287015491945090600081831115612b7757612b74828461397a565b90505b80861115612b83578095505b5050505b60028401548554670de0b6b3a764000090612ba2868361398d565b612bac91906139a4565b8760010154612bbb91906137f8565b8660010154612bca919061398d565b612bd491906139a4565b612bde919061397a565b95505050505b5050919050565b6001600160a01b03821660009081526007602052604090208054600290849060ff166129bb576001600160a01b03841660009081526007602052604090205460ff16612c635760405162461bcd60e51b81526020600482015260076024820152662141637469766560c81b6044820152606401610d42565b6001600160a01b038086166000818152600b602090815260408083208054958a166001600160a01b031996871681179091558352600c8252822080546001810182559083529082200180549093169091179091555b82811015612d1f576001600160a01b038083166000908152600b60205260409020541694508415612d1f576001600160a01b0385166000908152600760205260408120600401805460019290612d0f9084906137f8565b9091555085925050600101612cb8565b50825460ff191660011783555050505050565b6040516370a0823160e01b81526001600160a01b038481166004830152859183918316906370a0823190602401602060405180830381865afa158015612d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da09190613a2d565b1015612dd45760405162461bcd60e51b8152602060048201526003602482015262544e4560e81b6044820152606401610d42565b6129bb858585856130a6565b6001600160a01b0381166000908152601060209081526040808320601290925282205460018201546018549293919242929081835b86811015612f2a576001600160a01b0389166000908152601260205260409020805482908110612e4757612e4761380b565b6000918252602090912060059091020160038101546002820154825492965090918183108015612e7657508883105b15612f1c5788821115612e8b57889150612ebd565b612e968460016137f8565b9750612ea38c8583613161565b808b6000016000828254612eb7919061397a565b90915550505b60038701829055600062015180612ed4858561397a565b612ede898561398d565b612ee8919061398d565b612ef291906139a4565b905080886004016000828254612f0891906137f8565b90915550612f18905081876137f8565b9550505b836001019350505050612e15565b5060018701849055600a54612f49906001600160a01b03168983612a40565b80876002016000828254612f5d91906137f8565b9250508190555080601d6000828254612f7691906137f8565b90915550506001600160a01b038089166000908152600b602052604090205416801561301c57600061271060135484612faf919061398d565b612fb991906139a4565b600a54909150612fd3906001600160a01b03168383612a40565b80601e6000828254612fe591906137f8565b90915550506001600160a01b038216600090815260106020526040812060030180548392906130159084906137f8565b9091555050505b505050505050505050565b60408051600080825260208201928390529182916001600160a01b03861691859161305191613abd565b60006040518083038185875af1925050503d806000811461308e576040519150601f19603f3d011682016040523d82523d6000602084013e613093565b606091505b50915091508180156129bb575050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161310a9190613abd565b6000604051808303816000865af19150503d8060008114613147576040519150601f19603f3d011682016040523d82523d6000602084013e61314c565b606091505b50915091508180156129065750505050505050565b80601a6000828254613173919061397a565b909155506002905083600080805b84811015613222576001600160a01b038085166000908152600b60205260409020541692508215613222576001600160a01b03808416600090815260208080526040808320938c1683529281528282208a83529052205460ff1615613222576001600160a01b03831660009081526010602052604081206004810180549194508892909161321090849061397a565b90915550929350839250600101613181565b5050505050505050565b60006020828403121561323e57600080fd5b5035919050565b80356001600160a01b038116811461325c57600080fd5b919050565b60006020828403121561327357600080fd5b61327c82613245565b9392505050565b60008060006060848603121561329857600080fd5b6132a184613245565b92506132af60208501613245565b9150604084013590509250925092565b6000806000606084860312156132d457600080fd5b6132dd84613245565b95602085013595506040909401359392505050565b600081518084526020808501945080840160005b8381101561332257815187529582019590820190600101613306565b509495945050505050565b87815260e06020820152600061334660e08301896132f2565b828103604084015261335881896132f2565b9050828103606084015261336c81886132f2565b9050828103608084015261338081876132f2565b905082810360a084015261339481866132f2565b905082810360c08401526133a881856132f2565b9a9950505050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133f5576133f56133b6565b604052919050565b600067ffffffffffffffff821115613417576134176133b6565b50601f01601f191660200190565b6000806040838503121561343857600080fd5b61344183613245565b9150602083013567ffffffffffffffff81111561345d57600080fd5b8301601f8101851361346e57600080fd5b803561348161347c826133fd565b6133cc565b81815286602083850101111561349657600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080604083850312156134c957600080fd5b823591506134d960208401613245565b90509250929050565b600080604083850312156134f557600080fd5b6134fe83613245565b946020939093013593505050565b60005b8381101561352757818101518382015260200161350f565b50506000910152565b6000815180845261354881602086016020860161350c565b601f01601f19169290920160200192915050565b6001600160a01b038a81168252602082018a9052610120604083018190526000916135898483018c613530565b9150808a16606085015288608085015283820360a08501526135ab8289613530565b915080871660c0850152508460e08401528281036101008401526135cf8185613530565b9c9b505050505050505050505050565b600060208083850312156135f257600080fd5b823567ffffffffffffffff8082111561360a57600080fd5b818501915085601f83011261361e57600080fd5b813581811115613630576136306133b6565b8060051b91506136418483016133cc565b818152918301840191848101908884111561365b57600080fd5b938501935b838510156136805761367185613245565b82529385019390850190613660565b98975050505050505050565b60006020828403121561369e57600080fd5b8135801515811461327c57600080fd5b602080825260029082015261216f60f01b604082015260600190565b6000602082840312156136dc57600080fd5b815160ff8116811461327c57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561373e578160001904821115613724576137246136ed565b8085161561373157918102915b93841c9390800290613708565b509250929050565b600082613755575060016137e3565b81613762575060006137e3565b816001811461377857600281146137825761379e565b60019150506137e3565b60ff841115613793576137936136ed565b50506001821b6137e3565b5060208310610133831016604e8410600b84101617156137c1575081810a6137e3565b6137cb8383613703565b80600019048211156137df576137df6136ed565b0290505b92915050565b600061327c60ff841683613746565b808201808211156137e3576137e36136ed565b634e487b7160e01b600052603260045260246000fd5b600060018201613833576138336136ed565b5060010190565b600181811c9082168061384e57607f821691505b60208210810361386e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610e8957600081815260208120601f850160051c8101602086101561389b5750805b601f850160051c820191505b8181101561190a578281556001016138a7565b815167ffffffffffffffff8111156138d4576138d46133b6565b6138e8816138e2845461383a565b84613874565b602080601f83116001811461391d57600084156139055750858301515b600019600386901b1c1916600185901b17855561190a565b600085815260208120601f198616915b8281101561394c5788860151825594840194600190910190840161392d565b508582101561396a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156137e3576137e36136ed565b80820281158282048414176137e3576137e36136ed565b6000826139c157634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160701b038116811461325c57600080fd5b6000806000606084860312156139f257600080fd5b6139fb846139c6565b9250613a09602085016139c6565b9150604084015163ffffffff81168114613a2257600080fd5b809150509250925092565b600060208284031215613a3f57600080fd5b5051919050565b600060208284031215613a5857600080fd5b815167ffffffffffffffff811115613a6f57600080fd5b8201601f81018413613a8057600080fd5b8051613a8e61347c826133fd565b818152856020838501011115613aa357600080fd5b613ab482602083016020860161350c565b95945050505050565b60008251613acf81846020870161350c565b919091019291505056fea2646970667358221220de9604b507b7112cea7a5d51093ce8a926937d97c3cf5701001a669784623bae64736f6c63430008130033
Deployed Bytecode Sourcemap
29797:711:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13526:149;;;;;;;;;;-1:-1:-1;13526:149:0;;;;;:::i;:::-;;:::i;:::-;;27053:101;;;;;;;;;;-1:-1:-1;27053:101:0;;;;;:::i;:::-;;:::i;26902:143::-;;;;;;;;;;-1:-1:-1;26902:143:0;;;;;:::i;:::-;;:::i;15548:39::-;;;;;;;;;;;;;;;;;;;714:25:1;;;702:2;687:18;15548:39:0;;;;;;;;13903:198;;;;;;;;;;-1:-1:-1;13903:198:0;;;;;:::i;:::-;;:::i;13683:89::-;;;;;;;;;;-1:-1:-1;13683:89:0;;;;;:::i;:::-;;:::i;15709:38::-;;;;;;;;;;;;;;;;12903:120;;;;;;;;;;-1:-1:-1;12903:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;12992:16:0;12966:7;12992:16;;;:7;:16;;;;;:23;;12903:120;21987:1326;;;;;;;;;;-1:-1:-1;21987:1326:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;13031:209::-;;;;;;;;;;-1:-1:-1;13031:209:0;;;;;:::i;:::-;;:::i;21852:127::-;;;;;;;;;;-1:-1:-1;21852:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;21941:23:0;21915:7;21941:23;;;:14;:23;;;;;:30;;21852:127;11516:277;;;;;;;;;;-1:-1:-1;11516:277:0;;;;;:::i;:::-;-1:-1:-1;;;;;11676:17:0;11588:21;11676:17;;;:8;:17;;;;;11720:18;;;;11766:19;;;;;11720:18;;11516:277;;;;;4742:25:1;;;4798:2;4783:18;;4776:34;;;;4715:18;11516:277:0;4568:248:1;25510:1052:0;;;;;;;;;;-1:-1:-1;25510:1052:0;;;;;:::i;:::-;;:::i;5518:397::-;;;;;;;;;;;;;:::i;29125:307::-;;;;;;;;;;;;;:::i;13373:145::-;;;;;;;;;;-1:-1:-1;13373:145:0;;;;;:::i;:::-;;:::i;5923:835::-;;;;;;;;;;;;;:::i;2885:32::-;;;;;;;;;;;;;;;;9861:929;;;;;;;;;;;;;:::i;:::-;;;;5220:25:1;;;5276:2;5261:18;;5254:34;;;;5304:18;;;5297:34;;;;5362:2;5347:18;;5340:34;;;;5405:3;5390:19;;5383:35;;;;5449:3;5434:19;;5427:35;5493:3;5478:19;;5471:35;5537:3;5522:19;;5515:35;5581:3;5566:19;;5559:35;5625:3;5610:19;;5603:35;5207:3;5192:19;9861:929:0;4821:823:1;28222:218:0;;;;;;;;;;;;;:::i;10798:710::-;;;;;;;;;;-1:-1:-1;10798:710:0;;;;;:::i;:::-;;:::i;:::-;;;;6005:14:1;;5998:22;5980:41;;6052:2;6037:18;;6030:34;;;;6080:18;;;6073:34;;;;6138:2;6123:18;;6116:34;;;;6181:3;6166:19;;6159:35;6225:3;6210:19;;6203:35;6269:3;6254:19;;6247:35;6326:14;6319:22;6313:3;6298:19;;6291:51;5967:3;5952:19;10798:710:0;5649:699:1;27801:413:0;;;;;;;;;;;;;:::i;2784:43::-;;;;;;;;;;-1:-1:-1;2784:43:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2784:43:0;;;;;;-1:-1:-1;;;;;6517:32:1;;;6499:51;;6487:2;6472:18;2784:43:0;6353:203:1;4242:485:0;;;;;;;;;;-1:-1:-1;4242:485:0;;;;;:::i;:::-;;:::i;15941:31::-;;;;;;;;;;;;;;;;27378:119;;;;;;;;;;-1:-1:-1;27378:119:0;;;;;:::i;:::-;;:::i;1434:148::-;;;;;;;;;;;;;:::i;28754:363::-;;;;;;;;;;;;;:::i;2834:44::-;;;;;;;;;;-1:-1:-1;2834:44:0;;;;;:::i;:::-;;:::i;9330:523::-;;;;;;;;;;-1:-1:-1;9574:8:0;:20;9623:24;;9674:22;;9722:21;;9770:22;;9821:24;;9330:523;;;7366:25:1;;;7422:2;7407:18;;7400:34;;;;7450:18;;;7443:34;;;;7508:2;7493:18;;7486:34;7551:3;7536:19;;7529:35;7595:3;7580:19;;7573:35;7353:3;7338:19;9330:523:0;7079:535:1;1252:79:0;;;;;;;;;;-1:-1:-1;1290:7:0;1317:6;-1:-1:-1;;;;;1317:6:0;1252:79;;15807:90;;;;;;;;;;-1:-1:-1;15807:90:0;;;;-1:-1:-1;;;;;15807:90:0;;;3037:40;;;;;;;;;;;;;;;17128:1570;;;;;;;;;;-1:-1:-1;17128:1570:0;;;;;:::i;:::-;;:::i;12038:857::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;3084:16::-;;;;;;;;;;-1:-1:-1;3084:16:0;;;;-1:-1:-1;;;;;3084:16:0;;;2963:30;;;;;;;;;;;;;;;16354:21;;;;;;;;;;-1:-1:-1;16354:21:0;;;;;;;;;;;9829:14:1;;9822:22;9804:41;;9792:2;9777:18;16354:21:0;9664:187:1;13780:115:0;;;;;;;;;;-1:-1:-1;13780:115:0;;;;;:::i;:::-;;:::i;24279:697::-;;;;;;;;;;-1:-1:-1;24279:697:0;;;;;:::i;:::-;;:::i;2924:30::-;;;;;;;;;;-1:-1:-1;2924:30:0;;;;-1:-1:-1;;;;;2924:30:0;;;29541:249;;;;;;;;;;-1:-1:-1;29541:249:0;;;;;:::i;:::-;;:::i;27707:86::-;;;;;;;;;;-1:-1:-1;27707:86:0;;;;;:::i;:::-;;:::i;16417:89::-;;;;;;;;;;-1:-1:-1;16417:89:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14916:139;;;;;;;;;;-1:-1:-1;14916:139:0;;;;;:::i;:::-;;:::i;27162:95::-;;;;;;;;;;-1:-1:-1;27162:95:0;;;;;:::i;:::-;;:::i;3000:30::-;;;;;;;;;;;;;;;11801:229;;;;;;;;;;-1:-1:-1;11801:229:0;;;;;:::i;:::-;-1:-1:-1;;;;;11936:17:0;11874:14;11936:17;;;:8;:17;;;;;;;;:24;;;11984:12;:21;;;;;;:38;;;11936:24;;11801:229;26570:119;;;;;;;;;;-1:-1:-1;26570:119:0;;;;;:::i;:::-;;:::i;29440:93::-;;;;;;;;;;-1:-1:-1;29440:93:0;;;;;:::i;:::-;;:::i;24984:518::-;;;;;;;;;;-1:-1:-1;24984:518:0;;;;;:::i;:::-;;:::i;:::-;;;;11350:25:1;;;11406:2;11391:18;;11384:34;;;;11434:18;;;11427:34;;;;11492:2;11477:18;;11470:34;11535:3;11520:19;;11513:35;11337:3;11322:19;24984:518:0;11091:463:1;27265:105:0;;;;;;;;;;-1:-1:-1;27265:105:0;;;;;:::i;:::-;;:::i;13248:117::-;;;;;;;;;;-1:-1:-1;13248:117:0;;;;;:::i;:::-;;:::i;15979:40::-;;;;;;;;;;;;;;;;18938:123;;;;;;;;;;;;;:::i;28448:298::-;;;;;;;;;;;;;:::i;1590:208::-;;;;;;;;;;-1:-1:-1;1590:208:0;;;;;:::i;:::-;;:::i;23321:950::-;;;;;;;;;;-1:-1:-1;23321:950:0;;;;;:::i;:::-;;:::i;:::-;;;;11902:25:1;;;11958:2;11943:18;;11936:34;;;;11986:18;;;11979:34;;;;12044:2;12029:18;;12022:34;;;;12087:3;12072:19;;12065:35;12131:3;12116:19;;12109:35;12175:3;12160:19;;12153:35;12219:3;12204:19;;12197:35;11889:3;11874:19;23321:950:0;11559:679:1;27618:81:0;;;;;;;;;;-1:-1:-1;27618:81:0;;;;;:::i;:::-;;:::i;27505:105::-;;;;;;;;;;-1:-1:-1;27505:105:0;;;;;:::i;:::-;;:::i;26697:197::-;;;;;;;;;;-1:-1:-1;26697:197:0;;;;;:::i;:::-;;:::i;13526:149::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;;;;;;;;;13605:13:::1;:11;:13::i;:::-;13629:24:::0;:38;13526:149::o;27053:101::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;27123:19:::1;:23:::0;27053:101::o;26902:143::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;26965:12:::1;:16:::0;;-1:-1:-1;;;;;;26965:16:0::1;-1:-1:-1::0;;;;;26965:16:0;::::1;::::0;;::::1;::::0;;;27017:20:::1;::::0;;-1:-1:-1;;;27017:20:0;;;;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;26965:16;27017:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27011:26;::::0;:2:::1;:26;:::i;:::-;26992:16;:45:::0;-1:-1:-1;26902:143:0:o;13903:198::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;14009:8:::1;::::0;-1:-1:-1;;;;;14000:17:0;;::::1;14009:8:::0;::::1;13996:56:::0;14034:7:::1;13996:56;14062:31;14075:5;14082:2;14086:6;14062:12;:31::i;:::-;13903:198:::0;;;:::o;13683:89::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;13748:10:::1;:16:::0;13683:89::o;21987:1326::-;-1:-1:-1;;;;;22409:23:0;;22122:19;22409:23;;;:14;:23;;;;;:30;22152:23;;;;;;;;;;;;22454:11;;;22450:62;;22491:9;22482:18;;22450:62;22536:6;22522:20;;22578:6;22564:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22564:21:0;;22555:30;;22622:6;22608:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22608:21:0;;22596:33;;22664:6;22650:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22650:21:0;;22640:31;;22713:6;22699:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22699:21:0;;22682:38;;22762:6;22748:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22748:21:0;;22731:38;;22809:6;22795:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22795:21:0;-1:-1:-1;22780:36:0;-1:-1:-1;22827:13:0;22872:5;22855:451;22883:14;22891:6;22883:5;:14;:::i;:::-;22879:1;:18;22855:451;;;22928:9;22923:1;:14;22919:143;;-1:-1:-1;22966:5:0;-1:-1:-1;22958:88:0;;-1:-1:-1;22958:88:0;22919:143;23174:21;23184:7;23193:1;23174:9;:21::i;:::-;23077:6;23084:5;23077:13;;;;;;;;:::i;:::-;;;;;;23092:9;23102:5;23092:16;;;;;;;;:::i;:::-;;;;;;23110:7;23118:5;23110:14;;;;;;;;:::i;:::-;;;;;;23126;23141:5;23126:21;;;;;;;;:::i;:::-;;;;;;23149:14;23164:5;23149:21;;;;;;;;:::i;:::-;;;;;;;;;;23076:119;;;;;;;;;;;;;;;;;23232:40;23261:7;23270:1;23232:28;:40::i;:::-;23210:12;23223:5;23210:19;;;;;;;;:::i;:::-;;;;;;;;;;:62;23287:7;;;;:::i;:::-;;;;22899:3;;;;;:::i;:::-;;;;22855:451;;;;22378:935;;21987:1326;;;;;;;;;;;;:::o;13031:209::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;13130:8:::1;:20:::0;:25;13122:45:::1;;;::::0;-1:-1:-1;;;13122:45:0;;14970:2:1;13122:45:0::1;::::0;::::1;14952:21:1::0;15009:1;14989:18;;;14982:29;-1:-1:-1;;;15027:18:1;;;15020:37;15074:18;;13122:45:0::1;14768:330:1::0;13122:45:0::1;13178:8;:18:::0;;-1:-1:-1;;;;;;13178:18:0::1;-1:-1:-1::0;;;;;13178:18:0;::::1;;::::0;;13207:14:::1;:25;13224:8:::0;13207:14;:25:::1;:::i;25510:1052::-:0;-1:-1:-1;;;;;25649:21:0;;25580;25649;;;:12;:21;;;;;;;;25701:14;:23;;;;;:30;25816:28;;;;25925;;25762:15;;25816:28;25580:21;;25816:28;25964:591;26004:9;26000:1;:13;25964:591;;;-1:-1:-1;;;;;26040:23:0;;;;;;:14;:23;;;;;:26;;26064:1;;26040:26;;;;;;:::i;:::-;;;;;;;;;;;26031:35;;26081:22;26106:6;:27;;;26081:52;;26148:15;26166:6;:16;;;26148:34;;26218:7;26201:14;:24;:54;;;;;26246:9;26229:14;:26;26201:54;26197:298;;;26290:9;26280:7;:19;26276:87;;;-1:-1:-1;26334:9:0;26276:87;26473:6;26445:24;26455:14;26445:7;:24;:::i;:::-;26398:19;;:43;;26420:21;;26398:43;:::i;:::-;:72;;;;:::i;:::-;:81;;;;:::i;:::-;26381:98;;;;:::i;:::-;;;26197:298;-1:-1:-1;;26529:3:0;;25964:591;;;;25602:960;;;;;;25510:1052;;;:::o;5518:397::-;5574:10;5556:15;5619:17;;;:8;:17;;;;;5647:16;5619:17;5647:10;:16::i;:::-;5693:11;;;;5726:8;;5715:37;;-1:-1:-1;;;;;5726:8:0;5736:7;5693:11;5715:10;:37::i;:::-;5780:6;5765:4;:11;;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;5797:8:0;:30;;5821:6;;5797:8;:20;;:30;;5821:6;;5797:30;:::i;:::-;;;;-1:-1:-1;;5876:24:0;;:8;5862:11;;;5903:4;;5862:38;;;:::i;:::-;:45;;;;:::i;:::-;5840:4;:19;;:67;;;;5545:370;;;5518:397::o;29125:307::-;29176:12;29190:13;29216:7;29225:10;29240:13;-1:-1:-1;;;;;29240:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29215:52;-1:-1:-1;;;;;29215:52:0;;;-1:-1:-1;;;;;29215:52:0;;;29290:5;-1:-1:-1;;;;;29282:13:0;:5;-1:-1:-1;;;;;29282:13:0;;29278:147;;;29319:2;29312:9;;29344:2;29336:10;;29278:147;;;29386:2;29379:9;;29411:2;29403:10;;29278:147;29204:228;;29125:307;;:::o;13373:145::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;13450:13:::1;:11;:13::i;:::-;13474:21:::0;:36;13373:145::o;5923:835::-;5976:10;5958:15;6021:17;;;:8;:17;;;;;6049:16;6021:17;6049:10;:16::i;:::-;6098:18;;;;6131:15;;6127:624;;6189:16;;-1:-1:-1;;;;;6238:17:0;;;6163:23;6238:17;;;:8;:17;;;;;;6189:16;;;;6238:17;6274:21;;6270:369;;6316:20;6366:5;6353:10;;6339:11;:24;;;;:::i;:::-;:32;;;;:::i;:::-;6316:55;-1:-1:-1;6394:16:0;;6390:234;;6435:27;6450:12;6435:27;;:::i;:::-;;;6485:50;6496:15;6513:7;6522:12;6485:10;:50::i;:::-;-1:-1:-1;;;;;6558:17:0;;;;;;:8;:17;;;;;:30;;:46;;6592:12;;6558:17;:46;;6592:12;;6558:46;:::i;:::-;;;;-1:-1:-1;;6390:234:0;6297:342;6270:369;6653:49;6664:15;6681:7;6690:11;6653:10;:49::i;:::-;-1:-1:-1;;6738:1:0;6717:18;;;:22;5947:811;;;5923:835::o;9861:929::-;10310:8;:20;9915:21;;;;;;;;;10368:11;:9;:11::i;:::-;10341:38;;;;;;;;10420:28;;10390:58;;10479:18;;10459:38;;10529:19;;10508:40;;10589:28;;10559:58;;10651:21;;10628:44;;10703:18;;10683:38;;10758:24;;10732:50;;9861:929;;;;;;;;;;:::o;28222:218::-;28278:19;28310:15;28326:20;28350:11;:9;:11::i;:::-;28309:52;;;;28420:12;28410:7;28386:21;;:31;;;;:::i;:::-;:46;;;;:::i;:::-;28372:60;;28298:142;;28222:218;:::o;10798:710::-;-1:-1:-1;;;;;11089:17:0;;;10867:13;11089:17;;;:8;:17;;;;;;11128:13;;;11161:11;;;11202:8;;11195:35;;-1:-1:-1;;;11195:35:0;;;;;6499:51:1;;;;11128:13:0;;;;;11161:11;;10867:13;;;;;;;;;;11202:8;;;;11195:26;;6472:18:1;;11195:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11262:8;;11255:50;;-1:-1:-1;;;11255:50:0;;-1:-1:-1;;;;;19287:15:1;;;11255:50:0;;;19269:34:1;11299:4:0;19319:18:1;;;19312:43;11183:47:0;;-1:-1:-1;11262:8:0;;;11255:26;;19204:18:1;;11255:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11241:64;;11369:4;:18;;;11336:30;11358:7;11336:21;:30::i;:::-;:51;;;;:::i;:::-;11413:17;;;;11451:12;;;;11487:13;;;;;10798:710;;;;-1:-1:-1;10798:710:0;;;;11316:71;;11413:17;11451:12;;-1:-1:-1;11487:13:0;;;;;-1:-1:-1;10798:710:0;-1:-1:-1;;10798:710:0:o;27801:413::-;27850:9;;;;27849:10;27841:28;;;;-1:-1:-1;;;27841:28:0;;19568:2:1;27841:28:0;;;19550:21:1;19607:1;19587:18;;;19580:29;-1:-1:-1;;;19625:18:1;;;19618:35;19670:18;;27841:28:0;19366:328:1;27841:28:0;27898:10;27880:15;27943:17;;;:8;:17;;;;;27980:13;;;;;;27979:14;27971:34;;;;-1:-1:-1;;;27971:34:0;;19901:2:1;27971:34:0;;;19883:21:1;19940:1;19920:18;;;19913:29;-1:-1:-1;;;19958:18:1;;;19951:37;20005:18;;27971:34:0;19699:330:1;27971:34:0;28066:28;;-1:-1:-1;;;;;28024:21:0;;;;;;:12;:21;;;;;:38;;;:70;;;;:114;;;28113:25;:23;:25::i;:::-;28098:4;:11;;;:40;;28024:114;28016:130;;;;-1:-1:-1;;;28016:130:0;;20236:2:1;28016:130:0;;;20218:21:1;20275:1;20255:18;;;20248:29;-1:-1:-1;;;20293:18:1;;;20286:33;20336:18;;28016:130:0;20034:326:1;28016:130:0;28157:13;;;:20;;-1:-1:-1;;28157:20:0;28173:4;28157:20;;;28188:4;;:18;;-1:-1:-1;;;28188:18:0;;-1:-1:-1;;;;;6517:32:1;;;28188:18:0;;;6499:51:1;28188:4:0;;;;:9;;6472:18:1;;28188::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27830:384;;27801:413::o;4242:485::-;4329:1;4320:6;:10;4312:25;;;;-1:-1:-1;;;4312:25:0;;20567:2:1;4312:25:0;;;20549:21:1;20606:1;20586:18;;;20579:29;-1:-1:-1;;;20624:18:1;;;20617:32;20666:18;;4312:25:0;20365:325:1;4312:25:0;4366:10;4387:31;4366:10;4410:7;4387:13;:31::i;:::-;-1:-1:-1;;;;;4455:17:0;;4431:21;4455:17;;;:8;:17;;;;;4483:16;4455:17;4483:10;:16::i;:::-;4523:8;;4512:52;;-1:-1:-1;;;;;4523:8:0;4533:7;4550:4;4557:6;4512:10;:52::i;:::-;4592:6;4577:4;:11;;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;4609:8:0;:30;;4633:6;;4609:8;:20;;:30;;4633:6;;4609:30;:::i;:::-;;;;-1:-1:-1;;4688:24:0;;:8;4674:11;;;4715:4;;4674:38;;;:::i;:::-;:45;;;;:::i;:::-;4652:19;;;;:67;-1:-1:-1;;;4242:485:0:o;27378:119::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;27457:28:::1;:32:::0;27378:119::o;1434:148::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;1541:1:::1;1525:6:::0;;1504:40:::1;::::0;-1:-1:-1;;;;;1525:6:0;;::::1;::::0;1504:40:::1;::::0;1541:1;;1504:40:::1;1572:1;1555:19:::0;;-1:-1:-1;;;;;;1555:19:0::1;::::0;;1434:148::o;28754:363::-;28800:14;28816:13;28841:18;28872:8;;;;;;;;;-1:-1:-1;;;;;28872:8:0;28841:40;;28893:7;28902:10;28917:8;-1:-1:-1;;;;;28917:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28964:12:0;;-1:-1:-1;;;;;28892:47:0;;;;-1:-1:-1;28892:47:0;;;-1:-1:-1;;;;;;28964:12:0;;;28956:5;:20;;;;28952:158;;;29002:2;28993:11;;29027:2;29019:10;;28952:158;;;29071:2;29062:11;;29096:2;29088:10;;28952:158;28830:287;;;28754:363;;:::o;2834:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2834:44:0;;-1:-1:-1;2834:44:0;;-1:-1:-1;2834:44:0:o;17128:1570::-;17212:1;17203:6;:10;17195:24;;;;-1:-1:-1;;;17195:24:0;;20897:2:1;17195:24:0;;;20879:21:1;20936:1;20916:18;;;20909:29;-1:-1:-1;;;20954:18:1;;;20947:31;20995:18;;17195:24:0;20695:324:1;17195:24:0;17250:10;17271:31;17250:10;17294:7;17271:13;:31::i;:::-;17315:27;17334:7;17315:18;:27::i;:::-;-1:-1:-1;;;;;17391:21:0;;17355:33;17391:21;;;:12;:21;;;;;;;;17447:14;:23;;;;;;:30;17527:19;;17496:28;;;;17447:30;;17496:50;;;:::i;:::-;:66;17488:81;;;;-1:-1:-1;;;17488:81:0;;21226:2:1;17488:81:0;;;21208:21:1;21265:1;21245:18;;;21238:29;-1:-1:-1;;;21283:18:1;;;21276:32;21325:18;;17488:81:0;21024:325:1;17488:81:0;17591:12;;17614:21;;17646:16;;17580:83;;-1:-1:-1;;;;;17591:12:0;;;;17605:7;;17614:21;;;17637:25;;:6;:25;:::i;:::-;17580:10;:83::i;:::-;17752:15;;17696;;17676:17;;17740:27;;17696:15;17740:27;:::i;:::-;-1:-1:-1;;;;;18814:23:0;;;;;;:14;:23;;;;;;;;18857:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18814:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17722:45;-1:-1:-1;17863:6:0;17836:10;:23;;;:33;;;;;;;:::i;:::-;;;;;;;;17904:6;17882:18;;:28;;;;;;;:::i;:::-;;;;;;;;17944:6;17921:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;18112:28:0;;15701:1;;18017:7;;17963:11;;;18151:540;18171:3;18167:1;:7;18151:540;;;-1:-1:-1;;;;;18196:21:0;;;;;;:12;:21;;;;;:38;;;:63;-1:-1:-1;18192:109:0;18280:5;18192:109;-1:-1:-1;;;;;18325:17:0;;;;;;;:8;:17;;;;;;;;-1:-1:-1;18357:67:0;;18403:5;18357:67;-1:-1:-1;;;;;18452:21:0;;;;;;:12;:21;;;;;18488:28;;;:38;;18452:21;;-1:-1:-1;18520:6:0;;18488:28;;:38;;18520:6;;18488:38;:::i;:::-;;;;-1:-1:-1;;;;;;;18541:26:0;;;;;;;:17;:26;;;;;;;:35;;;;;;;;;;;:50;;;;;;:57;;-1:-1:-1;;18541:57:0;18594:4;18541:57;;;;;;18559:7;;-1:-1:-1;18665:3:0;18151:540;;;;17184:1514;;;;;;;;;17128:1570;;:::o;12038:857::-;12094:15;12120:23;12154:27;12192:23;12226:31;12268:35;12314:19;12344:27;12382:31;12441:8;;;;;;;;;-1:-1:-1;;;;;12441:8:0;12431:18;;12485:7;-1:-1:-1;;;;;12478:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12460:44;;;;12531:14;12515:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12574:16;;;;;;;;;-1:-1:-1;;;;;12574:16:0;12556:34;;12634:15;-1:-1:-1;;;;;12627:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12601:60;;;;12703:15;-1:-1:-1;;;;;12696:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12696:32:0;;;;;;;;;;;;:::i;:::-;12672:56;;12753:12;;;;;;;;;-1:-1:-1;;;;;12753:12:0;12739:26;;12805:11;-1:-1:-1;;;;;12798:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12776:52;;;;12866:11;-1:-1:-1;;;;;12859:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12859:28:0;;;;;;;;;;;;:::i;:::-;12839:48;;12038:857;;;;;;;;;:::o;13780:115::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;13860:27:::1;13876:2;13880:6;13860:15;:27::i;:::-;13780:115:::0;;:::o;24279:697::-;-1:-1:-1;;;;;24475:23:0;;24366:21;24475:23;;;:14;:23;;;;;:26;;24419:15;;24366:21;;24499:1;;24475:26;;;;;;:::i;:::-;;;;;;;;;;;24445:56;;24512:29;24544:28;;24512:60;;24583:22;24608:6;:27;;;24583:52;;24646:15;24664:6;:16;;;24646:34;;24712:7;24695:14;:24;:54;;;;;24740:9;24723:14;:26;24695:54;24691:278;;;24780:9;24770:7;:19;24766:79;;;-1:-1:-1;24820:9:0;24766:79;24951:6;24923:24;24933:14;24923:7;:24;:::i;:::-;24876:19;;:43;;24898:21;;24876:43;:::i;:::-;:72;;;;:::i;:::-;:81;;;;:::i;:::-;24859:98;;;;:::i;:::-;;;24691:278;24388:588;;;;;24279:697;;;;:::o;29541:249::-;29624:15;;29610:11;29650:133;29670:3;29666:1;:7;29650:133;;;29691:31;29710:8;29719:1;29710:11;;;;;;;;:::i;:::-;;;;;;;29691:18;:31::i;:::-;29757:3;;29650:133;;27707:86;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;27768:9:::1;:17:::0;;-1:-1:-1;;27768:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27707:86::o;14916:139::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;14986:15:::1;:21:::0;;-1:-1:-1;;;;;14986:21:0;;::::1;-1:-1:-1::0;;;;;;14986:21:0;;::::1;::::0;::::1;::::0;;:15:::1;15018:13:::0;;;:8:::1;:13;::::0;;;;:29;;-1:-1:-1;;15018:29:0::1;14986:21:::0;15018:29:::1;::::0;;14916:139::o;27162:95::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;27229:16:::1;:20:::0;27162:95::o;26570:119::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;26649:28:::1;:32:::0;26570:119::o;29440:93::-;29498:27;29517:7;29498:18;:27::i;:::-;29440:93;:::o;24984:518::-;25062:14;25087:17;25115:15;25141:22;25174:21;25213:27;25243:14;:23;25258:7;-1:-1:-1;;;;;25243:23:0;-1:-1:-1;;;;;25243:23:0;;;;;;;;;;;;25267:1;25243:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;25289:19;;25331:18;;;;25370:16;;;;25414:27;;;;25468:26;;;;;25289:19;;25331:18;;-1:-1:-1;25370:16:0;-1:-1:-1;25414:27:0;;-1:-1:-1;25468:26:0;-1:-1:-1;24984:518:0;-1:-1:-1;;;;24984:518:0:o;27265:105::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;27337:21:::1;:25:::0;;-1:-1:-1;;;;;;27337:25:0::1;-1:-1:-1::0;;;;;27337:25:0;;;::::1;::::0;;;::::1;::::0;;27265:105::o;13248:117::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;13327:16:::1;:30:::0;;-1:-1:-1;;;;;;13327:30:0::1;-1:-1:-1::0;;;;;13327:30:0;;;::::1;::::0;;;::::1;::::0;;13248:117::o;18938:123::-;19005:10;19026:27;19005:10;19026:18;:27::i;28448:298::-;28490:15;28507:20;28540:14;28559:15;:13;:15::i;:::-;28539:35;;;28586:12;28599:13;28616:20;:18;:20::i;:::-;28585:51;;-1:-1:-1;28585:51:0;-1:-1:-1;28585:51:0;;28662:10;28666:6;28662:1;:10;:::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;28647:40;;28715:8;;;;;;;;;-1:-1:-1;;;;;28715:8:0;-1:-1:-1;;;;;28708:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28698:40;;28528:218;;;28448:298;;:::o;1590:208::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1679:22:0;::::1;1671:37;;;::::0;-1:-1:-1;;;1671:37:0;;22210:2:1;1671:37:0::1;::::0;::::1;22192:21:1::0;22249:1;22229:18;;;22222:29;-1:-1:-1;;;22267:18:1;;;22260:32;22309:18;;1671:37:0::1;22008:325:1::0;1671:37:0::1;1745:6;::::0;;1724:38:::1;::::0;-1:-1:-1;;;;;1724:38:0;;::::1;::::0;1745:6;::::1;::::0;1724:38:::1;::::0;::::1;1773:6;:17:::0;;-1:-1:-1;;;;;;1773:17:0::1;-1:-1:-1::0;;;;;1773:17:0;;;::::1;::::0;;;::::1;::::0;;1590:208::o;23321:950::-;-1:-1:-1;;;;;23730:21:0;;23396:20;23730:21;;;:12;:21;;;;;23777:23;;23831:28;;;;23892:30;;;;23954:29;;;;24013:27;;;;23777:23;;23831:28;;23892:30;;23954:29;;24013:27;;23396:20;;;;24073:31;23743:7;24073:22;:31::i;:::-;24143:12;;24136:39;;-1:-1:-1;;;24136:39:0;;-1:-1:-1;;;;;6517:32:1;;;24136:39:0;;;6499:51:1;24051:53:0;;-1:-1:-1;24143:12:0;;;24136:30;;6472:18:1;;24136:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24216:12;;24209:54;;-1:-1:-1;;;24209:54:0;;-1:-1:-1;;;;;19287:15:1;;;24209:54:0;;;19269:34:1;24257:4:0;19319:18:1;;;19312:43;24115:60:0;;-1:-1:-1;24216:12:0;;;24209:30;;19204:18:1;;24209:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24186:77;;23683:588;23321:950;;;;;;;;;:::o;27618:81::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;27675:4:::1;:16:::0;;-1:-1:-1;;;;;;27675:16:0::1;-1:-1:-1::0;;;;;27675:16:0;;;::::1;::::0;;;::::1;::::0;;27618:81::o;27505:105::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;27577:21:::1;:25:::0;27505:105::o;26697:197::-;1379:6;;-1:-1:-1;;;;;1379:6:0;1389:10;1379:20;1371:35;;;;-1:-1:-1;;;1371:35:0;;;;;;;:::i;:::-;26767:19:::1;::::0;:23;26763:94:::1;;26819:15;;26815:1;:19;26807:38;;;::::0;-1:-1:-1;;;26807:38:0;;22540:2:1;26807:38:0::1;::::0;::::1;22522:21:1::0;22579:1;22559:18;;;22552:29;-1:-1:-1;;;22597:18:1;;;22590:36;22643:18;;26807:38:0::1;22338:329:1::0;26807:38:0::1;26867:15;:19:::0;26697:197::o;6766:985::-;6919:18;;6832:8;;6870:12;;6952:27;;;6948:66;;6996:7;;;6766:985::o;6948:66::-;7024:18;;;:29;;;7086:18;;;;7137:20;;;;7172:24;;;7168:63;;7213:7;;;;;6766:985::o;7168:63::-;7265:16;;7317:17;;;;7349:15;;;;;:37;;;7372:14;7368:1;:18;7349:37;7345:399;;;7403:14;7438:26;7449:15;7438:8;:26;:::i;:::-;7420:45;;:14;:45;:::i;:::-;7403:62;-1:-1:-1;7480:20:0;7503:23;7517:9;7503:11;:23;:::i;:::-;7480:46;;7554:12;7545:6;:21;7541:83;;;7596:12;7587:21;;7541:83;7678:11;7662:13;:6;7671:4;7662:13;:::i;:::-;:27;;;;:::i;:::-;7638:4;:20;;;:51;;;;;;;:::i;:::-;;;;;;;;7726:6;7704:4;:18;;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;7345:399:0;6797:954;;;;;;;6766:985::o;14109:238::-;14237:45;;;-1:-1:-1;;;;;22864:32:1;;;14237:45:0;;;22846:51:1;22913:18;;;;22906:34;;;14237:45:0;;;;;;;;;;22819:18:1;;;;14237:45:0;;;;;;;-1:-1:-1;;;;;14237:45:0;-1:-1:-1;;;14237:45:0;;;14226:57;;-1:-1:-1;;;;14226:10:0;;;;:57;;14237:45;14226:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14190:93;;;;14298:7;:26;;;;-1:-1:-1;14294:46:0;14179:168;;14109:238;;;:::o;7759:457::-;7821:13;:11;:13::i;:::-;7849:11;;;;:15;7845:364;;7881:21;7946:4;7919:8;:24;;;7905:4;:11;;;:38;;;;:::i;:::-;:45;;;;:::i;:::-;7881:69;;7965:25;8009:4;:19;;;7993:13;:35;;;;:::i;:::-;7965:63;-1:-1:-1;8047:21:0;;8043:155;;8111:13;8089:4;:19;;:35;;;;8165:17;8143:4;:18;;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;7866:343:0;;7759:457;:::o;16515:319::-;16618:6;16613:1;:11;16609:50;;16515:319;;;:::o;16609:50::-;16723:30;;-1:-1:-1;;;16723:30:0;;16747:4;16723:30;;;6499:51:1;16691:12:0;;16757:6;;-1:-1:-1;;;;;16723:15:0;;;;;6472:18:1;;16723:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;16715:57;;;;-1:-1:-1;;;16715:57:0;;;;;;23445:2:1;23427:21;;;23484:1;23464:18;;;23457:29;-1:-1:-1;;;23517:2:1;23502:18;;23495:34;23561:2;23546:18;;23243:327;16715:57:0;16783:43;16796:12;16810:7;16819:6;16783:12;:43::i;:::-;16598:236;16515:319;;;:::o;8224:1098::-;-1:-1:-1;;;;;8409:17:0;;8294:14;8409:17;;;:8;:17;;;;;8366:8;8441:11;;;;8366:8;;8409:17;8441:15;8437:878;;8585:18;;;;8473:25;;8532:12;;8622:26;;;8618:551;;;8710:26;8721:15;8710:8;:26;:::i;:::-;8689:4;:17;;;:48;;;;:::i;:::-;8778:20;;;;8837:18;;;;8669:68;;-1:-1:-1;8778:20:0;8756:19;8917:23;;;8913:110;;;8980:23;8994:9;8980:11;:23;:::i;:::-;8965:38;;8913:110;9065:12;9045:17;:32;9041:113;;;9122:12;9102:32;;9041:113;8650:519;;;8618:551;9284:19;;;;9257:16;;9277:4;;9230:24;:17;9277:4;9230:24;:::i;:::-;:43;;;;:::i;:::-;9207:4;:20;;;:66;;;;:::i;:::-;9192:4;:11;;;:82;;;;:::i;:::-;:89;;;;:::i;:::-;:111;;;;:::i;:::-;9183:120;;8458:857;;;8437:878;8310:1012;;8224:1098;;;:::o;4735:775::-;-1:-1:-1;;;;;4835:17:0;;4811:21;4835:17;;;:8;:17;;;;;4946:13;;15701:1;;4844:7;;4946:13;;4941:562;;-1:-1:-1;;;;;4984:17:0;;;;;;:8;:17;;;;;:26;;;4976:46;;;;-1:-1:-1;;;4976:46:0;;23777:2:1;4976:46:0;;;23759:21:1;23816:1;23796:18;;;23789:29;-1:-1:-1;;;23834:18:1;;;23827:37;23881:18;;4976:46:0;23575:330:1;4976:46:0;-1:-1:-1;;;;;5037:17:0;;;;;;;:8;:17;;;;;;;;:27;;;;;-1:-1:-1;;;;;;5037:27:0;;;;;;;;5079:16;;:7;:16;;;;:30;;5037:27;5079:30;;;;;;;;;;;;;;;;;;;;;;5124:333;5144:9;5140:1;:13;5124:333;;;-1:-1:-1;;;;;5185:17:0;;;;;;;:8;:17;;;;;;;;-1:-1:-1;5221:75:0;;5271:5;5221:75;-1:-1:-1;;;;;5314:17:0;;;;;;:8;:17;;;;;:25;;:30;;5343:1;;5314:17;:30;;5343:1;;5314:30;:::i;:::-;;;;-1:-1:-1;5373:7:0;;-1:-1:-1;;5423:3:0;;5124:333;;;-1:-1:-1;5471:20:0;;-1:-1:-1;;5471:20:0;5487:4;5471:20;;;4800:710;;;4735:775;;:::o;16842:278::-;17001:30;;-1:-1:-1;;;17001:30:0;;-1:-1:-1;;;;;6517:32:1;;;17001:30:0;;;6499:51:1;16969:12:0;;17035:8;;17001:15;;;;;6472:18:1;;17001:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;16993:58;;;;-1:-1:-1;;;16993:58:0;;24112:2:1;16993:58:0;;;24094:21:1;24151:1;24131:18;;;24124:29;-1:-1:-1;;;24169:18:1;;;24162:33;24212:18;;16993:58:0;23910:326:1;16993:58:0;17062:50;17079:12;17093:4;17099:2;17103:8;17062:16;:50::i;19073:2015::-;-1:-1:-1;;;;;19173:21:0;;19137:33;19173:21;;;:12;:21;;;;;;;;19225:14;:23;;;;;:30;19340:28;;;;19449;;19173:21;;19225:30;;19286:15;;19137:33;;19340:28;19520:962;19560:9;19556:1;:13;19520:962;;;-1:-1:-1;;;;;19596:23:0;;;;;;:14;:23;;;;;:26;;19620:1;;19596:26;;;;;;:::i;:::-;;;;;;;;;;;;;;19662:27;;;;19722:16;;;;19770:19;;19596:26;;-1:-1:-1;19662:27:0;;19808:24;;;:54;;;;;19853:9;19836:14;:26;19808:54;19804:618;;;19897:9;19887:7;:19;19883:267;;;19941:9;19931:19;;19883:267;;;20019:5;:1;20023;20019:5;:::i;:::-;19999:25;;20047:27;20055:7;20064:1;20067:6;20047:7;:27::i;:::-;20124:6;20097:10;:23;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;19883:267:0;20168:27;;;:37;;;20224:14;20303:6;20275:24;20285:14;20198:7;20275:24;:::i;:::-;20241:30;20250:21;20241:6;:30;:::i;:::-;:59;;;;:::i;:::-;:68;;;;:::i;:::-;20224:85;;20358:6;20328;:26;;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;20383:23:0;;-1:-1:-1;20400:6:0;20383:23;;:::i;:::-;;;19864:558;19804:618;20456:3;;;;;19572:910;;;19520:962;;;-1:-1:-1;20492:28:0;;;:48;;;20562:16;;20551:52;;-1:-1:-1;;;;;20562:16:0;20580:7;20589:13;20551:10;:52::i;:::-;20648:13;20614:10;:30;;;:47;;;;;;;:::i;:::-;;;;;;;;20694:13;20672:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;20736:17:0;;;20718:15;20736:17;;;:8;:17;;;;;;;20768:21;;20764:317;;20806:20;15795:5;20845:16;;20829:13;:32;;;;:::i;:::-;:48;;;;:::i;:::-;20903:16;;20806:71;;-1:-1:-1;20892:51:0;;-1:-1:-1;;;;;20903:16:0;20921:7;20806:71;20892:10;:51::i;:::-;20986:12;20958:24;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;21013:21:0;;;;;;:12;:21;;;;;:40;;:56;;21057:12;;21013:21;:56;;21057:12;;21013:56;:::i;:::-;;;;-1:-1:-1;;;20764:317:0;19126:1962;;;;;;;;19073:2015;:::o;14355:204::-;14482:12;;;14425;14482;;;;;;;;;;14425;;;-1:-1:-1;;;;;14459:7:0;;;14475:5;;14459:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14424:71;;;;14510:7;:26;;;;-1:-1:-1;;;;;14355:204:0:o;14567:341::-;14792:51;;;-1:-1:-1;;;;;24499:15:1;;;14792:51:0;;;24481:34:1;24551:15;;;24531:18;;;24524:43;24583:18;;;;24576:34;;;14792:51:0;;;;;;;;;;24416:18:1;;;;14792:51:0;;;;;;;-1:-1:-1;;;;;14792:51:0;-1:-1:-1;;;14792:51:0;;;14781:63;;-1:-1:-1;;;;14781:10:0;;;;:63;;14792:51;14781:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14745:99;;;;14859:7;:26;;;;-1:-1:-1;;;;;;;14567:341:0:o;21096:748::-;21216:6;21193:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;15701:1:0;;-1:-1:-1;21287:7:0;21233:11;;;21376:461;21396:3;21392:1;:7;21376:461;;;-1:-1:-1;;;;;21427:17:0;;;;;;;:8;:17;;;;;;;;-1:-1:-1;21459:67:0;;21505:5;21459:67;-1:-1:-1;;;;;21545:26:0;;;;;;;:17;:26;;;;;;;:35;;;;;;;;;;;:55;;;;;;;;;21540:102;21621:5;21540:102;-1:-1:-1;;;;;21670:21:0;;;;;;:12;:21;;;;;21706:28;;;:38;;21670:21;;-1:-1:-1;21738:6:0;;21706:28;;:38;;21738:6;;21706:38;:::i;:::-;;;;-1:-1:-1;21769:7:0;;-1:-1:-1;21769:7:0;;-1:-1:-1;21811:3:0;;21376:461;;;;21182:662;;;;21096:748;;;:::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;199:173::-;267:20;;-1:-1:-1;;;;;316:31:1;;306:42;;296:70;;362:1;359;352:12;296:70;199:173;;;:::o;377:186::-;436:6;489:2;477:9;468:7;464:23;460:32;457:52;;;505:1;502;495:12;457:52;528:29;547:9;528:29;:::i;:::-;518:39;377:186;-1:-1:-1;;;377:186:1:o;750:328::-;827:6;835;843;896:2;884:9;875:7;871:23;867:32;864:52;;;912:1;909;902:12;864:52;935:29;954:9;935:29;:::i;:::-;925:39;;983:38;1017:2;1006:9;1002:18;983:38;:::i;:::-;973:48;;1068:2;1057:9;1053:18;1040:32;1030:42;;750:328;;;;;:::o;1083:322::-;1160:6;1168;1176;1229:2;1217:9;1208:7;1204:23;1200:32;1197:52;;;1245:1;1242;1235:12;1197:52;1268:29;1287:9;1268:29;:::i;:::-;1258:39;1344:2;1329:18;;1316:32;;-1:-1:-1;1395:2:1;1380:18;;;1367:32;;1083:322;-1:-1:-1;;;1083:322:1:o;1410:435::-;1463:3;1501:5;1495:12;1528:6;1523:3;1516:19;1554:4;1583:2;1578:3;1574:12;1567:19;;1620:2;1613:5;1609:14;1641:1;1651:169;1665:6;1662:1;1659:13;1651:169;;;1726:13;;1714:26;;1760:12;;;;1795:15;;;;1687:1;1680:9;1651:169;;;-1:-1:-1;1836:3:1;;1410:435;-1:-1:-1;;;;;1410:435:1:o;1850:1357::-;2447:6;2436:9;2429:25;2490:3;2485:2;2474:9;2470:18;2463:31;2410:4;2517:57;2569:3;2558:9;2554:19;2546:6;2517:57;:::i;:::-;2622:9;2614:6;2610:22;2605:2;2594:9;2590:18;2583:50;2656:44;2693:6;2685;2656:44;:::i;:::-;2642:58;;2748:9;2740:6;2736:22;2731:2;2720:9;2716:18;2709:50;2782:44;2819:6;2811;2782:44;:::i;:::-;2768:58;;2875:9;2867:6;2863:22;2857:3;2846:9;2842:19;2835:51;2909:44;2946:6;2938;2909:44;:::i;:::-;2895:58;;3002:9;2994:6;2990:22;2984:3;2973:9;2969:19;2962:51;3036:44;3073:6;3065;3036:44;:::i;:::-;3022:58;;3129:9;3121:6;3117:22;3111:3;3100:9;3096:19;3089:51;3157:44;3194:6;3186;3157:44;:::i;:::-;3149:52;1850:1357;-1:-1:-1;;;;;;;;;;1850:1357:1:o;3212:127::-;3273:10;3268:3;3264:20;3261:1;3254:31;3304:4;3301:1;3294:15;3328:4;3325:1;3318:15;3344:275;3415:2;3409:9;3480:2;3461:13;;-1:-1:-1;;3457:27:1;3445:40;;3515:18;3500:34;;3536:22;;;3497:62;3494:88;;;3562:18;;:::i;:::-;3598:2;3591:22;3344:275;;-1:-1:-1;3344:275:1:o;3624:187::-;3673:4;3706:18;3698:6;3695:30;3692:56;;;3728:18;;:::i;:::-;-1:-1:-1;3794:2:1;3773:15;-1:-1:-1;;3769:29:1;3800:4;3765:40;;3624:187::o;3816:747::-;3894:6;3902;3955:2;3943:9;3934:7;3930:23;3926:32;3923:52;;;3971:1;3968;3961:12;3923:52;3994:29;4013:9;3994:29;:::i;:::-;3984:39;;4074:2;4063:9;4059:18;4046:32;4101:18;4093:6;4090:30;4087:50;;;4133:1;4130;4123:12;4087:50;4156:22;;4209:4;4201:13;;4197:27;-1:-1:-1;4187:55:1;;4238:1;4235;4228:12;4187:55;4274:2;4261:16;4299:49;4315:32;4344:2;4315:32;:::i;:::-;4299:49;:::i;:::-;4371:2;4364:5;4357:17;4411:7;4406:2;4401;4397;4393:11;4389:20;4386:33;4383:53;;;4432:1;4429;4422:12;4383:53;4487:2;4482;4478;4474:11;4469:2;4462:5;4458:14;4445:45;4531:1;4526:2;4521;4514:5;4510:14;4506:23;4499:34;4552:5;4542:15;;;;;3816:747;;;;;:::o;6561:254::-;6629:6;6637;6690:2;6678:9;6669:7;6665:23;6661:32;6658:52;;;6706:1;6703;6696:12;6658:52;6742:9;6729:23;6719:33;;6771:38;6805:2;6794:9;6790:18;6771:38;:::i;:::-;6761:48;;6561:254;;;;;:::o;6820:::-;6888:6;6896;6949:2;6937:9;6928:7;6924:23;6920:32;6917:52;;;6965:1;6962;6955:12;6917:52;6988:29;7007:9;6988:29;:::i;:::-;6978:39;7064:2;7049:18;;;;7036:32;;-1:-1:-1;;;6820:254:1:o;7844:250::-;7929:1;7939:113;7953:6;7950:1;7947:13;7939:113;;;8029:11;;;8023:18;8010:11;;;8003:39;7975:2;7968:10;7939:113;;;-1:-1:-1;;8086:1:1;8068:16;;8061:27;7844:250::o;8099:271::-;8141:3;8179:5;8173:12;8206:6;8201:3;8194:19;8222:76;8291:6;8284:4;8279:3;8275:14;8268:4;8261:5;8257:16;8222:76;:::i;:::-;8352:2;8331:15;-1:-1:-1;;8327:29:1;8318:39;;;;8359:4;8314:50;;8099:271;-1:-1:-1;;8099:271:1:o;8375:1064::-;-1:-1:-1;;;;;8848:15:1;;;8830:34;;8895:2;8880:18;;8873:34;;;8780:3;8938:2;8923:18;;8916:30;;;8751:4;;8969:45;8995:18;;;8987:6;8969:45;:::i;:::-;8955:59;;9062:2;9054:6;9050:15;9045:2;9034:9;9030:18;9023:43;9103:6;9097:3;9086:9;9082:19;9075:35;9159:9;9151:6;9147:22;9141:3;9130:9;9126:19;9119:51;9193:33;9219:6;9211;9193:33;:::i;:::-;9179:47;;9275:2;9267:6;9263:15;9257:3;9246:9;9242:19;9235:44;;9316:6;9310:3;9299:9;9295:19;9288:35;9372:9;9364:6;9360:22;9354:3;9343:9;9339:19;9332:51;9400:33;9426:6;9418;9400:33;:::i;:::-;9392:41;8375:1064;-1:-1:-1;;;;;;;;;;;;8375:1064:1:o;9856:952::-;9940:6;9971:2;10014;10002:9;9993:7;9989:23;9985:32;9982:52;;;10030:1;10027;10020:12;9982:52;10070:9;10057:23;10099:18;10140:2;10132:6;10129:14;10126:34;;;10156:1;10153;10146:12;10126:34;10194:6;10183:9;10179:22;10169:32;;10239:7;10232:4;10228:2;10224:13;10220:27;10210:55;;10261:1;10258;10251:12;10210:55;10297:2;10284:16;10319:2;10315;10312:10;10309:36;;;10325:18;;:::i;:::-;10371:2;10368:1;10364:10;10354:20;;10394:28;10418:2;10414;10410:11;10394:28;:::i;:::-;10456:15;;;10526:11;;;10522:20;;;10487:12;;;;10554:19;;;10551:39;;;10586:1;10583;10576:12;10551:39;10610:11;;;;10630:148;10646:6;10641:3;10638:15;10630:148;;;10712:23;10731:3;10712:23;:::i;:::-;10700:36;;10663:12;;;;10756;;;;10630:148;;;10797:5;9856:952;-1:-1:-1;;;;;;;;9856:952:1:o;10813:273::-;10869:6;10922:2;10910:9;10901:7;10897:23;10893:32;10890:52;;;10938:1;10935;10928:12;10890:52;10977:9;10964:23;11030:5;11023:13;11016:21;11009:5;11006:32;10996:60;;11052:1;11049;11042:12;12243:325;12445:2;12427:21;;;12484:1;12464:18;;;12457:29;-1:-1:-1;;;12517:2:1;12502:18;;12495:32;12559:2;12544:18;;12243:325::o;12573:273::-;12641:6;12694:2;12682:9;12673:7;12669:23;12665:32;12662:52;;;12710:1;12707;12700:12;12662:52;12742:9;12736:16;12792:4;12785:5;12781:16;12774:5;12771:27;12761:55;;12812:1;12809;12802:12;12851:127;12912:10;12907:3;12903:20;12900:1;12893:31;12943:4;12940:1;12933:15;12967:4;12964:1;12957:15;12983:422;13072:1;13115:5;13072:1;13129:270;13150:7;13140:8;13137:21;13129:270;;;13209:4;13205:1;13201:6;13197:17;13191:4;13188:27;13185:53;;;13218:18;;:::i;:::-;13268:7;13258:8;13254:22;13251:55;;;13288:16;;;;13251:55;13367:22;;;;13327:15;;;;13129:270;;;13133:3;12983:422;;;;;:::o;13410:806::-;13459:5;13489:8;13479:80;;-1:-1:-1;13530:1:1;13544:5;;13479:80;13578:4;13568:76;;-1:-1:-1;13615:1:1;13629:5;;13568:76;13660:4;13678:1;13673:59;;;;13746:1;13741:130;;;;13653:218;;13673:59;13703:1;13694:10;;13717:5;;;13741:130;13778:3;13768:8;13765:17;13762:43;;;13785:18;;:::i;:::-;-1:-1:-1;;13841:1:1;13827:16;;13856:5;;13653:218;;13955:2;13945:8;13942:16;13936:3;13930:4;13927:13;13923:36;13917:2;13907:8;13904:16;13899:2;13893:4;13890:12;13886:35;13883:77;13880:159;;;-1:-1:-1;13992:19:1;;;14024:5;;13880:159;14071:34;14096:8;14090:4;14071:34;:::i;:::-;14141:6;14137:1;14133:6;14129:19;14120:7;14117:32;14114:58;;;14152:18;;:::i;:::-;14190:20;;-1:-1:-1;13410:806:1;;;;;:::o;14221:140::-;14279:5;14308:47;14349:4;14339:8;14335:19;14329:4;14308:47;:::i;14366:125::-;14431:9;;;14452:10;;;14449:36;;;14465:18;;:::i;14496:127::-;14557:10;14552:3;14548:20;14545:1;14538:31;14588:4;14585:1;14578:15;14612:4;14609:1;14602:15;14628:135;14667:3;14688:17;;;14685:43;;14708:18;;:::i;:::-;-1:-1:-1;14755:1:1;14744:13;;14628:135::o;15103:380::-;15182:1;15178:12;;;;15225;;;15246:61;;15300:4;15292:6;15288:17;15278:27;;15246:61;15353:2;15345:6;15342:14;15322:18;15319:38;15316:161;;15399:10;15394:3;15390:20;15387:1;15380:31;15434:4;15431:1;15424:15;15462:4;15459:1;15452:15;15316:161;;15103:380;;;:::o;15614:545::-;15716:2;15711:3;15708:11;15705:448;;;15752:1;15777:5;15773:2;15766:17;15822:4;15818:2;15808:19;15892:2;15880:10;15876:19;15873:1;15869:27;15863:4;15859:38;15928:4;15916:10;15913:20;15910:47;;;-1:-1:-1;15951:4:1;15910:47;16006:2;16001:3;15997:12;15994:1;15990:20;15984:4;15980:31;15970:41;;16061:82;16079:2;16072:5;16069:13;16061:82;;;16124:17;;;16105:1;16094:13;16061:82;;16335:1352;16461:3;16455:10;16488:18;16480:6;16477:30;16474:56;;;16510:18;;:::i;:::-;16539:97;16629:6;16589:38;16621:4;16615:11;16589:38;:::i;:::-;16583:4;16539:97;:::i;:::-;16691:4;;16755:2;16744:14;;16772:1;16767:663;;;;17474:1;17491:6;17488:89;;;-1:-1:-1;17543:19:1;;;17537:26;17488:89;-1:-1:-1;;16292:1:1;16288:11;;;16284:24;16280:29;16270:40;16316:1;16312:11;;;16267:57;17590:81;;16737:944;;16767:663;15561:1;15554:14;;;15598:4;15585:18;;-1:-1:-1;;16803:20:1;;;16921:236;16935:7;16932:1;16929:14;16921:236;;;17024:19;;;17018:26;17003:42;;17116:27;;;;17084:1;17072:14;;;;16951:19;;16921:236;;;16925:3;17185:6;17176:7;17173:19;17170:201;;;17246:19;;;17240:26;-1:-1:-1;;17329:1:1;17325:14;;;17341:3;17321:24;17317:37;17313:42;17298:58;17283:74;;17170:201;-1:-1:-1;;;;;17417:1:1;17401:14;;;17397:22;17384:36;;-1:-1:-1;16335:1352:1:o;17692:128::-;17759:9;;;17780:11;;;17777:37;;;17794:18;;:::i;17825:168::-;17898:9;;;17929;;17946:15;;;17940:22;;17926:37;17916:71;;17967:18;;:::i;17998:217::-;18038:1;18064;18054:132;;18108:10;18103:3;18099:20;18096:1;18089:31;18143:4;18140:1;18133:15;18171:4;18168:1;18161:15;18054:132;-1:-1:-1;18200:9:1;;17998:217::o;18220:188::-;18299:13;;-1:-1:-1;;;;;18341:42:1;;18331:53;;18321:81;;18398:1;18395;18388:12;18413:450;18500:6;18508;18516;18569:2;18557:9;18548:7;18544:23;18540:32;18537:52;;;18585:1;18582;18575:12;18537:52;18608:40;18638:9;18608:40;:::i;:::-;18598:50;;18667:49;18712:2;18701:9;18697:18;18667:49;:::i;:::-;18657:59;;18759:2;18748:9;18744:18;18738:25;18803:10;18796:5;18792:22;18785:5;18782:33;18772:61;;18829:1;18826;18819:12;18772:61;18852:5;18842:15;;;18413:450;;;;;:::o;18868:184::-;18938:6;18991:2;18979:9;18970:7;18966:23;18962:32;18959:52;;;19007:1;19004;18997:12;18959:52;-1:-1:-1;19030:16:1;;18868:184;-1:-1:-1;18868:184:1:o;21354:649::-;21434:6;21487:2;21475:9;21466:7;21462:23;21458:32;21455:52;;;21503:1;21500;21493:12;21455:52;21536:9;21530:16;21569:18;21561:6;21558:30;21555:50;;;21601:1;21598;21591:12;21555:50;21624:22;;21677:4;21669:13;;21665:27;-1:-1:-1;21655:55:1;;21706:1;21703;21696:12;21655:55;21735:2;21729:9;21760:49;21776:32;21805:2;21776:32;:::i;21760:49::-;21832:2;21825:5;21818:17;21872:7;21867:2;21862;21858;21854:11;21850:20;21847:33;21844:53;;;21893:1;21890;21883:12;21844:53;21906:67;21970:2;21965;21958:5;21954:14;21949:2;21945;21941:11;21906:67;:::i;:::-;21992:5;21354:649;-1:-1:-1;;;;;21354:649:1:o;22951:287::-;23080:3;23118:6;23112:13;23134:66;23193:6;23188:3;23181:4;23173:6;23169:17;23134:66;:::i;:::-;23216:16;;;;;22951:287;-1:-1:-1;;22951:287:1:o
Swarm Source
ipfs://de9604b507b7112cea7a5d51093ce8a926937d97c3cf5701001a669784623bae
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.