More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11166682 | 1485 days ago | IN | 0 ETH | 0.13603765 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
sbGenericServicePoolV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import "./IERC20.sol"; import "./SafeMath.sol"; import "./sbEthFeePoolInterface.sol"; import "./sbControllerInterface.sol"; import "./sbStrongValuePoolInterface.sol"; contract sbGenericServicePoolV2 { using SafeMath for uint256; bool public initDone; address public admin; address public pendingAdmin; address public superAdmin; address public pendingSuperAdmin; address public serviceAdmin; sbStrongValuePoolInterface public sbStrongValuePool; sbEthFeePoolInterface public sbEthFeePool; sbControllerInterface public sbController; mapping(address => uint256[]) public minerMineDays; mapping(address => uint256[]) public minerMineAmounts; mapping(address => uint256[]) public minerMineMineSeconds; uint256[] public mineDays; uint256[] public mineAmounts; uint256[] public mineMineSeconds; mapping(address => uint256) public minerDayLastClaimedFor; address[] public services; mapping(address => uint256) public serviceIndex; mapping(address => bool) public serviceAccepted; mapping(address => bool) public requestPending; string public description; function init( address sbStrongValuePoolAddress, address sbEthFeePoolAddress, address sbControllerAddress, address adminAddress, address superAdminAddress, address serviceAdminAddress, string memory desc ) public { require(!initDone, "init done"); sbStrongValuePool = sbStrongValuePoolInterface( sbStrongValuePoolAddress ); sbEthFeePool = sbEthFeePoolInterface(sbEthFeePoolAddress); sbController = sbControllerInterface(sbControllerAddress); admin = adminAddress; superAdmin = superAdminAddress; serviceAdmin = serviceAdminAddress; description = desc; initDone = true; } // ADMIN // ************************************************************************************* function updateServiceAdmin(address newServiceAdmin) public { require(msg.sender == superAdmin); serviceAdmin = newServiceAdmin; } function setPendingAdmin(address newPendingAdmin) public { require(msg.sender == admin, "not admin"); pendingAdmin = newPendingAdmin; } function acceptAdmin() public { require( msg.sender == pendingAdmin && msg.sender != address(0), "not pendingAdmin" ); admin = pendingAdmin; pendingAdmin = address(0); } function setPendingSuperAdmin(address newPendingSuperAdmin) public { require(msg.sender == superAdmin, "not superAdmin"); pendingSuperAdmin = newPendingSuperAdmin; } function acceptSuperAdmin() public { require( msg.sender == pendingSuperAdmin && msg.sender != address(0), "not pendingSuperAdmin" ); superAdmin = pendingSuperAdmin; pendingSuperAdmin = address(0); } // SERVICES // ************************************************************************************* function getServices() public view returns (address[] memory) { return services; } function isServiceAccepted(address service) public view returns (bool) { return serviceAccepted[service]; } // MINING // ************************************************************************************* function requestAccess() public payable { require(!requestPending[msg.sender], "pending"); require(!serviceAccepted[msg.sender], "accepted"); uint256 feeInWei = sbController.getServicePoolRequestFeeInWei( address(this) ); require(msg.value == feeInWei, "invalid fee"); sbEthFeePool.deposit{value: msg.value}(); requestPending[msg.sender] = true; } function grantAccess(address[] memory miners, bool useChecks) public payable { require( msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, "not admin" ); require(miners.length != 0, "zero"); uint256 currentDay = _getCurrentDay(); for (uint256 i = 0; i < miners.length; i++) { address miner = miners[i]; if (useChecks) { require(requestPending[miner], "not pending"); require( sbStrongValuePool.serviceMinMined(miner), "not min mined" ); } require(!serviceAccepted[miner], "exists"); _update( minerMineDays[miner], minerMineAmounts[miner], minerMineMineSeconds[miner], 1, true, currentDay ); _update( mineDays, mineAmounts, mineMineSeconds, 1, true, currentDay ); uint256 len = services.length; serviceIndex[miner] = len; services.push(miner); serviceAccepted[miner] = true; requestPending[miner] = false; } } function revokeAccess(address miner) public payable { require( msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, "not admin" ); require(serviceAccepted[miner], "invalid miner"); uint256 currentDay = _getCurrentDay(); _update( minerMineDays[miner], minerMineAmounts[miner], minerMineMineSeconds[miner], 1, false, currentDay ); _update(mineDays, mineAmounts, mineMineSeconds, 1, false, currentDay); _deleteIndex(serviceIndex[miner]); serviceAccepted[miner] = false; } function getMinerDayLastClaimedFor(address miner) public view returns (uint256) { uint256 len = minerMineDays[miner].length; if (len != 0) { return minerDayLastClaimedFor[miner] == 0 ? minerMineDays[miner][0].sub(1) : minerDayLastClaimedFor[miner]; } return 0; } function getMinerMineData(address miner, uint256 dayNumber) public view returns ( uint256, uint256, uint256 ) { uint256 day = dayNumber == 0 ? _getCurrentDay() : dayNumber; return _getMinerMineData(miner, day); } function getMineData(uint256 dayNumber) public view returns ( uint256, uint256, uint256 ) { uint256 day = dayNumber == 0 ? _getCurrentDay() : dayNumber; return _getMineData(day); } // CLAIMING // ************************************************************************************* function claimAll() public payable { uint256 len = minerMineDays[msg.sender].length; require(len != 0, "no mines"); require(serviceAccepted[msg.sender], "invalid miner"); require(sbStrongValuePool.serviceMinMined(msg.sender), "not min mined"); uint256 currentDay = _getCurrentDay(); uint256 dayLastClaimedFor = minerDayLastClaimedFor[msg.sender] == 0 ? minerMineDays[msg.sender][0].sub(1) : minerDayLastClaimedFor[msg.sender]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); require( currentDay > dayLastClaimedFor.add(vestingDays), "already claimed" ); // fees are taken in _claim _claim(currentDay, msg.sender, dayLastClaimedFor, vestingDays); } function claimUpTo(uint256 day) public payable { uint256 len = minerMineDays[msg.sender].length; require(len != 0, "no mines"); require(serviceAccepted[msg.sender], "invalid miner"); require(sbStrongValuePool.serviceMinMined(msg.sender), "not min mined"); require(day <= _getCurrentDay(), "invalid day"); uint256 dayLastClaimedFor = minerDayLastClaimedFor[msg.sender] == 0 ? minerMineDays[msg.sender][0].sub(1) : minerDayLastClaimedFor[msg.sender]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); require(day > dayLastClaimedFor.add(vestingDays), "already claimed"); // fees are taken in _claim _claim(day, msg.sender, dayLastClaimedFor, vestingDays); } function getRewardsDueAll(address miner) public view returns (uint256) { uint256 len = minerMineDays[miner].length; if (len == 0) { return 0; } uint256 currentDay = _getCurrentDay(); uint256 dayLastClaimedFor = minerDayLastClaimedFor[miner] == 0 ? minerMineDays[miner][0].sub(1) : minerDayLastClaimedFor[miner]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); if (!(currentDay > dayLastClaimedFor.add(vestingDays))) { return 0; } return _getRewardsDue(currentDay, miner, dayLastClaimedFor, vestingDays); } function getRewardsDueUpTo(uint256 day, address miner) public view returns (uint256) { uint256 len = minerMineDays[miner].length; if (len == 0) { return 0; } require(day <= _getCurrentDay(), "invalid day"); uint256 dayLastClaimedFor = minerDayLastClaimedFor[miner] == 0 ? minerMineDays[miner][0].sub(1) : minerDayLastClaimedFor[miner]; uint256 vestingDays = sbController.getServicePoolVestingDays( address(this) ); if (!(day > dayLastClaimedFor.add(vestingDays))) { return 0; } return _getRewardsDue(day, miner, dayLastClaimedFor, vestingDays); } // SUPPORT // ************************************************************************************* function _getMinerMineData(address miner, uint256 day) internal view returns ( uint256, uint256, uint256 ) { uint256[] memory _Days = minerMineDays[miner]; uint256[] memory _Amounts = minerMineAmounts[miner]; uint256[] memory _UnitSeconds = minerMineMineSeconds[miner]; return _get(_Days, _Amounts, _UnitSeconds, day); } function _getMineData(uint256 day) internal view returns ( uint256, uint256, uint256 ) { return _get(mineDays, mineAmounts, mineMineSeconds, day); } function _get( uint256[] memory _Days, uint256[] memory _Amounts, uint256[] memory _UnitSeconds, uint256 day ) internal pure returns ( uint256, uint256, uint256 ) { uint256 len = _Days.length; if (len == 0) { return (day, 0, 0); } if (day < _Days[0]) { return (day, 0, 0); } uint256 lastIndex = len.sub(1); uint256 lastMinedDay = _Days[lastIndex]; if (day == lastMinedDay) { return (day, _Amounts[lastIndex], _UnitSeconds[lastIndex]); } else if (day > lastMinedDay) { return (day, _Amounts[lastIndex], _Amounts[lastIndex].mul(1 days)); } return _find(_Days, _Amounts, _UnitSeconds, day); } function _find( uint256[] memory _Days, uint256[] memory _Amounts, uint256[] memory _UnitSeconds, uint256 day ) internal pure returns ( uint256, uint256, uint256 ) { uint256 left = 0; uint256 right = _Days.length.sub(1); uint256 middle = right.add(left).div(2); while (left < right) { if (_Days[middle] == day) { return (day, _Amounts[middle], _UnitSeconds[middle]); } else if (_Days[middle] > day) { if (middle > 0 && _Days[middle.sub(1)] < day) { return ( day, _Amounts[middle.sub(1)], _Amounts[middle.sub(1)].mul(1 days) ); } if (middle == 0) { return (day, 0, 0); } right = middle.sub(1); } else if (_Days[middle] < day) { if ( middle < _Days.length.sub(1) && _Days[middle.add(1)] > day ) { return ( day, _Amounts[middle], _Amounts[middle].mul(1 days) ); } left = middle.add(1); } middle = right.add(left).div(2); } if (_Days[middle] != day) { return (day, 0, 0); } else { return (day, _Amounts[middle], _UnitSeconds[middle]); } } function _update( uint256[] storage _Days, uint256[] storage _Amounts, uint256[] storage _UnitSeconds, uint256 amount, bool adding, uint256 currentDay ) internal { uint256 len = _Days.length; uint256 secondsInADay = 1 days; uint256 secondsSinceStartOfDay = block.timestamp % secondsInADay; uint256 secondsUntilEndOfDay = secondsInADay.sub( secondsSinceStartOfDay ); if (len == 0) { if (adding) { _Days.push(currentDay); _Amounts.push(amount); _UnitSeconds.push(amount.mul(secondsUntilEndOfDay)); } else { require(false, "1: not enough mine"); } } else { uint256 lastIndex = len.sub(1); uint256 lastMinedDay = _Days[lastIndex]; uint256 lastMinedAmount = _Amounts[lastIndex]; uint256 lastUnitSeconds = _UnitSeconds[lastIndex]; uint256 newAmount; uint256 newUnitSeconds; if (lastMinedDay == currentDay) { if (adding) { newAmount = lastMinedAmount.add(amount); newUnitSeconds = lastUnitSeconds.add( amount.mul(secondsUntilEndOfDay) ); } else { require(lastMinedAmount >= amount, "2: not enough mine"); newAmount = lastMinedAmount.sub(amount); newUnitSeconds = lastUnitSeconds.sub( amount.mul(secondsUntilEndOfDay) ); } _Amounts[lastIndex] = newAmount; _UnitSeconds[lastIndex] = newUnitSeconds; } else { if (adding) { newAmount = lastMinedAmount.add(amount); newUnitSeconds = lastMinedAmount.mul(1 days).add( amount.mul(secondsUntilEndOfDay) ); } else { require(lastMinedAmount >= amount, "3: not enough mine"); newAmount = lastMinedAmount.sub(amount); newUnitSeconds = lastMinedAmount.mul(1 days).sub( amount.mul(secondsUntilEndOfDay) ); } _Days.push(currentDay); _Amounts.push(newAmount); _UnitSeconds.push(newUnitSeconds); } } } function _claim( uint256 upToDay, address miner, uint256 dayLastClaimedFor, uint256 vestingDays ) internal { uint256 rewards = _getRewardsDue( upToDay, miner, dayLastClaimedFor, vestingDays ); require(rewards > 0, "no rewards"); (uint256 numerator, uint256 denominator) = sbController .getServicePoolClaimingFee(address(this)); uint256 fee = rewards.mul(numerator).div(denominator); require(msg.value == fee, "invalid fee"); sbEthFeePool.deposit{value: msg.value}(); minerDayLastClaimedFor[miner] = upToDay.sub(vestingDays); sbController.requestRewards(miner, rewards); } function _getRewardsDue( uint256 upToDay, address miner, uint256 dayLastClaimedFor, uint256 vestingDays ) internal view returns (uint256) { uint256 rewards; for ( uint256 day = dayLastClaimedFor.add(1); day <= upToDay.sub(vestingDays); day++ ) { uint256 availableRewards = sbController.getServicePoolRewards( address(this), day ); (, uint256 minerCountForDay, ) = _getMinerMineData(miner, day); (, uint256 countForDay, ) = _getMineData(day); if (countForDay == 0) { continue; } uint256 amount = availableRewards.mul(minerCountForDay).div( countForDay ); rewards = rewards.add(amount); } return rewards; } function _getCurrentDay() internal view returns (uint256) { return block.timestamp.div(1 days).add(1); } function _deleteIndex(uint256 index) internal { uint256 lastIndex = services.length.sub(1); address lastService = services[lastIndex]; if (index == lastIndex) { serviceIndex[lastService] = 0; services.pop(); } else { address serviceAtIndex = services[index]; serviceIndex[serviceAtIndex] = 0; serviceIndex[lastService] = index; services[index] = lastService; services.pop(); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface sbControllerInterface { function requestRewards(address miner, uint256 amount) external; function isValuePoolAccepted(address valuePool) external view returns (bool); function getValuePoolRewards(address valuePool, uint256 day) external view returns (uint256); function getValuePoolMiningFee(address valuePool) external returns (uint256, uint256); function getValuePoolUnminingFee(address valuePool) external returns (uint256, uint256); function getValuePoolClaimingFee(address valuePool) external returns (uint256, uint256); function isServicePoolAccepted(address servicePool) external view returns (bool); function getServicePoolRewards(address servicePool, uint256 day) external view returns (uint256); function getServicePoolClaimingFee(address servicePool) external returns (uint256, uint256); function getServicePoolRequestFeeInWei(address servicePool) external returns (uint256); function getVoteForServicePoolsCount() external view returns (uint256); function getVoteForServicesCount() external view returns (uint256); function getVoteCastersRewards(uint256 dayNumber) external view returns (uint256); function getVoteReceiversRewards(uint256 dayNumber) external view returns (uint256); function getMinerMinMineDays() external view returns (uint256); function getServiceMinMineDays() external view returns (uint256); function getMinerMinMineAmountInWei() external view returns (uint256); function getServiceMinMineAmountInWei() external view returns (uint256); function getValuePoolVestingDays(address valuePool) external view returns (uint256); function getServicePoolVestingDays(address poservicePoolol) external view returns (uint256); function getVoteCasterVestingDays() external view returns (uint256); function getVoteReceiverVestingDays() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface sbEthFeePoolInterface { function deposit() external payable; }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface sbStrongValuePoolInterface { function mineFor(address miner, uint256 amount) external; function getMinerMineData(address miner, uint256 day) external view returns ( uint256, uint256, uint256 ); function getMineData(uint256 day) external view returns ( uint256, uint256, uint256 ); function serviceMinMined(address miner) external view returns (bool); function minerMinMined(address miner) external view returns (bool); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"}],"name":"claimUpTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dayNumber","type":"uint256"}],"name":"getMineData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"getMinerDayLastClaimedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"},{"internalType":"uint256","name":"dayNumber","type":"uint256"}],"name":"getMinerMineData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"getRewardsDueAll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"day","type":"uint256"},{"internalType":"address","name":"miner","type":"address"}],"name":"getRewardsDueUpTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getServices","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"miners","type":"address[]"},{"internalType":"bool","name":"useChecks","type":"bool"}],"name":"grantAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sbStrongValuePoolAddress","type":"address"},{"internalType":"address","name":"sbEthFeePoolAddress","type":"address"},{"internalType":"address","name":"sbControllerAddress","type":"address"},{"internalType":"address","name":"adminAddress","type":"address"},{"internalType":"address","name":"superAdminAddress","type":"address"},{"internalType":"address","name":"serviceAdminAddress","type":"address"},{"internalType":"string","name":"desc","type":"string"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"service","type":"address"}],"name":"isServiceAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mineAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mineDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mineMineSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerDayLastClaimedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"minerMineAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"minerMineDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"minerMineMineSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSuperAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"requestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"revokeAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"sbController","outputs":[{"internalType":"contract sbControllerInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbEthFeePool","outputs":[{"internalType":"contract sbEthFeePoolInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sbStrongValuePool","outputs":[{"internalType":"contract sbStrongValuePoolInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"serviceAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"serviceAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"serviceIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"services","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingSuperAdmin","type":"address"}],"name":"setPendingSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newServiceAdmin","type":"address"}],"name":"updateServiceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50613044806100206000396000f3fe6080604052600436106102305760003560e01c8063754178511161012e578063db02fc60116100ab578063eb87e89b1161006f578063eb87e89b14610984578063f1e5ff3e146109ae578063f851a440146109e1578063fed0a20e146109f6578063ffbb698914610a0b57610230565b8063db02fc60146108d1578063db374cbb14610904578063e4d01a641461093d578063e7f9cefd14610967578063eb2f48171461097c57610230565b8063c84ad2c7116100f2578063c84ad2c714610815578063d1058e5914610848578063d39ca7de14610850578063d5c16c2f14610883578063da998dca146108bc57610230565b8063754178511461070357806385e68531146107685780639900285b1461078e578063ad553eef146107b8578063c22c4f43146107eb57610230565b80632fa41caf116101bc57806348028d631161018057806348028d63146105b75780634dd18bf5146105cc578063667e3f61146105ff5780637284e4161461064657806373b29a8b146106d057610230565b80632fa41caf146104355780633481050e1461044a578063358ff3d814610536578063426338b21461056f57806346d071fc146105a257610230565b8063267822471161020357806326782247146102e557806329575f6a146102fa5780632d27a8711461030f5780632e7fba1d146103395780632ede39201461039057610230565b80630d65d00a146102355780630e18b681146102665780631320671d1461027d5780631ba2295a146102c8575b600080fd5b34801561024157600080fd5b5061024a610a3e565b604080516001600160a01b039092168252519081900360200190f35b34801561027257600080fd5b5061027b610a4d565b005b34801561028957600080fd5b506102b6600480360360408110156102a057600080fd5b506001600160a01b038135169060200135610adc565b60408051918252519081900360200190f35b61027b600480360360208110156102de57600080fd5b5035610b0a565b3480156102f157600080fd5b5061024a610def565b34801561030657600080fd5b5061024a610dfe565b34801561031b57600080fd5b506102b66004803603602081101561033257600080fd5b5035610e0d565b34801561034557600080fd5b506103726004803603604081101561035c57600080fd5b506001600160a01b038135169060200135610e2b565b60408051938452602084019290925282820152519081900360600190f35b61027b600480360360408110156103a657600080fd5b8101906020810181356401000000008111156103c157600080fd5b8201836020820111156103d357600080fd5b803590602001918460208302840111640100000000831117156103f557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050503515159050610e5e565b34801561044157600080fd5b5061024a61118d565b34801561045657600080fd5b5061027b600480360360e081101561046d57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135811692608081013582169260a08201359092169181019060e0810160c08201356401000000008111156104c157600080fd5b8201836020820111156104d357600080fd5b803590602001918460018302840111640100000000831117156104f557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061119c945050505050565b34801561054257600080fd5b506102b66004803603604081101561055957600080fd5b50803590602001356001600160a01b0316611279565b34801561057b57600080fd5b506102b66004803603602081101561059257600080fd5b50356001600160a01b0316611402565b3480156105ae57600080fd5b5061024a611498565b3480156105c357600080fd5b5061024a6114a7565b3480156105d857600080fd5b5061027b600480360360208110156105ef57600080fd5b50356001600160a01b03166114b6565b34801561060b57600080fd5b506106326004803603602081101561062257600080fd5b50356001600160a01b0316611528565b604080519115158252519081900360200190f35b34801561065257600080fd5b5061065b61153d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561069557818101518382015260200161067d565b50505050905090810190601f1680156106c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106dc57600080fd5b506102b6600480360360208110156106f357600080fd5b50356001600160a01b03166115cb565b34801561070f57600080fd5b506107186115dd565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561075457818101518382015260200161073c565b505050509050019250505060405180910390f35b61027b6004803603602081101561077e57600080fd5b50356001600160a01b031661163f565b34801561079a57600080fd5b506102b6600480360360208110156107b157600080fd5b50356117b3565b3480156107c457600080fd5b5061027b600480360360208110156107db57600080fd5b50356001600160a01b03166117c0565b3480156107f757600080fd5b5061024a6004803603602081101561080e57600080fd5b50356117f9565b34801561082157600080fd5b506106326004803603602081101561083857600080fd5b50356001600160a01b0316611820565b61027b61183e565b34801561085c57600080fd5b5061027b6004803603602081101561087357600080fd5b50356001600160a01b0316611ac8565b34801561088f57600080fd5b506102b6600480360360408110156108a657600080fd5b506001600160a01b038135169060200135611b3a565b3480156108c857600080fd5b5061024a611b53565b3480156108dd57600080fd5b506102b6600480360360208110156108f457600080fd5b50356001600160a01b0316611b62565b34801561091057600080fd5b506102b66004803603604081101561092757600080fd5b506001600160a01b038135169060200135611b74565b34801561094957600080fd5b506102b66004803603602081101561096057600080fd5b5035611b8d565b34801561097357600080fd5b5061027b611b9a565b61027b611c23565b34801561099057600080fd5b50610372600480360360208110156109a757600080fd5b5035611e04565b3480156109ba57600080fd5b506102b6600480360360208110156109d157600080fd5b50356001600160a01b0316611e36565b3480156109ed57600080fd5b5061024a611f82565b348015610a0257600080fd5b50610632611f96565b348015610a1757600080fd5b5061063260048036036020811015610a2e57600080fd5b50356001600160a01b0316611f9f565b6007546001600160a01b031681565b6001546001600160a01b031633148015610a6657503315155b610aaa576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60086020528160005260406000208181548110610af557fe5b90600052602060002001600091509150505481565b3360009081526008602052604090205480610b57576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff16610bab576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d6020811015610c2057600080fd5b5051610c63576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b610c6b611fb4565b821115610cad576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b336000908152600e602052604081205415610cd757336000908152600e6020526040902054610d0f565b3360009081526008602052604081208054610d0f9260019291610cf657fe5b9060005260206000200154611fd390919063ffffffff16565b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015610d6057600080fd5b505afa158015610d74573d6000803e3d6000fd5b505050506040513d6020811015610d8a57600080fd5b50519050610d98828261201c565b8411610ddd576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de984338484612076565b50505050565b6001546001600160a01b031681565b6002546001600160a01b031681565b600c8181548110610e1a57fe5b600091825260209091200154905081565b60008080808415610e3c5784610e44565b610e44611fb4565b9050610e5086826122ab565b935093509350509250925092565b60005461010090046001600160a01b0316331480610e8657506004546001600160a01b031633145b80610e9b57506002546001600160a01b031633145b610ed8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b8151610f14576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6000610f1e611fb4565b905060005b8351811015610de9576000848281518110610f3a57fe5b60200260200101519050831561105f576001600160a01b03811660009081526012602052604090205460ff16610fa5576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b600554604080516376d53d6160e01b81526001600160a01b038481166004830152915191909216916376d53d61916024808301926020929190829003018186803b158015610ff257600080fd5b505afa158015611006573d6000803e3d6000fd5b505050506040513d602081101561101c57600080fd5b505161105f576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16156110b6576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b6001600160a01b038116600090815260086020908152604080832060098352818420600a90935292206110ee92919060018088612408565b611100600b600c600d60018088612408565b600f80546001600160a01b03909216600081815260106020908152604080832086905560018087019095557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290950180546001600160a01b0319168417905591815260118252838120805460ff199081168517909155601290925292909220805490921690915501610f23565b6005546001600160a01b031681565b60005460ff16156111e0576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600580546001600160a01b03199081166001600160a01b038a81169190911790925560068054821689841617905560078054821688841617905560008054610100600160a81b03191661010088851602179055600280548216868416179055600480549091169184169190911790558051611262906013906020840190612f5a565b50506000805460ff19166001179055505050505050565b6001600160a01b038116600090815260086020526040812054806112a15760009150506113fc565b6112a9611fb4565b8411156112eb576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604081205415611327576001600160a01b0384166000908152600e602052604090205461134f565b6001600160a01b0384166000908152600860205260408120805461134f9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b505190506113d8828261201c565b86116113ea57600093505050506113fc565b6113f686868484612739565b93505050505b92915050565b6001600160a01b038116600090815260086020526040812054801561148d576001600160a01b0383166000908152600e60205260409020541561145d576001600160a01b0383166000908152600e6020526040902054611485565b6001600160a01b038316600090815260086020526040812080546114859260019291610cf657fe5b915050611493565b60009150505b919050565b6006546001600160a01b031681565b6003546001600160a01b031681565b60005461010090046001600160a01b03163314611506576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60116020526000908152604090205460ff1681565b6013805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b60106020526000908152604090205481565b6060600f80548060200260200160405190810160405280929190818152602001828054801561163557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611617575b5050505050905090565b60005461010090046001600160a01b031633148061166757506004546001600160a01b031633145b8061167c57506002546001600160a01b031633145b6116b9576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16611716576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b6000611720611fb4565b6001600160a01b038316600090815260086020908152604080832060098352818420600a90935290832093945061175c93909260019086612408565b61176f600b600c600d6001600086612408565b6001600160a01b0382166000908152601060205260409020546117919061283c565b506001600160a01b03166000908152601160205260409020805460ff19169055565b600b8181548110610e1a57fe5b6002546001600160a01b031633146117d757600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600f818154811061180657fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526011602052604090205460ff1690565b336000908152600860205260409020548061188b576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff166118df576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b15801561192a57600080fd5b505afa15801561193e573d6000803e3d6000fd5b505050506040513d602081101561195457600080fd5b5051611997576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b60006119a1611fb4565b336000908152600e602052604081205491925090156119cf57336000908152600e60205260409020546119ee565b33600090815260086020526040812080546119ee9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611a3f57600080fd5b505afa158015611a53573d6000803e3d6000fd5b505050506040513d6020811015611a6957600080fd5b50519050611a77828261201c565b8311611abc576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de983338484612076565b6002546001600160a01b03163314611b18576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60096020528160005260406000208181548110610af557fe5b6004546001600160a01b031681565b600e6020526000908152604090205481565b600a6020528160005260406000208181548110610af557fe5b600d8181548110610e1a57fe5b6003546001600160a01b031633148015611bb357503315155b611bfc576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526012602052604090205460ff1615611c72576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b3360009081526011602052604090205460ff1615611cc2576040805162461bcd60e51b81526020600482015260086024820152671858d8d95c1d195960c21b604482015290519081900360640190fd5b60075460408051633af850df60e21b815230600482015290516000926001600160a01b03169163ebe1437c91602480830192602092919082900301818787803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b505050506040513d6020811015611d3857600080fd5b50519050348114611d7e576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b5050336000908152601260205260409020805460ff1916600117905550505050565b60008080808415611e155784611e1d565b611e1d611fb4565b9050611e2881612980565b935093509350509193909250565b6001600160a01b03811660009081526008602052604081205480611e5e576000915050611493565b6000611e68611fb4565b6001600160a01b0385166000908152600e60205260408120549192509015611ea8576001600160a01b0385166000908152600e6020526040902054611ed0565b6001600160a01b03851660009081526008602052604081208054611ed09260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b50519050611f59828261201c565b8311611f6c576000945050505050611493565b611f7883878484612739565b9695505050505050565b60005461010090046001600160a01b031681565b60005460ff1681565b60126020526000908152604090205460ff1681565b6000611fce6001611fc84262015180612a8e565b9061201c565b905090565b600061201583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ad0565b9392505050565b600082820183811015612015576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061208485858585612739565b9050600081116120c8576040805162461bcd60e51b815260206004820152600a6024820152696e6f207265776172647360b01b604482015290519081900360640190fd5b60075460408051632c8abfc160e11b8152306004820152815160009384936001600160a01b03909116926359157f82926024808301939282900301818787803b15801561211457600080fd5b505af1158015612128573d6000803e3d6000fd5b505050506040513d604081101561213e57600080fd5b508051602090910151909250905060006121628261215c8686612b67565b90612a8e565b90508034146121a6576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121f657600080fd5b505af115801561220a573d6000803e3d6000fd5b50505050506122228589611fd390919063ffffffff16565b6001600160a01b038089166000818152600e6020526040808220949094556007548451635fe43d2360e11b81526004810193909352602483018990529351939092169263bfc87a469260448084019391929182900301818387803b15801561228957600080fd5b505af115801561229d573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b03821660009081526008602090815260408083208054825181850281018501909352808352849384936060939092909183018282801561231157602002820191906000526020600020905b8154815260200190600101908083116122fd575b5050506001600160a01b0389166000908152600960209081526040918290208054835181840281018401909452808452959650606095929450925083018282801561237b57602002820191906000526020600020905b815481526020019060010190808311612367575b5050506001600160a01b038a166000908152600a6020908152604091829020805483518184028101840190945280845295965060609592945092508301828280156123e557602002820191906000526020600020905b8154815260200190600101908083116123d1575b505050505090506123f88383838a612bc0565b9550955095505050509250925092565b85546201518042819006600061241e8383611fd3565b9050836124c357851561247c57895460018181018c5560008c815260208082209093018890558b549182018c558b81529190912001879055876124618883612b67565b815460018101835560009283526020909220909101556124be565b6040805162461bcd60e51b8152602060048201526012602482015271313a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b61272d565b60006124d0856001611fd3565b905060008b82815481106124e057fe5b9060005260206000200154905060008b83815481106124fb57fe5b9060005260206000200154905060008b848154811061251657fe5b906000526020600020015490506000808a851415612601578b1561255b5761253e848e61201c565b915061255461254d8e89612b67565b849061201c565b90506125c8565b8c8410156125a5576040805162461bcd60e51b8152602060048201526012602482015271323a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b6125af848e611fd3565b91506125c56125be8e89612b67565b8490611fd3565b90505b818f87815481106125d557fe5b9060005260206000200181905550808e87815481106125f057fe5b600091825260209091200155612726565b8b1561263457612611848e61201c565b915061262d6126208e89612b67565b611fc88662015180612b67565b90506126ad565b8c84101561267e576040805162461bcd60e51b8152602060048201526012602482015271333a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b612688848e611fd3565b91506126aa6126978e89612b67565b6126a48662015180612b67565b90611fd3565b90505b8f8b90806001815401808255809150506001900390600052602060002001600090919091909150558e8290806001815401808255809150506001900390600052602060002001600090919091909150558d8190806001815401808255809150506001900390600052602060002001600090919091909150555b5050505050505b50505050505050505050565b6000808061274885600161201c565b90505b6127558785611fd3565b81116128325760075460408051635ea925a360e01b81523060048201526024810184905290516000926001600160a01b031691635ea925a3916044808301926020929190829003018186803b1580156127ad57600080fd5b505afa1580156127c1573d6000803e3d6000fd5b505050506040513d60208110156127d757600080fd5b5051905060006127e788846122ab565b5091505060006127f684612980565b50915050806128075750505061282a565b60006128178261215c8686612b67565b9050612823868261201c565b9550505050505b60010161274b565b5095945050505050565b600f5460009061284d906001611fd3565b90506000600f828154811061285e57fe5b6000918252602090912001546001600160a01b03169050828214156128c8576001600160a01b038116600090815260106020526040812055600f8054806128a157fe5b600082815260209020810160001990810180546001600160a01b031916905501905561297b565b6000600f84815481106128d757fe5b60009182526020808320909101546001600160a01b03908116808452601090925260408084208490559085168352909120859055600f805491925083918690811061291e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f80548061295757fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b505050565b6000806000612a81600b8054806020026020016040519081016040528092919081815260200182805480156129d457602002820191906000526020600020905b8154815260200190600101908083116129c0575b5050505050600c805480602002602001604051908101604052809291908181526020018280548015612a2557602002820191906000526020600020905b815481526020019060010190808311612a11575b5050505050600d805480602002602001604051908101604052809291908181526020018280548015612a7657602002820191906000526020600020905b815481526020019060010190808311612a62575b505050505087612bc0565b9250925092509193909250565b600061201583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ce4565b60008184841115612b5f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b24578181015183820152602001612b0c565b50505050905090810190601f168015612b515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082612b76575060006113fc565b82820282848281612b8357fe5b04146120155760405162461bcd60e51b8152600401808060200182810382526021815260200180612fee6021913960400191505060405180910390fd5b83516000908190819080612bde578460008093509350935050612cda565b87600081518110612beb57fe5b6020026020010151851015612c0a578460008093509350935050612cda565b6000612c17826001611fd3565b90506000898281518110612c2757fe5b6020026020010151905080871415612c705786898381518110612c4657fe5b6020026020010151898481518110612c5a57fe5b6020026020010151955095509550505050612cda565b80871115612cc45786898381518110612c8557fe5b6020026020010151612cb6620151808c8681518110612ca057fe5b6020026020010151612b6790919063ffffffff16565b955095509550505050612cda565b612cd08a8a8a8a612d49565b9550955095505050505b9450945094915050565b60008183612d335760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b24578181015183820152602001612b0c565b506000838581612d3f57fe5b0495945050505050565b600080600080600090506000612d6a60018a51611fd390919063ffffffff16565b90506000612d7d600261215c848661201c565b90505b81831015612f2157868a8281518110612d9557fe5b60200260200101511415612dc45786898281518110612db057fe5b6020026020010151898381518110612c5a57fe5b868a8281518110612dd157fe5b60200260200101511115612e7e57600081118015612e0b5750868a612df7836001611fd3565b81518110612e0157fe5b6020026020010151105b15612e55578689612e1d836001611fd3565b81518110612e2757fe5b6020026020010151612cb6620151808c612e4b600187611fd390919063ffffffff16565b81518110612ca057fe5b80612e6c5786600080955095509550505050612cda565b612e77816001611fd3565b9150612f0b565b868a8281518110612e8b57fe5b60200260200101511015612f0b578951612ea6906001611fd3565b81108015612ed05750868a612ebc83600161201c565b81518110612ec657fe5b6020026020010151115b15612efd5786898281518110612ee257fe5b6020026020010151612cb6620151808c8581518110612ca057fe5b612f0881600161201c565b92505b612f1a600261215c848661201c565b9050612d80565b868a8281518110612f2e57fe5b602002602001015114612f4d5786600080955095509550505050612cda565b86898281518110612db057fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f9b57805160ff1916838001178555612fc8565b82800160010185558215612fc8579182015b82811115612fc8578251825591602001919060010190612fad565b50612fd4929150612fd8565b5090565b5b80821115612fd45760008155600101612fd956fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207534f7c5be2f9325ad84bc7d6456ca4c5c4decb68ba2b9ff2cd47c2df79baed764736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102305760003560e01c8063754178511161012e578063db02fc60116100ab578063eb87e89b1161006f578063eb87e89b14610984578063f1e5ff3e146109ae578063f851a440146109e1578063fed0a20e146109f6578063ffbb698914610a0b57610230565b8063db02fc60146108d1578063db374cbb14610904578063e4d01a641461093d578063e7f9cefd14610967578063eb2f48171461097c57610230565b8063c84ad2c7116100f2578063c84ad2c714610815578063d1058e5914610848578063d39ca7de14610850578063d5c16c2f14610883578063da998dca146108bc57610230565b8063754178511461070357806385e68531146107685780639900285b1461078e578063ad553eef146107b8578063c22c4f43146107eb57610230565b80632fa41caf116101bc57806348028d631161018057806348028d63146105b75780634dd18bf5146105cc578063667e3f61146105ff5780637284e4161461064657806373b29a8b146106d057610230565b80632fa41caf146104355780633481050e1461044a578063358ff3d814610536578063426338b21461056f57806346d071fc146105a257610230565b8063267822471161020357806326782247146102e557806329575f6a146102fa5780632d27a8711461030f5780632e7fba1d146103395780632ede39201461039057610230565b80630d65d00a146102355780630e18b681146102665780631320671d1461027d5780631ba2295a146102c8575b600080fd5b34801561024157600080fd5b5061024a610a3e565b604080516001600160a01b039092168252519081900360200190f35b34801561027257600080fd5b5061027b610a4d565b005b34801561028957600080fd5b506102b6600480360360408110156102a057600080fd5b506001600160a01b038135169060200135610adc565b60408051918252519081900360200190f35b61027b600480360360208110156102de57600080fd5b5035610b0a565b3480156102f157600080fd5b5061024a610def565b34801561030657600080fd5b5061024a610dfe565b34801561031b57600080fd5b506102b66004803603602081101561033257600080fd5b5035610e0d565b34801561034557600080fd5b506103726004803603604081101561035c57600080fd5b506001600160a01b038135169060200135610e2b565b60408051938452602084019290925282820152519081900360600190f35b61027b600480360360408110156103a657600080fd5b8101906020810181356401000000008111156103c157600080fd5b8201836020820111156103d357600080fd5b803590602001918460208302840111640100000000831117156103f557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050503515159050610e5e565b34801561044157600080fd5b5061024a61118d565b34801561045657600080fd5b5061027b600480360360e081101561046d57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135811692608081013582169260a08201359092169181019060e0810160c08201356401000000008111156104c157600080fd5b8201836020820111156104d357600080fd5b803590602001918460018302840111640100000000831117156104f557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061119c945050505050565b34801561054257600080fd5b506102b66004803603604081101561055957600080fd5b50803590602001356001600160a01b0316611279565b34801561057b57600080fd5b506102b66004803603602081101561059257600080fd5b50356001600160a01b0316611402565b3480156105ae57600080fd5b5061024a611498565b3480156105c357600080fd5b5061024a6114a7565b3480156105d857600080fd5b5061027b600480360360208110156105ef57600080fd5b50356001600160a01b03166114b6565b34801561060b57600080fd5b506106326004803603602081101561062257600080fd5b50356001600160a01b0316611528565b604080519115158252519081900360200190f35b34801561065257600080fd5b5061065b61153d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561069557818101518382015260200161067d565b50505050905090810190601f1680156106c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106dc57600080fd5b506102b6600480360360208110156106f357600080fd5b50356001600160a01b03166115cb565b34801561070f57600080fd5b506107186115dd565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561075457818101518382015260200161073c565b505050509050019250505060405180910390f35b61027b6004803603602081101561077e57600080fd5b50356001600160a01b031661163f565b34801561079a57600080fd5b506102b6600480360360208110156107b157600080fd5b50356117b3565b3480156107c457600080fd5b5061027b600480360360208110156107db57600080fd5b50356001600160a01b03166117c0565b3480156107f757600080fd5b5061024a6004803603602081101561080e57600080fd5b50356117f9565b34801561082157600080fd5b506106326004803603602081101561083857600080fd5b50356001600160a01b0316611820565b61027b61183e565b34801561085c57600080fd5b5061027b6004803603602081101561087357600080fd5b50356001600160a01b0316611ac8565b34801561088f57600080fd5b506102b6600480360360408110156108a657600080fd5b506001600160a01b038135169060200135611b3a565b3480156108c857600080fd5b5061024a611b53565b3480156108dd57600080fd5b506102b6600480360360208110156108f457600080fd5b50356001600160a01b0316611b62565b34801561091057600080fd5b506102b66004803603604081101561092757600080fd5b506001600160a01b038135169060200135611b74565b34801561094957600080fd5b506102b66004803603602081101561096057600080fd5b5035611b8d565b34801561097357600080fd5b5061027b611b9a565b61027b611c23565b34801561099057600080fd5b50610372600480360360208110156109a757600080fd5b5035611e04565b3480156109ba57600080fd5b506102b6600480360360208110156109d157600080fd5b50356001600160a01b0316611e36565b3480156109ed57600080fd5b5061024a611f82565b348015610a0257600080fd5b50610632611f96565b348015610a1757600080fd5b5061063260048036036020811015610a2e57600080fd5b50356001600160a01b0316611f9f565b6007546001600160a01b031681565b6001546001600160a01b031633148015610a6657503315155b610aaa576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60086020528160005260406000208181548110610af557fe5b90600052602060002001600091509150505481565b3360009081526008602052604090205480610b57576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff16610bab576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d6020811015610c2057600080fd5b5051610c63576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b610c6b611fb4565b821115610cad576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b336000908152600e602052604081205415610cd757336000908152600e6020526040902054610d0f565b3360009081526008602052604081208054610d0f9260019291610cf657fe5b9060005260206000200154611fd390919063ffffffff16565b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015610d6057600080fd5b505afa158015610d74573d6000803e3d6000fd5b505050506040513d6020811015610d8a57600080fd5b50519050610d98828261201c565b8411610ddd576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de984338484612076565b50505050565b6001546001600160a01b031681565b6002546001600160a01b031681565b600c8181548110610e1a57fe5b600091825260209091200154905081565b60008080808415610e3c5784610e44565b610e44611fb4565b9050610e5086826122ab565b935093509350509250925092565b60005461010090046001600160a01b0316331480610e8657506004546001600160a01b031633145b80610e9b57506002546001600160a01b031633145b610ed8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b8151610f14576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6000610f1e611fb4565b905060005b8351811015610de9576000848281518110610f3a57fe5b60200260200101519050831561105f576001600160a01b03811660009081526012602052604090205460ff16610fa5576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b600554604080516376d53d6160e01b81526001600160a01b038481166004830152915191909216916376d53d61916024808301926020929190829003018186803b158015610ff257600080fd5b505afa158015611006573d6000803e3d6000fd5b505050506040513d602081101561101c57600080fd5b505161105f576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16156110b6576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b6001600160a01b038116600090815260086020908152604080832060098352818420600a90935292206110ee92919060018088612408565b611100600b600c600d60018088612408565b600f80546001600160a01b03909216600081815260106020908152604080832086905560018087019095557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290950180546001600160a01b0319168417905591815260118252838120805460ff199081168517909155601290925292909220805490921690915501610f23565b6005546001600160a01b031681565b60005460ff16156111e0576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600580546001600160a01b03199081166001600160a01b038a81169190911790925560068054821689841617905560078054821688841617905560008054610100600160a81b03191661010088851602179055600280548216868416179055600480549091169184169190911790558051611262906013906020840190612f5a565b50506000805460ff19166001179055505050505050565b6001600160a01b038116600090815260086020526040812054806112a15760009150506113fc565b6112a9611fb4565b8411156112eb576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642064617960a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604081205415611327576001600160a01b0384166000908152600e602052604090205461134f565b6001600160a01b0384166000908152600860205260408120805461134f9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b505190506113d8828261201c565b86116113ea57600093505050506113fc565b6113f686868484612739565b93505050505b92915050565b6001600160a01b038116600090815260086020526040812054801561148d576001600160a01b0383166000908152600e60205260409020541561145d576001600160a01b0383166000908152600e6020526040902054611485565b6001600160a01b038316600090815260086020526040812080546114859260019291610cf657fe5b915050611493565b60009150505b919050565b6006546001600160a01b031681565b6003546001600160a01b031681565b60005461010090046001600160a01b03163314611506576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60116020526000908152604090205460ff1681565b6013805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b505050505081565b60106020526000908152604090205481565b6060600f80548060200260200160405190810160405280929190818152602001828054801561163557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611617575b5050505050905090565b60005461010090046001600160a01b031633148061166757506004546001600160a01b031633145b8061167c57506002546001600160a01b031633145b6116b9576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03811660009081526011602052604090205460ff16611716576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b6000611720611fb4565b6001600160a01b038316600090815260086020908152604080832060098352818420600a90935290832093945061175c93909260019086612408565b61176f600b600c600d6001600086612408565b6001600160a01b0382166000908152601060205260409020546117919061283c565b506001600160a01b03166000908152601160205260409020805460ff19169055565b600b8181548110610e1a57fe5b6002546001600160a01b031633146117d757600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600f818154811061180657fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526011602052604090205460ff1690565b336000908152600860205260409020548061188b576040805162461bcd60e51b81526020600482015260086024820152676e6f206d696e657360c01b604482015290519081900360640190fd5b3360009081526011602052604090205460ff166118df576040805162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21036b4b732b960991b604482015290519081900360640190fd5b600554604080516376d53d6160e01b815233600482015290516001600160a01b03909216916376d53d6191602480820192602092909190829003018186803b15801561192a57600080fd5b505afa15801561193e573d6000803e3d6000fd5b505050506040513d602081101561195457600080fd5b5051611997576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081b5a5b881b5a5b9959609a1b604482015290519081900360640190fd5b60006119a1611fb4565b336000908152600e602052604081205491925090156119cf57336000908152600e60205260409020546119ee565b33600090815260086020526040812080546119ee9260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611a3f57600080fd5b505afa158015611a53573d6000803e3d6000fd5b505050506040513d6020811015611a6957600080fd5b50519050611a77828261201c565b8311611abc576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b604482015290519081900360640190fd5b610de983338484612076565b6002546001600160a01b03163314611b18576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60096020528160005260406000208181548110610af557fe5b6004546001600160a01b031681565b600e6020526000908152604090205481565b600a6020528160005260406000208181548110610af557fe5b600d8181548110610e1a57fe5b6003546001600160a01b031633148015611bb357503315155b611bfc576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b3360009081526012602052604090205460ff1615611c72576040805162461bcd60e51b815260206004820152600760248201526670656e64696e6760c81b604482015290519081900360640190fd5b3360009081526011602052604090205460ff1615611cc2576040805162461bcd60e51b81526020600482015260086024820152671858d8d95c1d195960c21b604482015290519081900360640190fd5b60075460408051633af850df60e21b815230600482015290516000926001600160a01b03169163ebe1437c91602480830192602092919082900301818787803b158015611d0e57600080fd5b505af1158015611d22573d6000803e3d6000fd5b505050506040513d6020811015611d3857600080fd5b50519050348114611d7e576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b5050336000908152601260205260409020805460ff1916600117905550505050565b60008080808415611e155784611e1d565b611e1d611fb4565b9050611e2881612980565b935093509350509193909250565b6001600160a01b03811660009081526008602052604081205480611e5e576000915050611493565b6000611e68611fb4565b6001600160a01b0385166000908152600e60205260408120549192509015611ea8576001600160a01b0385166000908152600e6020526040902054611ed0565b6001600160a01b03851660009081526008602052604081208054611ed09260019291610cf657fe5b60075460408051633808b59960e01b815230600482015290519293506000926001600160a01b0390921691633808b59991602480820192602092909190829003018186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b50519050611f59828261201c565b8311611f6c576000945050505050611493565b611f7883878484612739565b9695505050505050565b60005461010090046001600160a01b031681565b60005460ff1681565b60126020526000908152604090205460ff1681565b6000611fce6001611fc84262015180612a8e565b9061201c565b905090565b600061201583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ad0565b9392505050565b600082820183811015612015576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061208485858585612739565b9050600081116120c8576040805162461bcd60e51b815260206004820152600a6024820152696e6f207265776172647360b01b604482015290519081900360640190fd5b60075460408051632c8abfc160e11b8152306004820152815160009384936001600160a01b03909116926359157f82926024808301939282900301818787803b15801561211457600080fd5b505af1158015612128573d6000803e3d6000fd5b505050506040513d604081101561213e57600080fd5b508051602090910151909250905060006121628261215c8686612b67565b90612a8e565b90508034146121a6576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121f657600080fd5b505af115801561220a573d6000803e3d6000fd5b50505050506122228589611fd390919063ffffffff16565b6001600160a01b038089166000818152600e6020526040808220949094556007548451635fe43d2360e11b81526004810193909352602483018990529351939092169263bfc87a469260448084019391929182900301818387803b15801561228957600080fd5b505af115801561229d573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b03821660009081526008602090815260408083208054825181850281018501909352808352849384936060939092909183018282801561231157602002820191906000526020600020905b8154815260200190600101908083116122fd575b5050506001600160a01b0389166000908152600960209081526040918290208054835181840281018401909452808452959650606095929450925083018282801561237b57602002820191906000526020600020905b815481526020019060010190808311612367575b5050506001600160a01b038a166000908152600a6020908152604091829020805483518184028101840190945280845295965060609592945092508301828280156123e557602002820191906000526020600020905b8154815260200190600101908083116123d1575b505050505090506123f88383838a612bc0565b9550955095505050509250925092565b85546201518042819006600061241e8383611fd3565b9050836124c357851561247c57895460018181018c5560008c815260208082209093018890558b549182018c558b81529190912001879055876124618883612b67565b815460018101835560009283526020909220909101556124be565b6040805162461bcd60e51b8152602060048201526012602482015271313a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b61272d565b60006124d0856001611fd3565b905060008b82815481106124e057fe5b9060005260206000200154905060008b83815481106124fb57fe5b9060005260206000200154905060008b848154811061251657fe5b906000526020600020015490506000808a851415612601578b1561255b5761253e848e61201c565b915061255461254d8e89612b67565b849061201c565b90506125c8565b8c8410156125a5576040805162461bcd60e51b8152602060048201526012602482015271323a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b6125af848e611fd3565b91506125c56125be8e89612b67565b8490611fd3565b90505b818f87815481106125d557fe5b9060005260206000200181905550808e87815481106125f057fe5b600091825260209091200155612726565b8b1561263457612611848e61201c565b915061262d6126208e89612b67565b611fc88662015180612b67565b90506126ad565b8c84101561267e576040805162461bcd60e51b8152602060048201526012602482015271333a206e6f7420656e6f756768206d696e6560701b604482015290519081900360640190fd5b612688848e611fd3565b91506126aa6126978e89612b67565b6126a48662015180612b67565b90611fd3565b90505b8f8b90806001815401808255809150506001900390600052602060002001600090919091909150558e8290806001815401808255809150506001900390600052602060002001600090919091909150558d8190806001815401808255809150506001900390600052602060002001600090919091909150555b5050505050505b50505050505050505050565b6000808061274885600161201c565b90505b6127558785611fd3565b81116128325760075460408051635ea925a360e01b81523060048201526024810184905290516000926001600160a01b031691635ea925a3916044808301926020929190829003018186803b1580156127ad57600080fd5b505afa1580156127c1573d6000803e3d6000fd5b505050506040513d60208110156127d757600080fd5b5051905060006127e788846122ab565b5091505060006127f684612980565b50915050806128075750505061282a565b60006128178261215c8686612b67565b9050612823868261201c565b9550505050505b60010161274b565b5095945050505050565b600f5460009061284d906001611fd3565b90506000600f828154811061285e57fe5b6000918252602090912001546001600160a01b03169050828214156128c8576001600160a01b038116600090815260106020526040812055600f8054806128a157fe5b600082815260209020810160001990810180546001600160a01b031916905501905561297b565b6000600f84815481106128d757fe5b60009182526020808320909101546001600160a01b03908116808452601090925260408084208490559085168352909120859055600f805491925083918690811061291e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f80548061295757fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b505050565b6000806000612a81600b8054806020026020016040519081016040528092919081815260200182805480156129d457602002820191906000526020600020905b8154815260200190600101908083116129c0575b5050505050600c805480602002602001604051908101604052809291908181526020018280548015612a2557602002820191906000526020600020905b815481526020019060010190808311612a11575b5050505050600d805480602002602001604051908101604052809291908181526020018280548015612a7657602002820191906000526020600020905b815481526020019060010190808311612a62575b505050505087612bc0565b9250925092509193909250565b600061201583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ce4565b60008184841115612b5f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b24578181015183820152602001612b0c565b50505050905090810190601f168015612b515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082612b76575060006113fc565b82820282848281612b8357fe5b04146120155760405162461bcd60e51b8152600401808060200182810382526021815260200180612fee6021913960400191505060405180910390fd5b83516000908190819080612bde578460008093509350935050612cda565b87600081518110612beb57fe5b6020026020010151851015612c0a578460008093509350935050612cda565b6000612c17826001611fd3565b90506000898281518110612c2757fe5b6020026020010151905080871415612c705786898381518110612c4657fe5b6020026020010151898481518110612c5a57fe5b6020026020010151955095509550505050612cda565b80871115612cc45786898381518110612c8557fe5b6020026020010151612cb6620151808c8681518110612ca057fe5b6020026020010151612b6790919063ffffffff16565b955095509550505050612cda565b612cd08a8a8a8a612d49565b9550955095505050505b9450945094915050565b60008183612d335760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612b24578181015183820152602001612b0c565b506000838581612d3f57fe5b0495945050505050565b600080600080600090506000612d6a60018a51611fd390919063ffffffff16565b90506000612d7d600261215c848661201c565b90505b81831015612f2157868a8281518110612d9557fe5b60200260200101511415612dc45786898281518110612db057fe5b6020026020010151898381518110612c5a57fe5b868a8281518110612dd157fe5b60200260200101511115612e7e57600081118015612e0b5750868a612df7836001611fd3565b81518110612e0157fe5b6020026020010151105b15612e55578689612e1d836001611fd3565b81518110612e2757fe5b6020026020010151612cb6620151808c612e4b600187611fd390919063ffffffff16565b81518110612ca057fe5b80612e6c5786600080955095509550505050612cda565b612e77816001611fd3565b9150612f0b565b868a8281518110612e8b57fe5b60200260200101511015612f0b578951612ea6906001611fd3565b81108015612ed05750868a612ebc83600161201c565b81518110612ec657fe5b6020026020010151115b15612efd5786898281518110612ee257fe5b6020026020010151612cb6620151808c8581518110612ca057fe5b612f0881600161201c565b92505b612f1a600261215c848661201c565b9050612d80565b868a8281518110612f2e57fe5b602002602001015114612f4d5786600080955095509550505050612cda565b86898281518110612db057fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f9b57805160ff1916838001178555612fc8565b82800160010185558215612fc8579182015b82811115612fc8578251825591602001919060010190612fad565b50612fd4929150612fd8565b5090565b5b80821115612fd45760008155600101612fd956fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212207534f7c5be2f9325ad84bc7d6456ca4c5c4decb68ba2b9ff2cd47c2df79baed764736f6c634300060c0033
Deployed Bytecode Sourcemap
226:18034:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;589:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;589:41:4;;;;;;;;;;;;;;2361:229;;;;;;;;;;;;;:::i;:::-;;637:50;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;637:50:4;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7969:812;;;;;;;;;;;;;;;;-1:-1:-1;7969:812:4;;:::i;349:27::-;;;;;;;;;;;;;:::i;382:25::-;;;;;;;;;;;;;:::i;847:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;847:28:4;;:::i;6428:304::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6428:304:4;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3918:1400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3918:1400:4;;-1:-1:-1;;;;3918:1400:4;;;;-1:-1:-1;3918:1400:4;:::i;485:51::-;;;;;;;;;;;;;:::i;1206:726::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1206:726:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1206:726:4;;-1:-1:-1;1206:726:4;;-1:-1:-1;;;;;1206:726:4:i;9485:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9485:718:4;;;;;;-1:-1:-1;;;;;9485:718:4;;:::i;6028:394::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6028:394:4;-1:-1:-1;;;;;6028:394:4;;:::i;542:41::-;;;;;;;;;;;;;:::i;413:32::-;;;;;;;;;;;;;:::i;2200:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2200:155:4;-1:-1:-1;;;;;2200:155:4;;:::i;1068:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1068:47:4;-1:-1:-1;;;;;1068:47:4;;:::i;:::-;;;;;;;;;;;;;;;;;;1174:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1015:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1015:47:4;-1:-1:-1;;;;;1015:47:4;;:::i;3161:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:698;;;;;;;;;;;;;;;;-1:-1:-1;5324:698:4;-1:-1:-1;;;;;5324:698:4;;:::i;816:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;816:25:4;;:::i;2044:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2044:150:4;-1:-1:-1;;;;;2044:150:4;;:::i;984:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;984:25:4;;:::i;3261:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3261:119:4;-1:-1:-1;;;;;3261:119:4;;:::i;7125:838::-;;;:::i;2596:185::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2596:185:4;-1:-1:-1;;;;;2596:185:4;;:::i;693:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;693:53:4;;;;;;;;:::i;451:27::-;;;;;;;;;;;;;:::i;920:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;920:57:4;-1:-1:-1;;;;;920:57:4;;:::i;752:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;752:57:4;;;;;;;;:::i;881:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;881:32:4;;:::i;2787:259::-;;;;;;;;;;;;;:::i;3493:419::-;;;:::i;6738:272::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6738:272:4;;:::i;8787:692::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8787:692:4;-1:-1:-1;;;;;8787:692:4;;:::i;323:20::-;;;;;;;;;;;;;:::i;297:::-;;;;;;;;;;;;;:::i;1121:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1121:46:4;-1:-1:-1;;;;;1121:46:4;;:::i;589:41::-;;;-1:-1:-1;;;;;589:41:4;;:::o;2361:229::-;2436:12;;-1:-1:-1;;;;;2436:12:4;2422:10;:26;:54;;;;-1:-1:-1;2452:10:4;:24;;2422:54;2401:117;;;;;-1:-1:-1;;;2401:117:4;;;;;;;;;;;;-1:-1:-1;;;2401:117:4;;;;;;;;;;;;;;;2536:12;;;;2528:20;;-1:-1:-1;;;;;;2528:20:4;2536:12;-1:-1:-1;;;;;2536:12:4;;2528:20;;;;-1:-1:-1;;;;;;2558:25:4;;;2361:229::o;637:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7969:812::-;8054:10;8026:11;8040:25;;;:13;:25;;;;;:32;8090:8;8082:29;;;;;-1:-1:-1;;;8082:29:4;;;;;;;;;;;;-1:-1:-1;;;8082:29:4;;;;;;;;;;;;;;;8145:10;8129:27;;;;:15;:27;;;;;;;;8121:53;;;;;-1:-1:-1;;;8121:53:4;;;;;;;;;;;;-1:-1:-1;;;8121:53:4;;;;;;;;;;;;;;;8192:17;;:45;;;-1:-1:-1;;;8192:45:4;;8226:10;8192:45;;;;;;-1:-1:-1;;;;;8192:17:4;;;;:33;;:45;;;;;;;;;;;;;;;:17;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8192:45:4;8184:71;;;;;-1:-1:-1;;;8184:71:4;;;;;;;;;;;;-1:-1:-1;;;8184:71:4;;;;;;;;;;;;;;;8280:16;:14;:16::i;:::-;8273:3;:23;;8265:47;;;;;-1:-1:-1;;;8265:47:4;;;;;;;;;;;;-1:-1:-1;;;8265:47:4;;;;;;;;;;;;;;;8373:10;8322:25;8350:34;;;:22;:34;;;;;;:39;:138;;8477:10;8454:34;;;;:22;:34;;;;;;8350:138;;;8418:10;8404:25;;;;:13;:25;;;;;:28;;:35;;8437:1;;8404:25;:28;;;;;;;;;;;;:32;;:35;;;;:::i;:::-;8520:12;;:75;;;-1:-1:-1;;;8520:75:4;;8580:4;8520:75;;;;;;8322:166;;-1:-1:-1;8498:19:4;;-1:-1:-1;;;;;8520:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8520:75:4;;-1:-1:-1;8619:34:4;:17;8520:75;8619:21;:34::i;:::-;8613:3;:40;8605:68;;;;;-1:-1:-1;;;8605:68:4;;;;;;;;;;;;-1:-1:-1;;;8605:68:4;;;;;;;;;;;;;;;8719:55;8726:3;8731:10;8743:17;8762:11;8719:6;:55::i;:::-;7969:812;;;;:::o;349:27::-;;;-1:-1:-1;;;;;349:27:4;;:::o;382:25::-;;;-1:-1:-1;;;;;382:25:4;;:::o;847:28::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;847:28:4;:::o;6428:304::-;6546:7;;;;6634:14;;:45;;6670:9;6634:45;;;6651:16;:14;:16::i;:::-;6620:59;;6696:29;6714:5;6721:3;6696:17;:29::i;:::-;6689:36;;;;;;;6428:304;;;;;:::o;3918:1400::-;4060:5;;;;;-1:-1:-1;;;;;4060:5:4;4046:10;:19;;:65;;-1:-1:-1;4099:12:4;;-1:-1:-1;;;;;4099:12:4;4085:10;:26;4046:65;:109;;;-1:-1:-1;4145:10:4;;-1:-1:-1;;;;;4145:10:4;4131;:24;4046:109;4025:165;;;;;-1:-1:-1;;;4025:165:4;;;;;;;;;;;;-1:-1:-1;;;4025:165:4;;;;;;;;;;;;;;;4208:13;;4200:35;;;;;-1:-1:-1;;;4200:35:4;;;;;;;;;;;;;;;-1:-1:-1;;;4200:35:4;;;;;;;;;;;;;;;4245:18;4266:16;:14;:16::i;:::-;4245:37;;4297:9;4292:1020;4316:6;:13;4312:1;:17;4292:1020;;;4350:13;4366:6;4373:1;4366:9;;;;;;;;;;;;;;4350:25;;4393:9;4389:235;;;-1:-1:-1;;;;;4430:21:4;;;;;;:14;:21;;;;;;;;4422:45;;;;;-1:-1:-1;;;4422:45:4;;;;;;;;;;;;-1:-1:-1;;;4422:45:4;;;;;;;;;;;;;;;4514:17;;:40;;;-1:-1:-1;;;4514:40:4;;-1:-1:-1;;;;;4514:40:4;;;;;;;;;:17;;;;;:33;;:40;;;;;;;;;;;;;;:17;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4514:40:4;4485:124;;;;;-1:-1:-1;;;4485:124:4;;;;;;;;;;;;-1:-1:-1;;;4485:124:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;4646:22:4;;;;;;:15;:22;;;;;;;;4645:23;4637:42;;;;;-1:-1:-1;;;4637:42:4;;;;;;;;;;;;-1:-1:-1;;;4637:42:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;4718:20:4;;;;;;:13;:20;;;;;;;;4756:16;:23;;;;;4797:20;:27;;;;;4693:214;;4718:20;4756:23;4842:1;;4883:10;4693:7;:214::i;:::-;4921:178;4946:8;4972:11;5001:15;5034:1;5053:4;5075:10;4921:7;:178::i;:::-;5127:8;:15;;-1:-1:-1;;;;;5156:19:4;;;5113:11;5156:19;;;:12;:19;;;;;;;;:25;;;5195:20;;;;;;;;;;;;;-1:-1:-1;;;;;;5195:20:4;;;;;5229:22;;;:15;:22;;;;;:29;;-1:-1:-1;;5229:29:4;;;;;;;;5272:14;:21;;;;;;;:29;;;;;;;;4331:3;4292:1020;;485:51;;;-1:-1:-1;;;;;485:51:4;;:::o;1206:726::-;1498:8;;;;1497:9;1489:31;;;;;-1:-1:-1;;;1489:31:4;;;;;;;;;;;;-1:-1:-1;;;1489:31:4;;;;;;;;;;;;;;;1530:17;:94;;-1:-1:-1;;;;;;1530:94:4;;;-1:-1:-1;;;;;1530:94:4;;;;;;;;;;1634:12;:57;;;;;;;;;;1701:12;:57;;;;;;;;;;-1:-1:-1;1768:20:4;;-1:-1:-1;;;;;;1768:20:4;1530:94;1768:20;;;;;;;1798:10;:30;;;;;;;;;;-1:-1:-1;1838:34:4;;;;;;;;;;;;;;1882:18;;;;:11;;:18;;;;;:::i;:::-;-1:-1:-1;;1910:8:4;:15;;-1:-1:-1;;1910:15:4;1921:4;1910:15;;;-1:-1:-1;;;;;;1206:726:4:o;9485:718::-;-1:-1:-1;;;;;9622:20:4;;9585:7;9622:20;;;:13;:20;;;;;:27;9663:8;9659:47;;9694:1;9687:8;;;;;9659:47;9730:16;:14;:16::i;:::-;9723:3;:23;;9715:47;;;;;-1:-1:-1;;;9715:47:4;;;;;;;;;;;;-1:-1:-1;;;9715:47:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;9800:29:4;;9772:25;9800:29;;;:22;:29;;;;;;:34;:123;;-1:-1:-1;;;;;9894:29:4;;;;;;:22;:29;;;;;;9800:123;;;-1:-1:-1;;;;;9849:20:4;;;;;;:13;:20;;;;;:23;;:30;;9877:1;;9849:20;:23;;;:30;9955:12;;:75;;;-1:-1:-1;;;9955:75:4;;10015:4;9955:75;;;;;;9772:151;;-1:-1:-1;9933:19:4;;-1:-1:-1;;;;;9955:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9955:75:4;;-1:-1:-1;10052:34:4;:17;9955:75;10052:21;:34::i;:::-;10046:3;:40;10040:82;;10110:1;10103:8;;;;;;;10040:82;10138:58;10153:3;10158:5;10165:17;10184:11;10138:14;:58::i;:::-;10131:65;;;;;9485:718;;;;;:::o;6028:394::-;-1:-1:-1;;;;;6160:20:4;;6123:7;6160:20;;;:13;:20;;;;;:27;6201:8;;6197:201;;-1:-1:-1;;;;;6248:29:4;;;;;;:22;:29;;;;;;:34;:139;;-1:-1:-1;;;;;6358:29:4;;;;;;:22;:29;;;;;;6248:139;;;-1:-1:-1;;;;;6305:20:4;;;;;;:13;:20;;;;;:23;;:30;;6333:1;;6305:20;:23;;;:30;6225:162;;;;;6197:201;6414:1;6407:8;;;6028:394;;;;:::o;542:41::-;;;-1:-1:-1;;;;;542:41:4;;:::o;413:32::-;;;-1:-1:-1;;;;;413:32:4;;:::o;2200:155::-;2289:5;;;;;-1:-1:-1;;;;;2289:5:4;2275:10;:19;2267:41;;;;;-1:-1:-1;;;2267:41:4;;;;;;;;;;;;-1:-1:-1;;;2267:41:4;;;;;;;;;;;;;;;2318:12;:30;;-1:-1:-1;;;;;;2318:30:4;-1:-1:-1;;;;;2318:30:4;;;;;;;;;;2200:155::o;1068:47::-;;;;;;;;;;;;;;;:::o;1174:25::-;;;;;;;;;;;;;;;-1:-1:-1;;1174:25:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1015:47::-;;;;;;;;;;;;;:::o;3161:94::-;3205:16;3240:8;3233:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3233:15:4;;;;;;;;;;;;;;;;;;;;;;;3161:94;:::o;5324:698::-;5421:5;;;;;-1:-1:-1;;;;;5421:5:4;5407:10;:19;;:65;;-1:-1:-1;5460:12:4;;-1:-1:-1;;;;;5460:12:4;5446:10;:26;5407:65;:109;;;-1:-1:-1;5506:10:4;;-1:-1:-1;;;;;5506:10:4;5492;:24;5407:109;5386:165;;;;;-1:-1:-1;;;5386:165:4;;;;;;;;;;;;-1:-1:-1;;;5386:165:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;5569:22:4;;;;;;:15;:22;;;;;;;;5561:48;;;;;-1:-1:-1;;;5561:48:4;;;;;;;;;;;;-1:-1:-1;;;5561:48:4;;;;;;;;;;;;;;;5619:18;5640:16;:14;:16::i;:::-;-1:-1:-1;;;;;5687:20:4;;;;;;:13;:20;;;;;;;;5721:16;:23;;;;;5758:20;:27;;;;;;5619:37;;-1:-1:-1;5666:187:4;;5687:20;;5799:1;;5619:37;5666:7;:187::i;:::-;5863:69;5871:8;5881:11;5894:15;5911:1;5914:5;5921:10;5863:7;:69::i;:::-;-1:-1:-1;;;;;5955:19:4;;;;;;:12;:19;;;;;;5942:33;;:12;:33::i;:::-;-1:-1:-1;;;;;;5985:22:4;6010:5;5985:22;;;:15;:22;;;;;:30;;-1:-1:-1;;5985:30:4;;;5324:698::o;816:25::-;;;;;;;;;;2044:150;2136:10;;-1:-1:-1;;;;;2136:10:4;2122;:24;2114:33;;;;;;2157:12;:30;;-1:-1:-1;;;;;;2157:30:4;-1:-1:-1;;;;;2157:30:4;;;;;;;;;;2044:150::o;984:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;984:25:4;;-1:-1:-1;984:25:4;:::o;3261:119::-;-1:-1:-1;;;;;3349:24:4;3326:4;3349:24;;;:15;:24;;;;;;;;;3261:119::o;7125:838::-;7198:10;7170:11;7184:25;;;:13;:25;;;;;:32;7234:8;7226:29;;;;;-1:-1:-1;;;7226:29:4;;;;;;;;;;;;-1:-1:-1;;;7226:29:4;;;;;;;;;;;;;;;7289:10;7273:27;;;;:15;:27;;;;;;;;7265:53;;;;;-1:-1:-1;;;7265:53:4;;;;;;;;;;;;-1:-1:-1;;;7265:53:4;;;;;;;;;;;;;;;7336:17;;:45;;;-1:-1:-1;;;7336:45:4;;7370:10;7336:45;;;;;;-1:-1:-1;;;;;7336:17:4;;;;:33;;:45;;;;;;;;;;;;;;;:17;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7336:45:4;7328:71;;;;;-1:-1:-1;;;7328:71:4;;;;;;;;;;;;-1:-1:-1;;;7328:71:4;;;;;;;;;;;;;;;7409:18;7430:16;:14;:16::i;:::-;7507:10;7456:25;7484:34;;;:22;:34;;;;;;7409:37;;-1:-1:-1;7456:25:4;7484:39;:138;;7611:10;7588:34;;;;:22;:34;;;;;;7484:138;;;7552:10;7538:25;;;;:13;:25;;;;;:28;;:35;;7571:1;;7538:25;:28;;;:35;7654:12;;:75;;;-1:-1:-1;;;7654:75:4;;7714:4;7654:75;;;;;;7456:166;;-1:-1:-1;7632:19:4;;-1:-1:-1;;;;;7654:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7654:75:4;;-1:-1:-1;7773:34:4;:17;7654:75;7773:21;:34::i;:::-;7760:10;:47;7739:109;;;;;-1:-1:-1;;;7739:109:4;;;;;;;;;;;;-1:-1:-1;;;7739:109:4;;;;;;;;;;;;;;;7894:62;7901:10;7913;7925:17;7944:11;7894:6;:62::i;2596:185::-;2695:10;;-1:-1:-1;;;;;2695:10:4;2681;:24;2673:51;;;;;-1:-1:-1;;;2673:51:4;;;;;;;;;;;;-1:-1:-1;;;2673:51:4;;;;;;;;;;;;;;;2734:17;:40;;-1:-1:-1;;;;;;2734:40:4;-1:-1:-1;;;;;2734:40:4;;;;;;;;;;2596:185::o;693:53::-;;;;;;;;;;;;;;;;;;451:27;;;-1:-1:-1;;;;;451:27:4;;:::o;920:57::-;;;;;;;;;;;;;:::o;752:::-;;;;;;;;;;;;;;;;;;881:32;;;;;;;;;;2787:259;2867:17;;-1:-1:-1;;;;;2867:17:4;2853:10;:31;:59;;;;-1:-1:-1;2888:10:4;:24;;2853:59;2832:127;;;;;-1:-1:-1;;;2832:127:4;;;;;;;;;;;;-1:-1:-1;;;2832:127:4;;;;;;;;;;;;;;;2982:17;;;2969:10;:30;;-1:-1:-1;;;;;;2969:30:4;;;-1:-1:-1;;;;;2982:17:4;;2969:30;;;;3009;;;2787:259::o;3493:419::-;3567:10;3552:26;;;;:14;:26;;;;;;;;3551:27;3543:47;;;;;-1:-1:-1;;;3543:47:4;;;;;;;;;;;;-1:-1:-1;;;3543:47:4;;;;;;;;;;;;;;;3625:10;3609:27;;;;:15;:27;;;;;;;;3608:28;3600:49;;;;;-1:-1:-1;;;3600:49:4;;;;;;;;;;;;-1:-1:-1;;;3600:49:4;;;;;;;;;;;;;;;3678:12;;:79;;;-1:-1:-1;;;3678:79:4;;3742:4;3678:79;;;;;;3659:16;;-1:-1:-1;;;;;3678:12:4;;:42;;:79;;;;;;;;;;;;;;3659:16;3678:12;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3678:79:4;;-1:-1:-1;3775:9:4;:21;;3767:45;;;;;-1:-1:-1;;;3767:45:4;;;;;;;;;;;;-1:-1:-1;;;3767:45:4;;;;;;;;;;;;;;;3822:12;;;;;;;;;-1:-1:-1;;;;;3822:12:4;-1:-1:-1;;;;;3822:20:4;;3850:9;3822:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3887:10:4;3872:26;;;;:14;:26;;;;;:33;;-1:-1:-1;;3872:33:4;3901:4;3872:33;;;-1:-1:-1;;;;3493:419:4:o;6738:272::-;6836:7;;;;6924:14;;:45;;6960:9;6924:45;;;6941:16;:14;:16::i;:::-;6910:59;;6986:17;6999:3;6986:12;:17::i;:::-;6979:24;;;;;;;6738:272;;;;;:::o;8787:692::-;-1:-1:-1;;;;;8882:20:4;;8849:7;8882:20;;;:13;:20;;;;;:27;8923:8;8919:47;;8954:1;8947:8;;;;;8919:47;8975:18;8996:16;:14;:16::i;:::-;-1:-1:-1;;;;;9050:29:4;;9022:25;9050:29;;;:22;:29;;;;;;8975:37;;-1:-1:-1;9022:25:4;9050:34;:123;;-1:-1:-1;;;;;9144:29:4;;;;;;:22;:29;;;;;;9050:123;;;-1:-1:-1;;;;;9099:20:4;;;;;;:13;:20;;;;;:23;;:30;;9127:1;;9099:20;:23;;;:30;9205:12;;:75;;;-1:-1:-1;;;9205:75:4;;9265:4;9205:75;;;;;;9022:151;;-1:-1:-1;9183:19:4;;-1:-1:-1;;;;;9205:12:4;;;;:38;;:75;;;;;;;;;;;;;;;:12;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9205:75:4;;-1:-1:-1;9309:34:4;:17;9205:75;9309:21;:34::i;:::-;9296:10;:47;9290:89;;9367:1;9360:8;;;;;;;;9290:89;9407:65;9422:10;9434:5;9441:17;9460:11;9407:14;:65::i;:::-;9388:84;8787:692;-1:-1:-1;;;;;;8787:692:4:o;323:20::-;;;;;;-1:-1:-1;;;;;323:20:4;;:::o;297:::-;;;;;;:::o;1121:46::-;;;;;;;;;;;;;;;:::o;17630:116::-;17679:7;17705:34;17737:1;17705:27;:15;17725:6;17705:19;:27::i;:::-;:31;;:34::i;:::-;17698:41;;17630:116;:::o;1321:134:1:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;1321:134;-1:-1:-1;;;1321:134:1:o;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;15983:743:4;16136:15;16154:120;16182:7;16203:5;16222:17;16253:11;16154:14;:120::i;:::-;16136:138;;16302:1;16292:7;:11;16284:34;;;;;-1:-1:-1;;;16284:34:4;;;;;;;;;;;;-1:-1:-1;;;16284:34:4;;;;;;;;;;;;;;;16371:12;;:66;;;-1:-1:-1;;;16371:66:4;;16431:4;16371:66;;;;;;16329:17;;;;-1:-1:-1;;;;;16371:12:4;;;;:51;;:66;;;;;;;;;;;16329:17;16371:12;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16371:66:4;;;;;;;;;-1:-1:-1;16371:66:4;-1:-1:-1;16447:11:4;16461:39;16371:66;16461:22;:7;16371:66;16461:11;:22::i;:::-;:26;;:39::i;:::-;16447:53;;16531:3;16518:9;:16;16510:40;;;;;-1:-1:-1;;;16510:40:4;;;;;;;;;;;;-1:-1:-1;;;16510:40:4;;;;;;;;;;;;;;;16560:12;;;;;;;;;-1:-1:-1;;;;;16560:12:4;-1:-1:-1;;;;;16560:20:4;;16588:9;16560:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16642:24;16654:11;16642:7;:11;;:24;;;;:::i;:::-;-1:-1:-1;;;;;16610:29:4;;;;;;;:22;:29;;;;;;:56;;;;16676:12;;:43;;-1:-1:-1;;;16676:43:4;;;;;;;;;;;;;;;;;:12;;;;;:27;;:43;;;;;16610:29;;16676:43;;;;;;16610:29;16676:12;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15983:743;;;;;;;;:::o;10317:428::-;-1:-1:-1;;;;;10531:20:4;;10432:7;10531:20;;;:13;:20;;;;;;;;10506:45;;;;;;;;;;;;;;;;;10432:7;;;;10506:22;;:45;;10531:20;;10506:45;;10531:20;10506:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;10589:23:4;;;;;;:16;:23;;;;;;;;;10561:51;;;;;;;;;;;;;;;;;10506:45;;-1:-1:-1;10561:25:4;;:51;;-1:-1:-1;10589:23:4;-1:-1:-1;10561:51:4;;10589:23;10561:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;10654:27:4;;;;;;:20;:27;;;;;;;;;10622:59;;;;;;;;;;;;;;;;;10561:51;;-1:-1:-1;10622:29:4;;:59;;-1:-1:-1;10654:27:4;-1:-1:-1;10622:59:4;;10654:27;10622:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10698:40;10703:5;10710:8;10720:12;10734:3;10698:4;:40::i;:::-;10691:47;;;;;;;;;10317:428;;;;;:::o;13456:2521::-;13694:12;;13740:6;13789:15;:31;;;13680:11;13861:63;13740:6;13789:31;13861:17;:63::i;:::-;13830:94;-1:-1:-1;13939:8:4;13935:2036;;13967:6;13963:250;;;13993:22;;;;;;;;-1:-1:-1;13993:22:4;;;;;;;;;;;;;14033:21;;;;;;;;;;;;;;;;;;14072:12;14090:32;14047:6;14101:20;14090:10;:32::i;:::-;14072:51;;;;;;;-1:-1:-1;14072:51:4;;;;;;;;;;;13963:250;;;14162:36;;;-1:-1:-1;;;14162:36:4;;;;;;;;;;;;-1:-1:-1;;;14162:36:4;;;;;;;;;;;;;;;13935:2036;;;14243:17;14263:10;:3;14271:1;14263:7;:10::i;:::-;14243:30;;14287:20;14310:5;14316:9;14310:16;;;;;;;;;;;;;;;;14287:39;;14340:23;14366:8;14375:9;14366:19;;;;;;;;;;;;;;;;14340:45;;14399:23;14425:12;14438:9;14425:23;;;;;;;;;;;;;;;;14399:49;;14463:17;14494:22;14551:10;14535:12;:26;14531:1430;;;14585:6;14581:532;;;14627:27;:15;14647:6;14627:19;:27::i;:::-;14615:39;-1:-1:-1;14693:99:4;14738:32;:6;14749:20;14738:10;:32::i;:::-;14693:15;;:19;:99::i;:::-;14676:116;;14581:532;;;14866:6;14847:15;:25;;14839:56;;;;;-1:-1:-1;;;14839:56:4;;;;;;;;;;;;-1:-1:-1;;;14839:56:4;;;;;;;;;;;;;;;14929:27;:15;14949:6;14929:19;:27::i;:::-;14917:39;-1:-1:-1;14995:99:4;15040:32;:6;15051:20;15040:10;:32::i;:::-;14995:15;;:19;:99::i;:::-;14978:116;;14581:532;15152:9;15130:8;15139:9;15130:19;;;;;;;;;;;;;;;:31;;;;15205:14;15179:12;15192:9;15179:23;;;;;;;;;;;;;;;;;:40;14531:1430;;;15262:6;15258:556;;;15304:27;:15;15324:6;15304:19;:27::i;:::-;15292:39;-1:-1:-1;15370:111:4;15427:32;:6;15438:20;15427:10;:32::i;:::-;15370:27;:15;15390:6;15370:19;:27::i;:111::-;15353:128;;15258:556;;;15555:6;15536:15;:25;;15528:56;;;;;-1:-1:-1;;;15528:56:4;;;;;;;;;;;;-1:-1:-1;;;15528:56:4;;;;;;;;;;;;;;;15618:27;:15;15638:6;15618:19;:27::i;:::-;15606:39;-1:-1:-1;15684:111:4;15741:32;:6;15752:20;15741:10;:32::i;:::-;15684:27;:15;15704:6;15684:19;:27::i;:::-;:31;;:111::i;:::-;15667:128;;15258:556;15831:5;15842:10;15831:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15871:8;15885:9;15871:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15913:12;15931:14;15913:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14531:1430;13935:2036;;;;;;;13456:2521;;;;;;;;;;:::o;16732:892::-;16897:7;;;16973:24;:17;16995:1;16973:21;:24::i;:::-;16959:38;;16941:653;17018:24;:7;17030:11;17018;:24::i;:::-;17011:3;:31;16941:653;;17113:12;;:100;;;-1:-1:-1;;;17113:100:4;;17173:4;17113:100;;;;;;;;;;;;17086:24;;-1:-1:-1;;;;;17113:12:4;;:34;;:100;;;;;;;;;;;;;;:12;:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17113:100:4;;-1:-1:-1;17230:24:4;17260:29;17278:5;17285:3;17260:17;:29::i;:::-;17227:62;;;;17306:19;17331:17;17344:3;17331:12;:17::i;:::-;-1:-1:-1;17303:45:4;-1:-1:-1;;17366:16:4;17362:63;;17402:8;;;;;17362:63;17438:14;17455:85;17515:11;17455:38;:16;17476;17455:20;:38::i;:85::-;17438:102;-1:-1:-1;17564:19:4;:7;17438:102;17564:11;:19::i;:::-;17554:29;;16941:653;;;;;17056:5;;16941:653;;;-1:-1:-1;17610:7:4;16732:892;-1:-1:-1;;;;;16732:892:4:o;17752:506::-;17828:8;:15;17808:17;;17828:22;;17848:1;17828:19;:22::i;:::-;17808:42;;17860:19;17882:8;17891:9;17882:19;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17882:19:4;;-1:-1:-1;17915:18:4;;;17911:341;;;-1:-1:-1;;;;;17949:25:4;;17977:1;17949:25;;;:12;:25;;;;;:29;17992:8;:14;;;;;;;;;;;;;;;;-1:-1:-1;;17992:14:4;;;;;-1:-1:-1;;;;;;17992:14:4;;;;;;17911:341;;;18037:22;18062:8;18071:5;18062:15;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18062:15:4;;;18091:28;;;:12;:28;;;;;;;:32;;;18137:25;;;;;;;;:33;;;18184:8;:15;;18062;;-1:-1:-1;18150:11:4;;18165:5;;18184:15;;;;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;;18184:29:4;;;;;-1:-1:-1;;;;;18184:29:4;;;;;;18227:8;:14;;;;;;;;;;;;;;;;-1:-1:-1;;18227:14:4;;;;;-1:-1:-1;;;;;;18227:14:4;;;;;;-1:-1:-1;17911:341:4;17752:506;;;:::o;10751:232::-;10846:7;10867;10888;10927:49;10932:8;10927:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10942:11;10927:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10955:15;10927:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10972:3;10927:4;:49::i;:::-;10920:56;;;;;;10751:232;;;;;:::o;3101:130:1:-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:1;;;1746:187::o;2180:459::-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:1;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10989:837:4;11284:12;;11196:7;;;;;;11310:8;11306:57;;11342:3;11347:1;11350;11334:18;;;;;;;;;11306:57;11382:5;11388:1;11382:8;;;;;;;;;;;;;;11376:3;:14;11372:63;;;11414:3;11419:1;11422;11406:18;;;;;;;;;11372:63;11444:17;11464:10;:3;11472:1;11464:7;:10::i;:::-;11444:30;;11484:20;11507:5;11513:9;11507:16;;;;;;;;;;;;;;11484:39;;11544:12;11537:3;:19;11533:229;;;11580:3;11585:8;11594:9;11585:19;;;;;;;;;;;;;;11606:12;11619:9;11606:23;;;;;;;;;;;;;;11572:58;;;;;;;;;;;11533:229;11657:12;11651:3;:18;11647:115;;;11693:3;11698:8;11707:9;11698:19;;;;;;;;;;;;;;11719:31;11743:6;11719:8;11728:9;11719:19;;;;;;;;;;;;;;:23;;:31;;;;:::i;:::-;11685:66;;;;;;;;;;;11647:115;11778:41;11784:5;11791:8;11801:12;11815:3;11778:5;:41::i;:::-;11771:48;;;;;;;;;10989:837;;;;;;;;;:::o;3713:272:1:-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:1:o;11832:1618:4:-;12040:7;12061;12082;12114:12;12129:1;12114:16;;12140:13;12156:19;12173:1;12156:5;:12;:16;;:19;;;;:::i;:::-;12140:35;-1:-1:-1;12185:14:4;12202:22;12222:1;12202:15;12140:35;12212:4;12202:9;:15::i;:22::-;12185:39;;12234:1049;12248:5;12241:4;:12;12234:1049;;;12290:3;12273:5;12279:6;12273:13;;;;;;;;;;;;;;:20;12269:959;;;12321:3;12326:8;12335:6;12326:16;;;;;;;;;;;;;;12344:12;12357:6;12344:20;;;;;;;12269:959;12406:3;12390:5;12396:6;12390:13;;;;;;;;;;;;;;:19;12386:842;;;12442:1;12433:6;:10;:40;;;;-1:-1:-1;12470:3:4;12447:5;12453:13;:6;12464:1;12453:10;:13::i;:::-;12447:20;;;;;;;;;;;;;;:26;12433:40;12429:255;;;12530:3;12559:8;12568:13;:6;12579:1;12568:10;:13::i;:::-;12559:23;;;;;;;;;;;;;;12608:35;12636:6;12608:8;12617:13;12628:1;12617:6;:10;;:13;;;;:::i;:::-;12608:23;;;;;;;12429:255;12705:11;12701:76;;12748:3;12753:1;12756;12740:18;;;;;;;;;;;12701:76;12802:13;:6;12813:1;12802:10;:13::i;:::-;12794:21;;12386:842;;;12856:3;12840:5;12846:6;12840:13;;;;;;;;;;;;;;:19;12836:392;;;12913:12;;:19;;12930:1;12913:16;:19::i;:::-;12904:6;:28;:58;;;;-1:-1:-1;12959:3:4;12936:5;12942:13;:6;12953:1;12942:10;:13::i;:::-;12936:20;;;;;;;;;;;;;;:26;12904:58;12879:297;;;13036:3;13065:8;13074:6;13065:16;;;;;;;;;;;;;;13107:28;13128:6;13107:8;13116:6;13107:16;;;;;;;12879:297;13200:13;:6;13211:1;13200:10;:13::i;:::-;13193:20;;12836:392;13250:22;13270:1;13250:15;:5;13260:4;13250:9;:15::i;:22::-;13241:31;;12234:1049;;;13313:3;13296:5;13302:6;13296:13;;;;;;;;;;;;;;:20;13292:152;;13340:3;13345:1;13348;13332:18;;;;;;;;;;;13292:152;13389:3;13394:8;13403:6;13394:16;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://7534f7c5be2f9325ad84bc7d6456ca4c5c4decb68ba2b9ff2cd47c2df79baed7
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.