Source Code
Latest 25 from a total of 147 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw ELS | 11095354 | 1953 days ago | IN | 0 ETH | 0.00301757 | ||||
| Buy New Level | 11094175 | 1953 days ago | IN | 3.2 ETH | 0.01602966 | ||||
| Buy New Level | 11094170 | 1953 days ago | IN | 1.6 ETH | 0.03075622 | ||||
| Buy New Level | 11094165 | 1953 days ago | IN | 0.8 ETH | 0.02535596 | ||||
| Buy New Level | 11094150 | 1953 days ago | IN | 0.4 ETH | 0.01439962 | ||||
| Buy New Level | 11094122 | 1953 days ago | IN | 0.2 ETH | 0.02632601 | ||||
| Registration Ext | 11094107 | 1953 days ago | IN | 0.1 ETH | 0.03518518 | ||||
| Registration Ext | 11092548 | 1954 days ago | IN | 0.1 ETH | 0.00659353 | ||||
| Buy New Level | 11092261 | 1954 days ago | IN | 0.4 ETH | 0.0067184 | ||||
| Buy New Level | 11092253 | 1954 days ago | IN | 0.2 ETH | 0.0075259 | ||||
| Registration Ext | 11092236 | 1954 days ago | IN | 0.1 ETH | 0.01108139 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.001603 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.001603 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.001603 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.001603 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.001603 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.001603 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.001603 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.0016488 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.0016488 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.0014656 | ||||
| Update | 11092197 | 1954 days ago | IN | 0 ETH | 0.0014656 | ||||
| Update | 11092177 | 1954 days ago | IN | 0 ETH | 0.00137364 | ||||
| Update | 11092177 | 1954 days ago | IN | 0 ETH | 0.00137364 | ||||
| Update | 11092176 | 1954 days ago | IN | 0 ETH | 0.00137364 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 11094175 | 1953 days ago | 0.96 ETH | ||||
| - | 11094175 | 1953 days ago | 0.64 ETH | ||||
| - | 11094175 | 1953 days ago | 1.6 ETH | ||||
| - | 11094170 | 1953 days ago | 0.48 ETH | ||||
| - | 11094170 | 1953 days ago | 0.32 ETH | ||||
| - | 11094170 | 1953 days ago | 0.8 ETH | ||||
| - | 11094165 | 1953 days ago | 0.24 ETH | ||||
| - | 11094165 | 1953 days ago | 0.16 ETH | ||||
| - | 11094165 | 1953 days ago | 0.4 ETH | ||||
| - | 11094150 | 1953 days ago | 0.12 ETH | ||||
| - | 11094150 | 1953 days ago | 0.08 ETH | ||||
| - | 11094150 | 1953 days ago | 0.2 ETH | ||||
| - | 11094122 | 1953 days ago | 0.1 ETH | ||||
| - | 11094122 | 1953 days ago | 0.06 ETH | ||||
| - | 11094122 | 1953 days ago | 0.04 ETH | ||||
| - | 11094107 | 1953 days ago | 0.03 ETH | ||||
| - | 11094107 | 1953 days ago | 0.02 ETH | ||||
| - | 11094107 | 1953 days ago | 0.05 ETH | ||||
| - | 11092548 | 1954 days ago | 0.03 ETH | ||||
| - | 11092548 | 1954 days ago | 0.02 ETH | ||||
| - | 11092548 | 1954 days ago | 0.05 ETH | ||||
| - | 11092261 | 1954 days ago | 0.12 ETH | ||||
| - | 11092261 | 1954 days ago | 0.08 ETH | ||||
| - | 11092261 | 1954 days ago | 0.2 ETH | ||||
| - | 11092253 | 1954 days ago | 0.1 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ETPlanV2
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-18
*/
pragma solidity >=0.4.23 <0.6.0;
/**
* eplans.vip
**/
contract ETPlanV2 {
struct User {
uint id;
address referrer;
uint partnersCount;
mapping(uint8 => bool) activeQ8Levels;
mapping(uint8 => bool) blocked;
mapping(uint8 => uint) income;
}
struct Q8 {
address currentReferrer;
address[] firstLevelReferrals;
address[] secondLevelReferrals;
uint reinvestCount;
}
uint8 public constant LAST_LEVEL = 12;
uint public lastUserId = 2;
address public owner;
address public pool;
address public manager;
address public eTPlanToken;
mapping(uint8 => uint) public levelPrice;
mapping(uint8 => Q8) public q8Matrix;
mapping(address => User) public users;
mapping(uint => address) public idToAddress;
event NewUserPlace(address indexed user, address indexed referrer, uint8 level, uint8 place);
event Registration(address indexed user, address indexed referrer, uint indexed userId, uint referrerId);
event MissedEthReceive(address indexed receiver, address indexed from, uint8 level);
event SentExtraEthDividends(address indexed from, address indexed receiver, uint8 level);
event NewRound(address indexed user, address indexed referrer, uint8 level);
address public super;
address public _this;
modifier OnlySuper {
require(msg.sender == super);
_;
}
constructor() public {
levelPrice[1] = 0.1 ether;
for (uint8 i = 2; i <= LAST_LEVEL; i++) {
levelPrice[i] = levelPrice[i - 1] * 2;
}
_this = address(this);
super = msg.sender;
}
function initQ8(address _etplan) OnlySuper external {
ETPlan etplan = ETPlan(address(uint160(_etplan)));
for (uint8 j = 1; j <= 12; j++) {
(address currentReferrer, address[] memory firstLevelReferrals
, address[] memory secondLevelReferrals,
uint reinvestCount) = etplan.getq8Matrix(j);
q8Matrix[j].currentReferrer = currentReferrer;
q8Matrix[j].firstLevelReferrals = firstLevelReferrals;
q8Matrix[j].secondLevelReferrals = secondLevelReferrals;
q8Matrix[j].reinvestCount = reinvestCount;
}
}
function initData(address _etplan, uint start, uint end) OnlySuper external {
ETPlan etplan = ETPlan(address(uint160(_etplan)));
owner = etplan.owner();
manager = etplan.manager();
pool = etplan.pool();
eTPlanToken = etplan.eTPlanToken();
lastUserId = end + 1;
for (uint i = start; i <= end; i++) {
address currentUser = etplan.idToAddress(i);
(uint id,address referrer,uint partnersCount) = etplan.users(currentUser);
User memory user = User({
id : id,
referrer : referrer,
partnersCount : partnersCount
});
users[currentUser] = user;
for (uint8 j = 1; j <= 12; j++) {
if (i == 3) {
users[currentUser].blocked[j] = true;
users[currentUser].activeQ8Levels[j] = false;
} else {
bool active = etplan.activeQ8Levels(currentUser, j);
users[currentUser].activeQ8Levels[j] = active;
users[currentUser].income[j] = etplan.income(currentUser, j);
}
}
idToAddress[i] = currentUser;
}
}
function() external payable {
if (msg.data.length == 0) {
return registration(msg.sender, owner);
}
registration(msg.sender, bytesToAddress(msg.data));
}
function registrationExt(address referrerAddress) external payable {
registration(msg.sender, referrerAddress);
}
function registration(address userAddress, address referrerAddress) private {
require(msg.value == 0.1 ether, "registration cost 0.1");
require(!isUserExists(userAddress), "user exists");
require(isUserExists(referrerAddress), "referrer not exists");
uint32 size;
assembly {
size := extcodesize(userAddress)
}
require(size == 0, "cannot be a contract");
User memory user = User({
id : lastUserId,
referrer : referrerAddress,
partnersCount : 0
});
users[userAddress] = user;
idToAddress[lastUserId] = userAddress;
users[userAddress].activeQ8Levels[1] = true;
lastUserId++;
users[referrerAddress].partnersCount++;
emit Registration(userAddress, referrerAddress, users[userAddress].id, users[referrerAddress].id);
updateQ8Referrer(userAddress, referrerAddress, uint8(1));
if (ETPlanToken(eTPlanToken).balanceOf(_this) >= (levelPrice[uint8(1)] * 3 / 2)) {
ETPlanToken(eTPlanToken).transfer(userAddress, levelPrice[uint8(1)]);
ETPlanToken(eTPlanToken).transfer(referrerAddress, levelPrice[uint8(1)] / 2);
}
}
function buyNewLevel(uint8 level) external payable {
require(isUserExists(msg.sender), "user is not exists. Register first.");
require(msg.value == levelPrice[level], "invalid price");
require(level > 1 && level <= LAST_LEVEL, "invalid level");
require(!users[msg.sender].activeQ8Levels[level], "level already activated");
if (users[msg.sender].blocked[level - 1]) {
users[msg.sender].blocked[level - 1] = false;
}
users[msg.sender].activeQ8Levels[level] = true;
address freeReferrer = findFreeQ8Referrer(msg.sender, level);
updateQ8Referrer(msg.sender, freeReferrer, level);
emit NewRound(msg.sender, freeReferrer, level);
if (ETPlanToken(eTPlanToken).balanceOf(_this) >= (levelPrice[level] * 3 / 2)) {
ETPlanToken(eTPlanToken).transfer(msg.sender, levelPrice[level]);
ETPlanToken(eTPlanToken).transfer(freeReferrer, levelPrice[level] / 2);
}
}
function updateQ8Referrer(address userAddress, address referrerAddress, uint8 level) private {
require(users[referrerAddress].activeQ8Levels[level], "500. Referrer level is inactive");
if ((users[referrerAddress].income[level] % (levelPrice[level] / 2)) >= 6) {
if (!users[referrerAddress].activeQ8Levels[level + 1] && level != LAST_LEVEL) {
users[referrerAddress].blocked[level] = true;
}
}
if (q8Matrix[level].firstLevelReferrals.length < 2) {
q8Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, referrerAddress, level, uint8(q8Matrix[level].firstLevelReferrals.length));
q8Matrix[level].currentReferrer = referrerAddress;
if (referrerAddress == owner) {
users[owner].income[level] += levelPrice[level];
return sendETHDividends(referrerAddress, userAddress, level, levelPrice[level]);
}
uint poolAmount = levelPrice[level] * 20 / 100;
if (!address(uint160(pool)).send(poolAmount)) {
return address(uint160(pool)).transfer(address(this).balance);
}
uint managerAmount = levelPrice[level] * 30 / 100;
if (!address(uint160(manager)).send(managerAmount)) {
return address(uint160(manager)).transfer(address(this).balance);
}
address freeReferrer = findFreeQ8Referrer(userAddress, level);
users[freeReferrer].income[level] += levelPrice[level] / 2;
return sendETHDividends(freeReferrer, userAddress, level, levelPrice[level] / 2);
}
q8Matrix[level].secondLevelReferrals.push(userAddress);
q8Matrix[level].currentReferrer = referrerAddress;
emit NewUserPlace(userAddress, referrerAddress, level, uint8(q8Matrix[level].secondLevelReferrals.length + 2));
if (q8Matrix[level].secondLevelReferrals.length == 1) {
address freeReferrer = findFreeQ8Referrer(userAddress, level);
users[freeReferrer].income[level] += levelPrice[level] / 2;
sendETHDividends(freeReferrer, userAddress, level, levelPrice[level] / 2);
uint poolAmount = levelPrice[level] * 20 / 100;
if (!address(uint160(pool)).send(poolAmount)) {
return address(uint160(pool)).transfer(address(this).balance);
}
address freeReferrerRe = findFreeQ8Referrer(freeReferrer, level);
users[freeReferrerRe].income[level] += levelPrice[level] * 30 / 100;
return sendETHDividends(freeReferrerRe, userAddress, level, levelPrice[level] * 30 / 100);
}
if (q8Matrix[level].secondLevelReferrals.length == 4) {//reinvest
q8Matrix[level].reinvestCount++;
q8Matrix[level].firstLevelReferrals = new address[](0);
q8Matrix[level].secondLevelReferrals = new address[](0);
}
address freeReferrer = findFreeQ8Referrer(userAddress, level);
users[freeReferrer].income[level] += levelPrice[level] / 2;
sendETHDividends(freeReferrer, userAddress, level, levelPrice[level] / 2);
uint poolAmount = levelPrice[level] * 20 / 100;
if (!address(uint160(pool)).send(poolAmount)) {
return address(uint160(pool)).transfer(address(this).balance);
}
uint managerAmount = levelPrice[level] * 30 / 100;
if (!address(uint160(manager)).send(managerAmount)) {
return address(uint160(manager)).transfer(address(this).balance);
}
}
function findFreeQ8Referrer(address userAddress, uint8 level) public view returns (address) {
while (true) {
if (users[users[userAddress].referrer].activeQ8Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
function findEthReceiver(address userAddress, address _from, uint8 level) private returns (address, bool) {
address receiver = userAddress;
bool isExtraDividends;
while (true) {
if (users[receiver].blocked[level]) {
emit MissedEthReceive(receiver, _from, level);
isExtraDividends = true;
receiver = users[receiver].referrer;
} else {
return (receiver, isExtraDividends);
}
}
}
function sendETHDividends(address userAddress, address _from, uint8 level, uint amount) private {
(address receiver, bool isExtraDividends) = findEthReceiver(userAddress, _from, level);
if (!address(uint160(receiver)).send(amount)) {
return address(uint160(receiver)).transfer(address(this).balance);
}
if (isExtraDividends) {
emit SentExtraEthDividends(_from, receiver, level);
}
}
function isUserExists(address user) public view returns (bool) {
return (users[user].id != 0);
}
function bytesToAddress(bytes memory bys) private pure returns (address addr) {
assembly {
addr := mload(add(bys, 20))
}
}
function activeQ8Levels(address _user, uint8 level) public view returns (bool){
return users[_user].activeQ8Levels[level];
}
function blocked(address _user, uint8 level) public view returns (bool){
return users[_user].blocked[level];
}
function income(address _user, uint8 level) public view returns (uint){
return users[_user].income[level];
}
function getq8Matrix(uint8 level) public view returns (address, address[] memory, address[] memory, uint){
return (q8Matrix[level].currentReferrer,
q8Matrix[level].firstLevelReferrals,
q8Matrix[level].secondLevelReferrals,
q8Matrix[level].reinvestCount);
}
function updatePool(address _pool) public OnlySuper {
pool = _pool;
}
function updateManager(address _manager) public OnlySuper {
manager = _manager;
}
function updateSuper(address _super) public OnlySuper {
super = _super;
}
function update(address _user, uint8 _level) public OnlySuper {
require(isUserExists(_user), "user not exists");
users[_user].activeQ8Levels[_level] = !users[_user].activeQ8Levels[_level];
}
function withdrawELS(address _user, uint _value) public OnlySuper {
ETPlanToken(eTPlanToken).transfer(_user, _value);
}
}
contract ETPlan {
struct User {
uint id;
address referrer;
uint partnersCount;
mapping(uint8 => bool) activeQ8Levels;
mapping(uint8 => bool) blocked;
mapping(uint8 => uint) income;
}
struct Q8 {
address currentReferrer;
address[] firstLevelReferrals;
address[] secondLevelReferrals;
uint reinvestCount;
}
uint8 public constant LAST_LEVEL = 12;
uint public lastUserId = 2;
address public owner;
address public pool;
address public manager;
address public eTPlanToken;
mapping(uint8 => uint) public levelPrice;
mapping(uint8 => Q8) public q8Matrix;
mapping(address => User) public users;
mapping(uint => address) public idToAddress;
event NewUserPlace(address indexed user, address indexed referrer, uint8 level, uint8 place);
event Registration(address indexed user, address indexed referrer, uint indexed userId, uint referrerId);
event MissedEthReceive(address indexed receiver, address indexed from, uint8 level);
event SentExtraEthDividends(address indexed from, address indexed receiver, uint8 level);
event NewRound(address indexed user, address indexed referrer, uint8 level);
address public super;
address public _this;
modifier OnlySuper {
require(msg.sender == super);
_;
}
constructor(address _token) public {
levelPrice[1] = 0.1 ether;
for (uint8 i = 2; i <= LAST_LEVEL; i++) {
levelPrice[i] = levelPrice[i - 1] * 2;
}
owner = msg.sender;
super = msg.sender;
manager = msg.sender;
pool = msg.sender;
eTPlanToken = _token;
_this = address(this);
}
function initEnd(address _endless, uint start, uint end) OnlySuper external {
Endless endless = Endless(address(uint160(_endless)));
owner = endless.owner();
lastUserId = end + 1;
for (uint i = start; i <= end; i++) {
address currentUser = endless.userIds(i);
(uint id,address referrer,uint partnersCount) = endless.users(currentUser);
User memory user = User({
id : id,
referrer : referrer,
partnersCount : partnersCount
});
users[currentUser] = user;
for (uint8 j = 1; j <= 12; j++) {
if (i == 3) {
users[currentUser].blocked[j] = true;
users[currentUser].activeQ8Levels[j] = false;
} else {
bool active = endless.usersActiveX6Levels(currentUser, j);
users[currentUser].activeQ8Levels[j] = active;
}
}
idToAddress[i] = currentUser;
}
}
function() external payable {
if (msg.data.length == 0) {
return registration(msg.sender, owner);
}
registration(msg.sender, bytesToAddress(msg.data));
}
function registrationExt(address referrerAddress) external payable {
registration(msg.sender, referrerAddress);
}
function registration(address userAddress, address referrerAddress) private {
require(msg.value == 0.1 ether, "registration cost 0.1");
require(!isUserExists(userAddress), "user exists");
require(isUserExists(referrerAddress), "referrer not exists");
uint32 size;
assembly {
size := extcodesize(userAddress)
}
require(size == 0, "cannot be a contract");
User memory user = User({
id : lastUserId,
referrer : referrerAddress,
partnersCount : 0
});
users[userAddress] = user;
idToAddress[lastUserId] = userAddress;
users[userAddress].activeQ8Levels[1] = true;
lastUserId++;
users[referrerAddress].partnersCount++;
emit Registration(userAddress, referrerAddress, users[userAddress].id, users[referrerAddress].id);
updateQ8Referrer(userAddress, referrerAddress, uint8(1));
if (ETPlanToken(eTPlanToken).balanceOf(_this) > levelPrice[uint8(1)]) {
ETPlanToken(eTPlanToken).transfer(userAddress, levelPrice[uint8(1)]);
ETPlanToken(eTPlanToken).transfer(referrerAddress, levelPrice[uint8(1)] / 2);
}
}
function buyNewLevel(uint8 level) external payable {
require(isUserExists(msg.sender), "user is not exists. Register first.");
require(msg.value == levelPrice[level], "invalid price");
require(level > 1 && level <= LAST_LEVEL, "invalid level");
require(!users[msg.sender].activeQ8Levels[level], "level already activated");
if (users[msg.sender].blocked[level - 1]) {
users[msg.sender].blocked[level - 1] = false;
}
users[msg.sender].activeQ8Levels[level] = true;
address freeReferrer = findFreeQ8Referrer(msg.sender, level);
updateQ8Referrer(msg.sender, freeReferrer, level);
emit NewRound(msg.sender, freeReferrer, level);
if (ETPlanToken(eTPlanToken).balanceOf(_this) > levelPrice[level]) {
ETPlanToken(eTPlanToken).transfer(msg.sender, levelPrice[level]);
ETPlanToken(eTPlanToken).transfer(freeReferrer, levelPrice[level]/2);
}
}
function updateQ8Referrer(address userAddress, address referrerAddress, uint8 level) private {
require(users[referrerAddress].activeQ8Levels[level], "500. Referrer level is inactive");
if ((users[referrerAddress].income[level] % (levelPrice[level] / 2)) >= 6) {
if (!users[referrerAddress].activeQ8Levels[level + 1] && level != LAST_LEVEL) {
users[referrerAddress].blocked[level] = true;
}
}
if (q8Matrix[level].firstLevelReferrals.length < 2) {
q8Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, referrerAddress, level, uint8(q8Matrix[level].firstLevelReferrals.length));
q8Matrix[level].currentReferrer = referrerAddress;
if (referrerAddress == owner) {
users[owner].income[level] += levelPrice[level];
return sendETHDividends(referrerAddress, userAddress, level, levelPrice[level]);
}
uint poolAmount = levelPrice[level] * 20 / 100;
if (!address(uint160(pool)).send(poolAmount)) {
return address(uint160(pool)).transfer(address(this).balance);
}
uint managerAmount = levelPrice[level] * 30 / 100;
if (!address(uint160(manager)).send(managerAmount)) {
return address(uint160(manager)).transfer(address(this).balance);
}
address freeReferrer = findFreeQ8Referrer(userAddress, level);
users[freeReferrer].income[level] += levelPrice[level] / 2;
return sendETHDividends(freeReferrer, userAddress, level, levelPrice[level] / 2);
}
q8Matrix[level].secondLevelReferrals.push(userAddress);
q8Matrix[level].currentReferrer = referrerAddress;
emit NewUserPlace(userAddress, referrerAddress, level, uint8(q8Matrix[level].secondLevelReferrals.length + 2));
if (q8Matrix[level].secondLevelReferrals.length == 1) {
address freeReferrer = findFreeQ8Referrer(userAddress, level);
users[freeReferrer].income[level] += levelPrice[level] / 2;
sendETHDividends(freeReferrer, userAddress, level, levelPrice[level] / 2);
uint poolAmount = levelPrice[level] * 20 / 100;
if (!address(uint160(pool)).send(poolAmount)) {
return address(uint160(pool)).transfer(address(this).balance);
}
address freeReferrerRe = findFreeQ8Referrer(freeReferrer, level);
users[freeReferrerRe].income[level] += levelPrice[level] * 30 / 100;
return sendETHDividends(freeReferrerRe, userAddress, level, levelPrice[level] * 30 / 100);
}
if (q8Matrix[level].secondLevelReferrals.length == 4) {//reinvest
q8Matrix[level].reinvestCount++;
q8Matrix[level].firstLevelReferrals = new address[](0);
q8Matrix[level].secondLevelReferrals = new address[](0);
}
address freeReferrer = findFreeQ8Referrer(userAddress, level);
users[freeReferrer].income[level] += levelPrice[level] / 2;
sendETHDividends(freeReferrer, userAddress, level, levelPrice[level] / 2);
uint poolAmount = levelPrice[level] * 20 / 100;
if (!address(uint160(pool)).send(poolAmount)) {
return address(uint160(pool)).transfer(address(this).balance);
}
uint managerAmount = levelPrice[level] * 30 / 100;
if (!address(uint160(manager)).send(managerAmount)) {
return address(uint160(manager)).transfer(address(this).balance);
}
}
function findFreeQ8Referrer(address userAddress, uint8 level) public view returns (address) {
while (true) {
if (users[users[userAddress].referrer].activeQ8Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
function findEthReceiver(address userAddress, address _from, uint8 level) private returns (address, bool) {
address receiver = userAddress;
bool isExtraDividends;
while (true) {
if (users[receiver].blocked[level]) {
emit MissedEthReceive(receiver, _from, level);
isExtraDividends = true;
receiver = users[receiver].referrer;
} else {
return (receiver, isExtraDividends);
}
}
}
function sendETHDividends(address userAddress, address _from, uint8 level, uint amount) private {
(address receiver, bool isExtraDividends) = findEthReceiver(userAddress, _from, level);
if (!address(uint160(receiver)).send(amount)) {
return address(uint160(receiver)).transfer(address(this).balance);
}
if (isExtraDividends) {
emit SentExtraEthDividends(_from, receiver, level);
}
}
function isUserExists(address user) public view returns (bool) {
return (users[user].id != 0);
}
function bytesToAddress(bytes memory bys) private pure returns (address addr) {
assembly {
addr := mload(add(bys, 20))
}
}
function activeQ8Levels(address _user, uint8 level) public view returns (bool){
return users[_user].activeQ8Levels[level];
}
function blocked(address _user, uint8 level) public view returns (bool){
return users[_user].blocked[level];
}
function income(address _user, uint8 level) public view returns (uint){
return users[_user].income[level];
}
function getq8Matrix(uint8 level) public view returns (address, address[] memory, address[] memory, uint){
return (q8Matrix[level].currentReferrer,
q8Matrix[level].firstLevelReferrals,
q8Matrix[level].secondLevelReferrals,
q8Matrix[level].reinvestCount);
}
function updatePool(address _pool) public OnlySuper {
pool = _pool;
}
function updateManager(address _manager) public OnlySuper {
manager = _manager;
}
function updateSuper(address _super) public OnlySuper {
super = _super;
}
function update(address _user, uint8 _level) public OnlySuper {
require(isUserExists(_user), "user not exists");
users[_user].activeQ8Levels[_level] = !users[_user].activeQ8Levels[_level];
}
function withdrawELS(address _user, uint _value) public OnlySuper {
ETPlanToken(eTPlanToken).transfer(_user, _value);
}
}
contract Endless {
struct User {
uint id;
address referrer;
uint partnersCount;
mapping(uint8 => bool) activeX3Levels;
mapping(uint8 => bool) activeX6Levels;
mapping(uint8 => X3) x3Matrix;
mapping(uint8 => X6) x6Matrix;
}
struct X3 {
address currentReferrer;
address[] referrals;
bool blocked;
uint reinvestCount;
}
struct X6 {
address currentReferrer;
address[] firstLevelReferrals;
address[] secondLevelReferrals;
bool blocked;
uint reinvestCount;
address closedPart;
}
uint8 public constant LAST_LEVEL = 12;
mapping(address => User) public users;
mapping(uint => address) public idToAddress;
mapping(uint => address) public userIds;
mapping(address => uint) public balances;
uint public lastUserId = 2;
address public owner;
mapping(uint8 => uint) public levelPrice;
event Registration(address indexed user, address indexed referrer, uint indexed userId, uint referrerId);
event Reinvest(address indexed user, address indexed currentReferrer, address indexed caller, uint8 matrix, uint8 level);
event Upgrade(address indexed user, address indexed referrer, uint8 matrix, uint8 level);
event NewUserPlace(address indexed user, address indexed referrer, uint8 matrix, uint8 level, uint8 place);
event MissedEthReceive(address indexed receiver, address indexed from, uint8 matrix, uint8 level);
event SentExtraEthDividends(address indexed from, address indexed receiver, uint8 matrix, uint8 level);
constructor(address ownerAddress) public {
levelPrice[1] = 0.025 ether;
for (uint8 i = 2; i <= LAST_LEVEL; i++) {
levelPrice[i] = levelPrice[i-1] * 2;
}
owner = ownerAddress;
User memory user = User({
id: 1,
referrer: address(0),
partnersCount: uint(0)
});
users[ownerAddress] = user;
idToAddress[1] = ownerAddress;
for (uint8 i = 1; i <= LAST_LEVEL; i++) {
users[ownerAddress].activeX3Levels[i] = true;
users[ownerAddress].activeX6Levels[i] = true;
}
userIds[1] = ownerAddress;
}
function() external payable {
if(msg.data.length == 0) {
return registration(msg.sender, owner);
}
registration(msg.sender, bytesToAddress(msg.data));
}
function registrationExt(address referrerAddress) external payable {
registration(msg.sender, referrerAddress);
}
function buyNewLevel(uint8 matrix, uint8 level) external payable {
require(isUserExists(msg.sender), "user is not exists. Register first.");
require(matrix == 1 || matrix == 2, "invalid matrix");
require(msg.value == levelPrice[level], "invalid price");
require(level > 1 && level <= LAST_LEVEL, "invalid level");
if (matrix == 1) {
require(!users[msg.sender].activeX3Levels[level], "level already activated");
if (users[msg.sender].x3Matrix[level-1].blocked) {
users[msg.sender].x3Matrix[level-1].blocked = false;
}
address freeX3Referrer = findFreeX3Referrer(msg.sender, level);
users[msg.sender].x3Matrix[level].currentReferrer = freeX3Referrer;
users[msg.sender].activeX3Levels[level] = true;
updateX3Referrer(msg.sender, freeX3Referrer, level);
emit Upgrade(msg.sender, freeX3Referrer, 1, level);
} else {
require(!users[msg.sender].activeX6Levels[level], "level already activated");
if (users[msg.sender].x6Matrix[level-1].blocked) {
users[msg.sender].x6Matrix[level-1].blocked = false;
}
address freeX6Referrer = findFreeX6Referrer(msg.sender, level);
users[msg.sender].activeX6Levels[level] = true;
updateX6Referrer(msg.sender, freeX6Referrer, level);
emit Upgrade(msg.sender, freeX6Referrer, 2, level);
}
}
function registration(address userAddress, address referrerAddress) private {
require(msg.value == 0.05 ether, "registration cost 0.05");
require(!isUserExists(userAddress), "user exists");
require(isUserExists(referrerAddress), "referrer not exists");
uint32 size;
assembly {
size := extcodesize(userAddress)
}
require(size == 0, "cannot be a contract");
User memory user = User({
id: lastUserId,
referrer: referrerAddress,
partnersCount: 0
});
users[userAddress] = user;
idToAddress[lastUserId] = userAddress;
users[userAddress].referrer = referrerAddress;
users[userAddress].activeX3Levels[1] = true;
users[userAddress].activeX6Levels[1] = true;
userIds[lastUserId] = userAddress;
lastUserId++;
users[referrerAddress].partnersCount++;
address freeX3Referrer = findFreeX3Referrer(userAddress, 1);
users[userAddress].x3Matrix[1].currentReferrer = freeX3Referrer;
updateX3Referrer(userAddress, freeX3Referrer, 1);
updateX6Referrer(userAddress, findFreeX6Referrer(userAddress, 1), 1);
emit Registration(userAddress, referrerAddress, users[userAddress].id, users[referrerAddress].id);
}
function updateX3Referrer(address userAddress, address referrerAddress, uint8 level) private {
users[referrerAddress].x3Matrix[level].referrals.push(userAddress);//?
if (users[referrerAddress].x3Matrix[level].referrals.length < 3) {
emit NewUserPlace(userAddress, referrerAddress, 1, level, uint8(users[referrerAddress].x3Matrix[level].referrals.length));
return sendETHDividends(referrerAddress, userAddress, 1, level);
}
emit NewUserPlace(userAddress, referrerAddress, 1, level, 3);
//close matrix
users[referrerAddress].x3Matrix[level].referrals = new address[](0);
if (!users[referrerAddress].activeX3Levels[level+1] && level != LAST_LEVEL) {
users[referrerAddress].x3Matrix[level].blocked = true;
}
//create new one by recursion
if (referrerAddress != owner) {
//check referrer active level
address freeReferrerAddress = findFreeX3Referrer(referrerAddress, level);
if (users[referrerAddress].x3Matrix[level].currentReferrer != freeReferrerAddress) {
users[referrerAddress].x3Matrix[level].currentReferrer = freeReferrerAddress;
}
users[referrerAddress].x3Matrix[level].reinvestCount++;
emit Reinvest(referrerAddress, freeReferrerAddress, userAddress, 1, level);
updateX3Referrer(referrerAddress, freeReferrerAddress, level);
} else {
sendETHDividends(owner, userAddress, 1, level);
users[owner].x3Matrix[level].reinvestCount++;
emit Reinvest(owner, address(0), userAddress, 1, level);
}
}
function updateX6Referrer(address userAddress, address referrerAddress, uint8 level) private {
require(users[referrerAddress].activeX6Levels[level], "500. Referrer level is inactive");
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length < 2) {
users[referrerAddress].x6Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, referrerAddress, 2, level, uint8(users[referrerAddress].x6Matrix[level].firstLevelReferrals.length));
//set current level
users[userAddress].x6Matrix[level].currentReferrer = referrerAddress;
if (referrerAddress == owner) {
return sendETHDividends(referrerAddress, userAddress, 2, level);
}
address ref = users[referrerAddress].x6Matrix[level].currentReferrer;
users[ref].x6Matrix[level].secondLevelReferrals.push(userAddress);
uint len = users[ref].x6Matrix[level].firstLevelReferrals.length;
if ((len == 2) &&
(users[ref].x6Matrix[level].firstLevelReferrals[0] == referrerAddress) &&
(users[ref].x6Matrix[level].firstLevelReferrals[1] == referrerAddress)) {
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length == 1) {
emit NewUserPlace(userAddress, ref, 2, level, 5);
} else {
emit NewUserPlace(userAddress, ref, 2, level, 6);
}
} else if ((len == 1 || len == 2) &&
users[ref].x6Matrix[level].firstLevelReferrals[0] == referrerAddress) {
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length == 1) {
emit NewUserPlace(userAddress, ref, 2, level, 3);
} else {
emit NewUserPlace(userAddress, ref, 2, level, 4);
}
} else if (len == 2 && users[ref].x6Matrix[level].firstLevelReferrals[1] == referrerAddress) {
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals.length == 1) {
emit NewUserPlace(userAddress, ref, 2, level, 5);
} else {
emit NewUserPlace(userAddress, ref, 2, level, 6);
}
}
return updateX6ReferrerSecondLevel(userAddress, ref, level);
}
users[referrerAddress].x6Matrix[level].secondLevelReferrals.push(userAddress);
if (users[referrerAddress].x6Matrix[level].closedPart != address(0)) {
if ((users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] ==
users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]) &&
(users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] ==
users[referrerAddress].x6Matrix[level].closedPart)) {
updateX6(userAddress, referrerAddress, level, true);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
} else if (users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] ==
users[referrerAddress].x6Matrix[level].closedPart) {
updateX6(userAddress, referrerAddress, level, true);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
} else {
updateX6(userAddress, referrerAddress, level, false);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
}
}
if (users[referrerAddress].x6Matrix[level].firstLevelReferrals[1] == userAddress) {
updateX6(userAddress, referrerAddress, level, false);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
} else if (users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] == userAddress) {
updateX6(userAddress, referrerAddress, level, true);
return updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
}
if (users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.length <=
users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.length) {
updateX6(userAddress, referrerAddress, level, false);
} else {
updateX6(userAddress, referrerAddress, level, true);
}
updateX6ReferrerSecondLevel(userAddress, referrerAddress, level);
}
function updateX6(address userAddress, address referrerAddress, uint8 level, bool x2) private {
if (!x2) {
users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, users[referrerAddress].x6Matrix[level].firstLevelReferrals[0], 2, level, uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.length));
emit NewUserPlace(userAddress, referrerAddress, 2, level, 2 + uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]].x6Matrix[level].firstLevelReferrals.length));
//set current level
users[userAddress].x6Matrix[level].currentReferrer = users[referrerAddress].x6Matrix[level].firstLevelReferrals[0];
} else {
users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.push(userAddress);
emit NewUserPlace(userAddress, users[referrerAddress].x6Matrix[level].firstLevelReferrals[1], 2, level, uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.length));
emit NewUserPlace(userAddress, referrerAddress, 2, level, 4 + uint8(users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]].x6Matrix[level].firstLevelReferrals.length));
//set current level
users[userAddress].x6Matrix[level].currentReferrer = users[referrerAddress].x6Matrix[level].firstLevelReferrals[1];
}
}
function updateX6ReferrerSecondLevel(address userAddress, address referrerAddress, uint8 level) private {
if (users[referrerAddress].x6Matrix[level].secondLevelReferrals.length < 4) {
return sendETHDividends(referrerAddress, userAddress, 2, level);
}
address[] memory x6 = users[users[referrerAddress].x6Matrix[level].currentReferrer].x6Matrix[level].firstLevelReferrals;
if (x6.length == 2) {
if (x6[0] == referrerAddress ||
x6[1] == referrerAddress) {
users[users[referrerAddress].x6Matrix[level].currentReferrer].x6Matrix[level].closedPart = referrerAddress;
} else if (x6.length == 1) {
if (x6[0] == referrerAddress) {
users[users[referrerAddress].x6Matrix[level].currentReferrer].x6Matrix[level].closedPart = referrerAddress;
}
}
}
users[referrerAddress].x6Matrix[level].firstLevelReferrals = new address[](0);
users[referrerAddress].x6Matrix[level].secondLevelReferrals = new address[](0);
users[referrerAddress].x6Matrix[level].closedPart = address(0);
if (!users[referrerAddress].activeX6Levels[level+1] && level != LAST_LEVEL) {
users[referrerAddress].x6Matrix[level].blocked = true;
}
users[referrerAddress].x6Matrix[level].reinvestCount++;
if (referrerAddress != owner) {
address freeReferrerAddress = findFreeX6Referrer(referrerAddress, level);
emit Reinvest(referrerAddress, freeReferrerAddress, userAddress, 2, level);
updateX6Referrer(referrerAddress, freeReferrerAddress, level);
} else {
emit Reinvest(owner, address(0), userAddress, 2, level);
sendETHDividends(owner, userAddress, 2, level);
}
}
function findFreeX3Referrer(address userAddress, uint8 level) public view returns(address) {
while (true) {
if (users[users[userAddress].referrer].activeX3Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
function findFreeX6Referrer(address userAddress, uint8 level) public view returns(address) {
while (true) {
if (users[users[userAddress].referrer].activeX6Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
function usersActiveX3Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX3Levels[level];
}
function usersActiveX6Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX6Levels[level];
}
function usersX3Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, bool ,uint) {
return (users[userAddress].x3Matrix[level].currentReferrer,
users[userAddress].x3Matrix[level].referrals,
users[userAddress].x3Matrix[level].blocked,
users[userAddress].x3Matrix[level].reinvestCount);
}
function usersX6Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, address[] memory, bool, address,uint) {
return (users[userAddress].x6Matrix[level].currentReferrer,
users[userAddress].x6Matrix[level].firstLevelReferrals,
users[userAddress].x6Matrix[level].secondLevelReferrals,
users[userAddress].x6Matrix[level].blocked,
users[userAddress].x6Matrix[level].closedPart,
users[userAddress].x6Matrix[level].reinvestCount);
}
function isUserExists(address user) public view returns (bool) {
return (users[user].id != 0);
}
function findEthReceiver(address userAddress, address _from, uint8 matrix, uint8 level) private returns(address, bool) {
address receiver = userAddress;
bool isExtraDividends;
if (matrix == 1) {
while (true) {
if (users[receiver].x3Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 1, level);
isExtraDividends = true;
receiver = users[receiver].x3Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
} else {
while (true) {
if (users[receiver].x6Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 2, level);
isExtraDividends = true;
receiver = users[receiver].x6Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
}
}
function sendETHDividends(address userAddress, address _from, uint8 matrix, uint8 level) private {
(address receiver, bool isExtraDividends) = findEthReceiver(userAddress, _from, matrix, level);
if (!address(uint160(receiver)).send(levelPrice[level])) {
return address(uint160(receiver)).transfer(address(this).balance);
}
if (isExtraDividends) {
emit SentExtraEthDividends(_from, receiver, matrix, level);
}
}
function bytesToAddress(bytes memory bys) private pure returns (address addr) {
assembly {
addr := mload(add(bys, 20))
}
}
}
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
// Gas optimization: this is cheaper than asserting 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin- solidity/pull/522
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b > 0);
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
contract Token {
/// @return total amount of tokens
//function totalSupply() public view returns (uint supply);
/// @param _owner The address from which the balance will be retrieved
/// @return The balance
function balanceOf(address _owner) public view returns (uint balance);
/// @notice send `_value` token to `_to` from `msg.sender`
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transfer(address _to, uint _value) public returns (bool success);
/// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
/// @param _from The address of the sender
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transferFrom(address _from, address _to, uint _value) public returns (bool success);
/// @notice `msg.sender` approves `_addr` to spend `_value` tokens
/// @param _spender The address of the account able to transfer the tokens
/// @param _value The amount of wei to be approved for transfer
/// @return Whether the approval was successful or not
function approve(address _spender, uint _value) public returns (bool success);
/// @param _owner The address of the account owning tokens
/// @param _spender The address of the account able to transfer the tokens
/// @return Amount of remaining tokens allowed to spent
function allowance(address _owner, address _spender) public view returns (uint remaining);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
contract RegularToken is Token {
using SafeMath for uint256;
function transfer(address _to, uint _value) public returns (bool) {
require(_to != address(0));
//Default assumes totalSupply can't be over max (2^256 - 1).
require(balances[msg.sender] >= _value);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint _value) public returns (bool) {
require(_to != address(0));
require(balances[_from] >= _value);
require(allowed[_from][msg.sender] >= _value);
balances[_to] = balances[_to].add(_value);
balances[_from] = balances[_from].sub(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
function balanceOf(address _owner) public view returns (uint) {
return balances[_owner];
}
function approve(address _spender, uint _value) public returns (bool) {
require(_spender != address(0));
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function allowance(address _owner, address _spender) public view returns (uint) {
return allowed[_owner][_spender];
}
mapping(address => uint) balances;
mapping(address => mapping(address => uint)) allowed;
uint public totalSupply;
}
contract UnboundedRegularToken is RegularToken {
uint constant MAX_UINT = 2 ** 256 - 1;
/// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited amount.
/// @param _from Address to transfer from.
/// @param _to Address to transfer to.
/// @param _value Amount to transfer.
/// @return Success of transfer.
function transferFrom(address _from, address _to, uint _value)
public
returns (bool)
{
require(_to != address(0));
uint allowance = allowed[_from][msg.sender];
require(balances[_from] >= _value);
require(allowance >= _value);
balances[_to] = balances[_to].add(_value);
balances[_from] = balances[_from].sub(_value);
if (allowance < MAX_UINT) {
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
}
emit Transfer(_from, _to, _value);
return true;
}
}
contract ETPlanToken is UnboundedRegularToken {
uint8 constant public decimals = 18;
string constant public name = "ETPlanToken";
string constant public symbol = "ELS";
constructor() public {
totalSupply = 33 * 10 ** 25;
balances[msg.sender] = totalSupply;
emit Transfer(address(0), msg.sender, totalSupply);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_etplan","type":"address"}],"name":"initQ8","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LAST_LEVEL","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"idToAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_this","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUserId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_level","type":"uint8"}],"name":"update","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"},{"name":"level","type":"uint8"}],"name":"income","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"isUserExists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"updateManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdrawELS","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"referrerAddress","type":"address"}],"name":"registrationExt","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"q8Matrix","outputs":[{"name":"currentReferrer","type":"address"},{"name":"reinvestCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pool","type":"address"}],"name":"updatePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"userAddress","type":"address"},{"name":"level","type":"uint8"}],"name":"findFreeQ8Referrer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"level","type":"uint8"}],"name":"buyNewLevel","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"},{"name":"level","type":"uint8"}],"name":"activeQ8Levels","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"super","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"users","outputs":[{"name":"id","type":"uint256"},{"name":"referrer","type":"address"},{"name":"partnersCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_super","type":"address"}],"name":"updateSuper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"eTPlanToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"level","type":"uint8"}],"name":"getq8Matrix","outputs":[{"name":"","type":"address"},{"name":"","type":"address[]"},{"name":"","type":"address[]"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"},{"name":"level","type":"uint8"}],"name":"blocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"levelPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_etplan","type":"address"},{"name":"start","type":"uint256"},{"name":"end","type":"uint256"}],"name":"initData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"referrer","type":"address"},{"indexed":false,"name":"level","type":"uint8"},{"indexed":false,"name":"place","type":"uint8"}],"name":"NewUserPlace","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"referrer","type":"address"},{"indexed":true,"name":"userId","type":"uint256"},{"indexed":false,"name":"referrerId","type":"uint256"}],"name":"Registration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"receiver","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"level","type":"uint8"}],"name":"MissedEthReceive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"receiver","type":"address"},{"indexed":false,"name":"level","type":"uint8"}],"name":"SentExtraEthDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"referrer","type":"address"},{"indexed":false,"name":"level","type":"uint8"}],"name":"NewRound","type":"event"}]Contract Creation Code
608060405260026000553480156200001657600080fd5b5067016345785d8a000060056000600160ff168152602001908152602001600020819055506000600290505b600c60ff168160ff16116200009c576002600560006001840360ff1660ff1681526020019081526020016000205402600560008360ff1660ff16815260200190815260200160002081905550808060010191505062000042565b5030600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506148a8806200012f6000396000f3fe60806040526004361061019c5760003560e01c80637b3f6926116100ec578063a87430ba1161008a578063ccf19b3111610064578063ccf19b3114610a99578063d845e63014610bae578063ecabdf7914610c24578063faa9f04b14610c765761019c565b8063a87430ba14610952578063bd473410146109f1578063bf3c41f814610a425761019c565b8063876cb217116100c6578063876cb217146107fd57806387d84e9f1461082e5780638da5cb5b146108a4578063910d13e8146108fb5761019c565b80637b3f6926146106895780637b46c54f1461070e5780637ce36ec01461075f5761019c565b8063356ac86e11610159578063509222cd11610133578063509222cd1461053057806358aba00f146105995780637337088d146105ea578063797eee24146106455761019c565b8063356ac86e14610409578063481c6a75146104675780634a6e1870146104be5761019c565b80631411a5411461023357806316f0115b1461028457806329c70400146102db5780632a2d0c471461030c5780632b5ab84a14610387578063348d4487146103de575b60008036905014156101d9576101d433600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cdb565b610231565b6102303361022b6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611501565b610cdb565b5b005b34801561023f57600080fd5b506102826004803603602081101561025657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061150f565b005b34801561029057600080fd5b506102996117d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e757600080fd5b506102f06117f7565b604051808260ff1660ff16815260200191505060405180910390f35b34801561031857600080fd5b506103456004803603602081101561032f57600080fd5b81019080803590602001909291905050506117fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039357600080fd5b5061039c61182f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ea57600080fd5b506103f3611855565b6040518082815260200191505060405180910390f35b34801561041557600080fd5b506104656004803603604081101561042c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919050505061185b565b005b34801561047357600080fd5b5061047c611a0c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ca57600080fd5b5061051a600480360360408110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611a32565b6040518082815260200191505060405180910390f35b34801561053c57600080fd5b5061057f6004803603602081101561055357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a96565b604051808215151515815260200191505060405180910390f35b3480156105a557600080fd5b506105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae5565b005b3480156105f657600080fd5b506106436004803603604081101561060d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b83565b005b6106876004803603602081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc6565b005b34801561069557600080fd5b506106c5600480360360208110156106ac57600080fd5b81019080803560ff169060200190929190505050611cd3565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b34801561071a57600080fd5b5061075d6004803603602081101561073157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d17565b005b34801561076b57600080fd5b506107bb6004803603604081101561078257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611db5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61082c6004803603602081101561081357600080fd5b81019080803560ff169060200190929190505050611f68565b005b34801561083a57600080fd5b5061088a6004803603604081101561085157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506126c8565b604051808215151515815260200191505060405180910390f35b3480156108b057600080fd5b506108b9612739565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561090757600080fd5b5061091061275f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095e57600080fd5b506109a16004803603602081101561097557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612785565b604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b3480156109fd57600080fd5b50610a4060048036036020811015610a1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127cf565b005b348015610a4e57600080fd5b50610a5761286d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa557600080fd5b50610ad560048036036020811015610abc57600080fd5b81019080803560ff169060200190929190505050612893565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001848152602001838103835286818151815260200191508051906020019060200280838360005b83811015610b54578082015181840152602081019050610b39565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015610b96578082015181840152602081019050610b7b565b50505050905001965050505050505060405180910390f35b348015610bba57600080fd5b50610c0a60048036036040811015610bd157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050612a4b565b604051808215151515815260200191505060405180910390f35b348015610c3057600080fd5b50610c6060048036036020811015610c4757600080fd5b81019080803560ff169060200190929190505050612abc565b6040518082815260200191505060405180910390f35b348015610c8257600080fd5b50610cd960048036036060811015610c9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612ad4565b005b67016345785d8a00003414610d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f726567697374726174696f6e20636f737420302e31000000000000000000000081525060200191505060405180910390fd5b610d6182611a96565b15610dd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f757365722065786973747300000000000000000000000000000000000000000081525060200191505060405180910390fd5b610ddd81611a96565b610e4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7265666572726572206e6f74206578697374730000000000000000000000000081525060200191505060405180910390fd5b6000823b905060008163ffffffff1614610ed1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f63616e6e6f74206265206120636f6e747261637400000000000000000000000081525060200191505060405180910390fd5b610ed9614755565b604051806060016040528060005481526020018473ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015590505083600860008054815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000600160ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000808154809291906001019190505550600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008154809291906001019190505550600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f309bb360e8b69c23937ccc5fb01f9aeeead1c95a99604e175113ff82f2b1723a600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546040518082815260200191505060405180910390a46111c98484600161346b565b6002600360056000600160ff1660ff1681526020019081526020016000205402816111f057fe5b04600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112b257600080fd5b505afa1580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b8101908080519060200190929190505050106114fb57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8560056000600160ff1660ff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113b557600080fd5b505af11580156113c9573d6000803e3d6000fd5b505050506040513d60208110156113df57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84600260056000600160ff1660ff168152602001908152602001600020548161145457fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114be57600080fd5b505af11580156114d2573d6000803e3d6000fd5b505050506040513d60208110156114e857600080fd5b8101908080519060200190929190505050505b50505050565b600060148201519050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461156957600080fd5b60008190506000600190505b600c8160ff16116117cc57600060608060008573ffffffffffffffffffffffffffffffffffffffff1663ccf19b31866040518263ffffffff1660e01b8152600401808260ff1660ff16815260200191505060006040518083038186803b1580156115de57600080fd5b505afa1580156115f2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250608081101561161c57600080fd5b8101908080519060200190929190805164010000000081111561163e57600080fd5b8281019050602081018481111561165457600080fd5b815185602082028301116401000000008211171561167157600080fd5b5050929190602001805164010000000081111561168d57600080fd5b828101905060208101848111156116a357600080fd5b81518560208202830111640100000000821117156116c057600080fd5b505092919060200180519060200190929190505050935093509350935083600660008760ff1660ff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660008760ff1660ff168152602001908152602001600020600101908051906020019061176892919061478c565b5081600660008760ff1660ff168152602001908152602001600020600201908051906020019061179992919061478c565b5080600660008760ff1660ff16815260200190815260200160002060030181905550505050508080600101915050611575565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c81565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118b557600080fd5b6118be82611a96565b611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f75736572206e6f7420657869737473000000000000000000000000000000000081525060200191505060405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008260ff1660ff16815260200190815260200160002060009054906101000a900460ff1615600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008360ff1660ff16815260200190815260200160002054905092915050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414159050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b3f57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bdd57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c8657600080fd5b505af1158015611c9a573d6000803e3d6000fd5b505050506040513d6020811015611cb057600080fd5b8101908080519060200190929190505050505050565b611cd03382610cdb565b50565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905082565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d7157600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005b600115611f615760076000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060009054906101000a900460ff1615611ef757600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611f62565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250611db8565b5b92915050565b611f7133611a96565b611fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061485a6023913960400191505060405180910390fd5b600560008260ff1660ff168152602001908152602001600020543414612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070726963650000000000000000000000000000000000000081525060200191505060405180910390fd5b60018160ff1611801561206e5750600c60ff168160ff1611155b6120e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c6964206c6576656c0000000000000000000000000000000000000081525060200191505060405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6c6576656c20616c72656164792061637469766174656400000000000000000081525060200191505060405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006001830360ff1660ff16815260200190815260200160002060009054906101000a900460ff161561229f576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006001840360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600061231d3383611db5565b905061232a33828461346b565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff32f53b11fbb7739b01829cd03cb1b237493aaa124e00423aeaf599841f91a7584604051808260ff1660ff16815260200191505060405180910390a360026003600560008560ff1660ff1681526020019081526020016000205402816123bb57fe5b04600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561247d57600080fd5b505afa158015612491573d6000803e3d6000fd5b505050506040513d60208110156124a757600080fd5b8101908080519060200190929190505050106126c457600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600560008660ff1660ff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561257f57600080fd5b505af1158015612593573d6000803e3d6000fd5b505050506040513d60208110156125a957600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb826002600560008760ff1660ff168152602001908152602001600020548161261d57fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561268757600080fd5b505af115801561269b573d6000803e3d6000fd5b505050506040513d60208110156126b157600080fd5b8101908080519060200190929190505050505b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461282957600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000600660008660ff1660ff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660008760ff1660ff168152602001908152602001600020600101600660008860ff1660ff168152602001908152602001600020600201600660008960ff1660ff16815260200190815260200160002060030154828054806020026020016040519081016040528092919081815260200182805480156129ad57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612963575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015612a3557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116129eb575b5050505050915093509350935093509193509193565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008360ff1660ff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60056020528060005260406000206000915090505481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b2e57600080fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b7957600080fd5b505afa158015612b8d573d6000803e3d6000fd5b505050506040513d6020811015612ba357600080fd5b8101908080519060200190929190505050600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b158015612c3a57600080fd5b505afa158015612c4e573d6000803e3d6000fd5b505050506040513d6020811015612c6457600080fd5b8101908080519060200190929190505050600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cfb57600080fd5b505afa158015612d0f573d6000803e3d6000fd5b505050506040513d6020811015612d2557600080fd5b8101908080519060200190929190505050600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663bf3c41f86040518163ffffffff1660e01b815260040160206040518083038186803b158015612dbc57600080fd5b505afa158015612dd0573d6000803e3d6000fd5b505050506040513d6020811015612de657600080fd5b8101908080519060200190929190505050600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160008190555060008390505b8281116134645760008273ffffffffffffffffffffffffffffffffffffffff16632a2d0c47836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612ea157600080fd5b505afa158015612eb5573d6000803e3d6000fd5b505050506040513d6020811015612ecb57600080fd5b8101908080519060200190929190505050905060008060008573ffffffffffffffffffffffffffffffffffffffff1663a87430ba856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060606040518083038186803b158015612f6057600080fd5b505afa158015612f74573d6000803e3d6000fd5b505050506040513d6060811015612f8a57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050925092509250612fbd614755565b60405180606001604052808581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201559050506000600190505b600c8160ff16116133ff576003871415613192576001600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506133f2565b60008873ffffffffffffffffffffffffffffffffffffffff166387d84e9f88846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060206040518083038186803b15801561321f57600080fd5b505afa158015613233573d6000803e3d6000fd5b505050506040513d602081101561324957600080fd5b8101908080519060200190929190505050905080600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008460ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508873ffffffffffffffffffffffffffffffffffffffff16634a6e187088846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060206040518083038186803b15801561335857600080fd5b505afa15801561336c573d6000803e3d6000fd5b505050506040513d602081101561338257600080fd5b8101908080519060200190929190505050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff16815260200190815260200160002081905550505b8080600101915050613095565b50846008600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050508080600101915050612e47565b5050505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16613544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f3530302e205265666572726572206c6576656c20697320696e6163746976650081525060200191505060405180910390fd5b60066002600560008460ff1660ff168152602001908152602001600020548161356957fe5b04600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff16815260200190815260200160002054816135cb57fe5b06106136c857600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006001830160ff1660ff16815260200190815260200160002060009054906101000a900460ff1615801561364f5750600c60ff168160ff1614155b156136c7576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6002600660008360ff1660ff168152602001908152602001600020600101805490501015613c6d57600660008260ff1660ff1681526020019081526020016000206001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc33ed40cea88a5a8a40cc428a4c5a17a2b6174dc640a90269fe3dcc60d7735dd83600660008660ff1660ff16815260200190815260200160002060010180549050604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390a381600660008360ff1660ff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561398557600560008260ff1660ff1681526020019081526020016000205460076000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008360ff1660ff16815260200190815260200160002060008282540192505081905550613980828483600560008660ff1660ff168152602001908152602001600020546144b6565b6144b1565b600060646014600560008560ff1660ff1681526020019081526020016000205402816139ad57fe5b049050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050613a9157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015613a8a573d6000803e3d6000fd5b50506144b1565b60006064601e600560008660ff1660ff168152602001908152602001600020540281613ab957fe5b049050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050613b9e57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015613b96573d6000803e3d6000fd5b5050506144b1565b6000613baa8685611db5565b90506002600560008660ff1660ff1681526020019081526020016000205481613bcf57fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008660ff1660ff16815260200190815260200160002060008282540192505081905550613c658187866002600560008a60ff1660ff1681526020019081526020016000205481613c5f57fe5b046144b6565b5050506144b1565b600660008260ff1660ff1681526020019081526020016000206002018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600660008360ff1660ff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc33ed40cea88a5a8a40cc428a4c5a17a2b6174dc640a90269fe3dcc60d7735dd836002600660008760ff1660ff1681526020019081526020016000206002018054905001604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390a36001600660008360ff1660ff1681526020019081526020016000206002018054905014156140b4576000613e178483611db5565b90506002600560008460ff1660ff1681526020019081526020016000205481613e3c57fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff16815260200190815260200160002060008282540192505081905550613ed28185846002600560008860ff1660ff1681526020019081526020016000205481613ecc57fe5b046144b6565b600060646014600560008660ff1660ff168152602001908152602001600020540281613efa57fe5b049050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050613fdf57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015613fd7573d6000803e3d6000fd5b5050506144b1565b6000613feb8385611db5565b90506064601e600560008760ff1660ff16815260200190815260200160002054028161401357fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008660ff1660ff168152602001908152602001600020600082825401925050819055506140ac8187866064601e600560008b60ff1660ff1681526020019081526020016000205402816140a657fe5b046144b6565b5050506144b1565b6004600660008360ff1660ff1681526020019081526020016000206002018054905014156141cb57600660008260ff1660ff1681526020019081526020016000206003016000815480929190600101919050555060006040519080825280602002602001820160405280156141385781602001602082028038833980820191505090505b50600660008360ff1660ff168152602001908152602001600020600101908051906020019061416892919061478c565b5060006040519080825280602002602001820160405280156141995781602001602082028038833980820191505090505b50600660008360ff1660ff16815260200190815260200160002060020190805190602001906141c992919061478c565b505b60006141d78483611db5565b90506002600560008460ff1660ff16815260200190815260200160002054816141fc57fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff168152602001908152602001600020600082825401925050819055506142928185846002600560008860ff1660ff168152602001908152602001600020548161428c57fe5b046144b6565b600060646014600560008660ff1660ff1681526020019081526020016000205402816142ba57fe5b049050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061439f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015614397573d6000803e3d6000fd5b5050506144b1565b60006064601e600560008760ff1660ff1681526020019081526020016000205402816143c757fe5b049050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506144ad57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156144a4573d6000803e3d6000fd5b505050506144b1565b5050505b505050565b6000806144c48686866145e1565b915091508173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050614566578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561455e573d6000803e3d6000fd5b5050506145db565b80156145d8578173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f396aba16adb88a08463b257ff8c234fb4b91a9f6f0d0b1a6e842c8239b10c0a586604051808260ff1660ff16815260200191505060405180910390a35b50505b50505050565b600080600085905060005b60011561474a57600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008660ff1660ff16815260200190815260200160002060009054906101000a900460ff1615614738578573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe4c390745de94e576db58e5b18db9b14f1185dd2fe6204671461ca8bd05c520187604051808260ff1660ff16815260200191505060405180910390a360019050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150614745565b818193509350505061474d565b6145ec565b50505b935093915050565b604051806060016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b828054828255906000526020600020908101928215614805579160200282015b828111156148045782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906147ac565b5b5090506148129190614816565b5090565b61485691905b8082111561485257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161481c565b5090565b9056fe75736572206973206e6f74206578697374732e2052656769737465722066697273742ea165627a7a7230582050792bbacd464af1629ff7afeeb78668579315d01bad71ef5d1147e7c1b4b5a60029
Deployed Bytecode
0x60806040526004361061019c5760003560e01c80637b3f6926116100ec578063a87430ba1161008a578063ccf19b3111610064578063ccf19b3114610a99578063d845e63014610bae578063ecabdf7914610c24578063faa9f04b14610c765761019c565b8063a87430ba14610952578063bd473410146109f1578063bf3c41f814610a425761019c565b8063876cb217116100c6578063876cb217146107fd57806387d84e9f1461082e5780638da5cb5b146108a4578063910d13e8146108fb5761019c565b80637b3f6926146106895780637b46c54f1461070e5780637ce36ec01461075f5761019c565b8063356ac86e11610159578063509222cd11610133578063509222cd1461053057806358aba00f146105995780637337088d146105ea578063797eee24146106455761019c565b8063356ac86e14610409578063481c6a75146104675780634a6e1870146104be5761019c565b80631411a5411461023357806316f0115b1461028457806329c70400146102db5780632a2d0c471461030c5780632b5ab84a14610387578063348d4487146103de575b60008036905014156101d9576101d433600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cdb565b610231565b6102303361022b6000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611501565b610cdb565b5b005b34801561023f57600080fd5b506102826004803603602081101561025657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061150f565b005b34801561029057600080fd5b506102996117d1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e757600080fd5b506102f06117f7565b604051808260ff1660ff16815260200191505060405180910390f35b34801561031857600080fd5b506103456004803603602081101561032f57600080fd5b81019080803590602001909291905050506117fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039357600080fd5b5061039c61182f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ea57600080fd5b506103f3611855565b6040518082815260200191505060405180910390f35b34801561041557600080fd5b506104656004803603604081101561042c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919050505061185b565b005b34801561047357600080fd5b5061047c611a0c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ca57600080fd5b5061051a600480360360408110156104e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611a32565b6040518082815260200191505060405180910390f35b34801561053c57600080fd5b5061057f6004803603602081101561055357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a96565b604051808215151515815260200191505060405180910390f35b3480156105a557600080fd5b506105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae5565b005b3480156105f657600080fd5b506106436004803603604081101561060d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b83565b005b6106876004803603602081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc6565b005b34801561069557600080fd5b506106c5600480360360208110156106ac57600080fd5b81019080803560ff169060200190929190505050611cd3565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b34801561071a57600080fd5b5061075d6004803603602081101561073157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d17565b005b34801561076b57600080fd5b506107bb6004803603604081101561078257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611db5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61082c6004803603602081101561081357600080fd5b81019080803560ff169060200190929190505050611f68565b005b34801561083a57600080fd5b5061088a6004803603604081101561085157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506126c8565b604051808215151515815260200191505060405180910390f35b3480156108b057600080fd5b506108b9612739565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561090757600080fd5b5061091061275f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095e57600080fd5b506109a16004803603602081101561097557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612785565b604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b3480156109fd57600080fd5b50610a4060048036036020811015610a1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127cf565b005b348015610a4e57600080fd5b50610a5761286d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa557600080fd5b50610ad560048036036020811015610abc57600080fd5b81019080803560ff169060200190929190505050612893565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001848152602001838103835286818151815260200191508051906020019060200280838360005b83811015610b54578082015181840152602081019050610b39565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015610b96578082015181840152602081019050610b7b565b50505050905001965050505050505060405180910390f35b348015610bba57600080fd5b50610c0a60048036036040811015610bd157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050612a4b565b604051808215151515815260200191505060405180910390f35b348015610c3057600080fd5b50610c6060048036036020811015610c4757600080fd5b81019080803560ff169060200190929190505050612abc565b6040518082815260200191505060405180910390f35b348015610c8257600080fd5b50610cd960048036036060811015610c9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612ad4565b005b67016345785d8a00003414610d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f726567697374726174696f6e20636f737420302e31000000000000000000000081525060200191505060405180910390fd5b610d6182611a96565b15610dd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f757365722065786973747300000000000000000000000000000000000000000081525060200191505060405180910390fd5b610ddd81611a96565b610e4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7265666572726572206e6f74206578697374730000000000000000000000000081525060200191505060405180910390fd5b6000823b905060008163ffffffff1614610ed1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f63616e6e6f74206265206120636f6e747261637400000000000000000000000081525060200191505060405180910390fd5b610ed9614755565b604051806060016040528060005481526020018473ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015590505083600860008054815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000600160ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000808154809291906001019190505550600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008154809291906001019190505550600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f309bb360e8b69c23937ccc5fb01f9aeeead1c95a99604e175113ff82f2b1723a600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546040518082815260200191505060405180910390a46111c98484600161346b565b6002600360056000600160ff1660ff1681526020019081526020016000205402816111f057fe5b04600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156112b257600080fd5b505afa1580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b8101908080519060200190929190505050106114fb57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8560056000600160ff1660ff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113b557600080fd5b505af11580156113c9573d6000803e3d6000fd5b505050506040513d60208110156113df57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84600260056000600160ff1660ff168152602001908152602001600020548161145457fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114be57600080fd5b505af11580156114d2573d6000803e3d6000fd5b505050506040513d60208110156114e857600080fd5b8101908080519060200190929190505050505b50505050565b600060148201519050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461156957600080fd5b60008190506000600190505b600c8160ff16116117cc57600060608060008573ffffffffffffffffffffffffffffffffffffffff1663ccf19b31866040518263ffffffff1660e01b8152600401808260ff1660ff16815260200191505060006040518083038186803b1580156115de57600080fd5b505afa1580156115f2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250608081101561161c57600080fd5b8101908080519060200190929190805164010000000081111561163e57600080fd5b8281019050602081018481111561165457600080fd5b815185602082028301116401000000008211171561167157600080fd5b5050929190602001805164010000000081111561168d57600080fd5b828101905060208101848111156116a357600080fd5b81518560208202830111640100000000821117156116c057600080fd5b505092919060200180519060200190929190505050935093509350935083600660008760ff1660ff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660008760ff1660ff168152602001908152602001600020600101908051906020019061176892919061478c565b5081600660008760ff1660ff168152602001908152602001600020600201908051906020019061179992919061478c565b5080600660008760ff1660ff16815260200190815260200160002060030181905550505050508080600101915050611575565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c81565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118b557600080fd5b6118be82611a96565b611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f75736572206e6f7420657869737473000000000000000000000000000000000081525060200191505060405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008260ff1660ff16815260200190815260200160002060009054906101000a900460ff1615600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008360ff1660ff16815260200190815260200160002054905092915050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414159050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b3f57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bdd57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c8657600080fd5b505af1158015611c9a573d6000803e3d6000fd5b505050506040513d6020811015611cb057600080fd5b8101908080519060200190929190505050505050565b611cd03382610cdb565b50565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905082565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d7157600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005b600115611f615760076000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060009054906101000a900460ff1615611ef757600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611f62565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250611db8565b5b92915050565b611f7133611a96565b611fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061485a6023913960400191505060405180910390fd5b600560008260ff1660ff168152602001908152602001600020543414612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c69642070726963650000000000000000000000000000000000000081525060200191505060405180910390fd5b60018160ff1611801561206e5750600c60ff168160ff1611155b6120e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c6964206c6576656c0000000000000000000000000000000000000081525060200191505060405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6c6576656c20616c72656164792061637469766174656400000000000000000081525060200191505060405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006001830360ff1660ff16815260200190815260200160002060009054906101000a900460ff161561229f576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006001840360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600061231d3383611db5565b905061232a33828461346b565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff32f53b11fbb7739b01829cd03cb1b237493aaa124e00423aeaf599841f91a7584604051808260ff1660ff16815260200191505060405180910390a360026003600560008560ff1660ff1681526020019081526020016000205402816123bb57fe5b04600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561247d57600080fd5b505afa158015612491573d6000803e3d6000fd5b505050506040513d60208110156124a757600080fd5b8101908080519060200190929190505050106126c457600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600560008660ff1660ff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561257f57600080fd5b505af1158015612593573d6000803e3d6000fd5b505050506040513d60208110156125a957600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb826002600560008760ff1660ff168152602001908152602001600020548161261d57fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561268757600080fd5b505af115801561269b573d6000803e3d6000fd5b505050506040513d60208110156126b157600080fd5b8101908080519060200190929190505050505b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154905083565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461282957600080fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000600660008660ff1660ff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660008760ff1660ff168152602001908152602001600020600101600660008860ff1660ff168152602001908152602001600020600201600660008960ff1660ff16815260200190815260200160002060030154828054806020026020016040519081016040528092919081815260200182805480156129ad57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612963575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015612a3557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116129eb575b5050505050915093509350935093509193509193565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008360ff1660ff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60056020528060005260406000206000915090505481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b2e57600080fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b7957600080fd5b505afa158015612b8d573d6000803e3d6000fd5b505050506040513d6020811015612ba357600080fd5b8101908080519060200190929190505050600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b158015612c3a57600080fd5b505afa158015612c4e573d6000803e3d6000fd5b505050506040513d6020811015612c6457600080fd5b8101908080519060200190929190505050600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cfb57600080fd5b505afa158015612d0f573d6000803e3d6000fd5b505050506040513d6020811015612d2557600080fd5b8101908080519060200190929190505050600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663bf3c41f86040518163ffffffff1660e01b815260040160206040518083038186803b158015612dbc57600080fd5b505afa158015612dd0573d6000803e3d6000fd5b505050506040513d6020811015612de657600080fd5b8101908080519060200190929190505050600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001820160008190555060008390505b8281116134645760008273ffffffffffffffffffffffffffffffffffffffff16632a2d0c47836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612ea157600080fd5b505afa158015612eb5573d6000803e3d6000fd5b505050506040513d6020811015612ecb57600080fd5b8101908080519060200190929190505050905060008060008573ffffffffffffffffffffffffffffffffffffffff1663a87430ba856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060606040518083038186803b158015612f6057600080fd5b505afa158015612f74573d6000803e3d6000fd5b505050506040513d6060811015612f8a57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050925092509250612fbd614755565b60405180606001604052808581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201559050506000600190505b600c8160ff16116133ff576003871415613192576001600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506133f2565b60008873ffffffffffffffffffffffffffffffffffffffff166387d84e9f88846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060206040518083038186803b15801561321f57600080fd5b505afa158015613233573d6000803e3d6000fd5b505050506040513d602081101561324957600080fd5b8101908080519060200190929190505050905080600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008460ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508873ffffffffffffffffffffffffffffffffffffffff16634a6e187088846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff1681526020019250505060206040518083038186803b15801561335857600080fd5b505afa15801561336c573d6000803e3d6000fd5b505050506040513d602081101561338257600080fd5b8101908080519060200190929190505050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff16815260200190815260200160002081905550505b8080600101915050613095565b50846008600088815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050508080600101915050612e47565b5050505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16613544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f3530302e205265666572726572206c6576656c20697320696e6163746976650081525060200191505060405180910390fd5b60066002600560008460ff1660ff168152602001908152602001600020548161356957fe5b04600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff16815260200190815260200160002054816135cb57fe5b06106136c857600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006001830160ff1660ff16815260200190815260200160002060009054906101000a900460ff1615801561364f5750600c60ff168160ff1614155b156136c7576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008360ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6002600660008360ff1660ff168152602001908152602001600020600101805490501015613c6d57600660008260ff1660ff1681526020019081526020016000206001018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc33ed40cea88a5a8a40cc428a4c5a17a2b6174dc640a90269fe3dcc60d7735dd83600660008660ff1660ff16815260200190815260200160002060010180549050604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390a381600660008360ff1660ff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561398557600560008260ff1660ff1681526020019081526020016000205460076000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008360ff1660ff16815260200190815260200160002060008282540192505081905550613980828483600560008660ff1660ff168152602001908152602001600020546144b6565b6144b1565b600060646014600560008560ff1660ff1681526020019081526020016000205402816139ad57fe5b049050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050613a9157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015613a8a573d6000803e3d6000fd5b50506144b1565b60006064601e600560008660ff1660ff168152602001908152602001600020540281613ab957fe5b049050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050613b9e57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015613b96573d6000803e3d6000fd5b5050506144b1565b6000613baa8685611db5565b90506002600560008660ff1660ff1681526020019081526020016000205481613bcf57fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008660ff1660ff16815260200190815260200160002060008282540192505081905550613c658187866002600560008a60ff1660ff1681526020019081526020016000205481613c5f57fe5b046144b6565b5050506144b1565b600660008260ff1660ff1681526020019081526020016000206002018390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600660008360ff1660ff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc33ed40cea88a5a8a40cc428a4c5a17a2b6174dc640a90269fe3dcc60d7735dd836002600660008760ff1660ff1681526020019081526020016000206002018054905001604051808360ff1660ff1681526020018260ff1660ff1681526020019250505060405180910390a36001600660008360ff1660ff1681526020019081526020016000206002018054905014156140b4576000613e178483611db5565b90506002600560008460ff1660ff1681526020019081526020016000205481613e3c57fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff16815260200190815260200160002060008282540192505081905550613ed28185846002600560008860ff1660ff1681526020019081526020016000205481613ecc57fe5b046144b6565b600060646014600560008660ff1660ff168152602001908152602001600020540281613efa57fe5b049050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050613fdf57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015613fd7573d6000803e3d6000fd5b5050506144b1565b6000613feb8385611db5565b90506064601e600560008760ff1660ff16815260200190815260200160002054028161401357fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008660ff1660ff168152602001908152602001600020600082825401925050819055506140ac8187866064601e600560008b60ff1660ff1681526020019081526020016000205402816140a657fe5b046144b6565b5050506144b1565b6004600660008360ff1660ff1681526020019081526020016000206002018054905014156141cb57600660008260ff1660ff1681526020019081526020016000206003016000815480929190600101919050555060006040519080825280602002602001820160405280156141385781602001602082028038833980820191505090505b50600660008360ff1660ff168152602001908152602001600020600101908051906020019061416892919061478c565b5060006040519080825280602002602001820160405280156141995781602001602082028038833980820191505090505b50600660008360ff1660ff16815260200190815260200160002060020190805190602001906141c992919061478c565b505b60006141d78483611db5565b90506002600560008460ff1660ff16815260200190815260200160002054816141fc57fe5b04600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160008460ff1660ff168152602001908152602001600020600082825401925050819055506142928185846002600560008860ff1660ff168152602001908152602001600020548161428c57fe5b046144b6565b600060646014600560008660ff1660ff1681526020019081526020016000205402816142ba57fe5b049050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061439f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015614397573d6000803e3d6000fd5b5050506144b1565b60006064601e600560008760ff1660ff1681526020019081526020016000205402816143c757fe5b049050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506144ad57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f193505050501580156144a4573d6000803e3d6000fd5b505050506144b1565b5050505b505050565b6000806144c48686866145e1565b915091508173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050614566578173ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561455e573d6000803e3d6000fd5b5050506145db565b80156145d8578173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f396aba16adb88a08463b257ff8c234fb4b91a9f6f0d0b1a6e842c8239b10c0a586604051808260ff1660ff16815260200191505060405180910390a35b50505b50505050565b600080600085905060005b60011561474a57600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008660ff1660ff16815260200190815260200160002060009054906101000a900460ff1615614738578573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fe4c390745de94e576db58e5b18db9b14f1185dd2fe6204671461ca8bd05c520187604051808260ff1660ff16815260200191505060405180910390a360019050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150614745565b818193509350505061474d565b6145ec565b50505b935093915050565b604051806060016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b828054828255906000526020600020908101928215614805579160200282015b828111156148045782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906147ac565b5b5090506148129190614816565b5090565b61485691905b8082111561485257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161481c565b5090565b9056fe75736572206973206e6f74206578697374732e2052656769737465722066697273742ea165627a7a7230582050792bbacd464af1629ff7afeeb78668579315d01bad71ef5d1147e7c1b4b5a60029
Deployed Bytecode Sourcemap
60:12889:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3713:1;3694:8;;:15;;:20;3690:91;;;3738:31;3751:10;3763:5;;;;;;;;;;;3738:12;:31::i;:::-;3731:38;;3690:91;3793:50;3806:10;3818:24;3833:8;;3818:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3818:24:0;;;;;;:14;:24::i;:::-;3793:12;:50::i;:::-;3651:200;60:12889;1743:616;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1743:616:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1743:616:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;596:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;596:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;490:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;490:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;820:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;820:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;820:43:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1380:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1380:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;536:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;536:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12592:213;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12592:213:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12592:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;622:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;622:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11868:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11868:122:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11868:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11306:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11306:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11306:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12394:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12394:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12394:95:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;12813:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12813:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12813:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3859:127;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3859:127:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;733:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;733:36:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;733:36:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12303:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12303:83:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12303:83:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;9958:338;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9958:338:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9958:338:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5272:999;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5272:999:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;11590:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11590:138:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11590:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;569:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;569:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1351;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1351:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;776:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;776:37:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;776:37:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12497:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12497:87:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12497:87:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;651:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;651:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11998:297;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11998:297:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11998:297:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11998:297:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11998:297:0;;;;;;;;;;;;;;;;;;;;;11736:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11736:124:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11736:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;686:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;686:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;686:40:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2367:1276;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2367:1276:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2367:1276:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3994:1270;4102:9;4089;:22;4081:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4157:25;4170:11;4157:12;:25::i;:::-;4156:26;4148:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4217:29;4230:15;4217:12;:29::i;:::-;4209:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4283:11;4349;4337:24;4329:32;;4398:1;4390:4;:9;;;4382:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4437:16;;:::i;:::-;4456:124;;;;;;;;4481:10;;4456:124;;;;4517:15;4456:124;;;;;;4563:1;4456:124;;;4437:143;;4614:4;4593:5;:18;4599:11;4593:18;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4655:11;4629;:23;4641:10;;4629:23;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4718:4;4679:5;:18;4685:11;4679:18;;;;;;;;;;;;;;;:33;;:36;4713:1;4679:36;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;4735:10;;:12;;;;;;;;;;;;;4760:5;:22;4766:15;4760:22;;;;;;;;;;;;;;;:36;;;:38;;;;;;;;;;;;;4859:5;:18;4865:11;4859:18;;;;;;;;;;;;;;;:21;;;4842:15;4816:92;;4829:11;4816:92;;;4882:5;:22;4888:15;4882:22;;;;;;;;;;;;;;;:25;;;4816:92;;;;;;;;;;;;;;;;;;4921:56;4938:11;4951:15;4974:1;4921:16;:56::i;:::-;5065:1;5061;5038:10;:20;5055:1;5038:20;;;;;;;;;;;;;;;;:24;:28;;;;;;5004:11;;;;;;;;;;;4992:34;;;5027:5;;;;;;;;;;;4992:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4992:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4992:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4992:41:0;;;;;;;;;;;;;;;;:75;4988:267;;5096:11;;;;;;;;;;;5084:33;;;5118:11;5131:10;:20;5148:1;5131:20;;;;;;;;;;;;;;;;5084:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5084:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5084:68:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5084:68:0;;;;;;;;;;;;;;;;;5179:11;;;;;;;;;;;5167:33;;;5201:15;5241:1;5218:10;:20;5235:1;5218:20;;;;;;;;;;;;;;;;:24;;;;;;5167:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5167:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5167:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5167:76:0;;;;;;;;;;;;;;;;;4988:267;3994:1270;;;;:::o;11424:158::-;11488:12;11560:2;11555:3;11551:12;11545:19;11537:27;;11522:53;;;:::o;1743:616::-;1461:5;;;;;;;;;;;1447:19;;:10;:19;;;1439:28;;;;;;1806:13;1845:7;1806:49;;1871:7;1881:1;1871:11;;1866:486;1889:2;1884:1;:7;;;1866:486;;1914:23;1939:36;1991:37;2043:18;2065:6;:18;;;2084:1;2065:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2065:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2065:21:0;;;;;;39:16:-1;36:1;17:17;2:54;2065:21:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:3;8;5:12;2:2;;;30:1;27;20:12;2:2;2065:21:0;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;2065:21:0;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;2065:21:0;;;;;;;;;;;;;;;;;1913:173;;;;;;;;2131:15;2101:8;:11;2110:1;2101:11;;;;;;;;;;;;;;;:27;;;:45;;;;;;;;;;;;;;;;;;2195:19;2161:8;:11;2170:1;2161:11;;;;;;;;;;;;;;;:31;;:53;;;;;;;;;;;;:::i;:::-;;2264:20;2229:8;:11;2238:1;2229:11;;;;;;;;;;;;;;;:32;;:55;;;;;;;;;;;;:::i;:::-;;2327:13;2299:8;:11;2308:1;2299:11;;;;;;;;;;;;;;;:25;;:41;;;;1866:486;;;;1893:3;;;;;;;1866:486;;;;1478:1;1743:616;:::o;596:19::-;;;;;;;;;;;;;:::o;490:37::-;525:2;490:37;:::o;820:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;1380:20::-;;;;;;;;;;;;;:::o;536:26::-;;;;:::o;12592:213::-;1461:5;;;;;;;;;;;1447:19;;:10;:19;;;1439:28;;;;;;12673:19;12686:5;12673:12;:19::i;:::-;12665:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12762:5;:12;12768:5;12762:12;;;;;;;;;;;;;;;:27;;:35;12790:6;12762:35;;;;;;;;;;;;;;;;;;;;;;;;;12761:36;12723:5;:12;12729:5;12723:12;;;;;;;;;;;;;;;:27;;:35;12751:6;12723:35;;;;;;;;;;;;;;;;:74;;;;;;;;;;;;;;;;;;12592:213;;:::o;622:22::-;;;;;;;;;;;;;:::o;11868:122::-;11933:4;11956:5;:12;11962:5;11956:12;;;;;;;;;;;;;;;:19;;:26;11976:5;11956:26;;;;;;;;;;;;;;;;11949:33;;11868:122;;;;:::o;11306:110::-;11363:4;11406:1;11388:5;:11;11394:4;11388:11;;;;;;;;;;;;;;;:14;;;:19;;11380:28;;11306:110;;;:::o;12394:95::-;1461:5;;;;;;;;;;;1447:19;;:10;:19;;;1439:28;;;;;;12473:8;12463:7;;:18;;;;;;;;;;;;;;;;;;12394:95;:::o;12813:133::-;1461:5;;;;;;;;;;;1447:19;;:10;:19;;;1439:28;;;;;;12902:11;;;;;;;;;;;12890:33;;;12924:5;12931:6;12890:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12890:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12890:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12890:48:0;;;;;;;;;;;;;;;;;12813:133;;:::o;3859:127::-;3937:41;3950:10;3962:15;3937:12;:41::i;:::-;3859:127;:::o;733:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12303:83::-;1461:5;;;;;;;;;;;1447:19;;:10;:19;;;1439:28;;;;;;12373:5;12366:4;;:12;;;;;;;;;;;;;;;;;;12303:83;:::o;9958:338::-;10041:7;10061:228;10068:4;10061:228;;;10093:5;:34;10099:5;:18;10105:11;10099:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;10093:34;;;;;;;;;;;;;;;:49;;:56;10143:5;10093:56;;;;;;;;;;;;;;;;;;;;;;;;;10089:131;;;10177:5;:18;10183:11;10177:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;10170:34;;;;10089:131;10250:5;:18;10256:11;10250:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;10236:41;;10061:228;;;9958:338;;;;;:::o;5272:999::-;5342:24;5355:10;5342:12;:24::i;:::-;5334:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5438:10;:17;5449:5;5438:17;;;;;;;;;;;;;;;;5425:9;:30;5417:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5500:1;5492:5;:9;;;:32;;;;;525:2;5505:19;;:5;:19;;;;5492:32;5484:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:5;:17;5568:10;5562:17;;;;;;;;;;;;;;;:32;;:39;5595:5;5562:39;;;;;;;;;;;;;;;;;;;;;;;;;5561:40;5553:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5646:5;:17;5652:10;5646:17;;;;;;;;;;;;;;;:25;;:36;5680:1;5672:5;:9;5646:36;;;;;;;;;;;;;;;;;;;;;;;;;5642:113;;;5738:5;5699;:17;5705:10;5699:17;;;;;;;;;;;;;;;:25;;:36;5733:1;5725:5;:9;5699:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;5642:113;5807:4;5765:5;:17;5771:10;5765:17;;;;;;;;;;;;;;;:32;;:39;5798:5;5765:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;5822:20;5845:37;5864:10;5876:5;5845:18;:37::i;:::-;5822:60;;5893:49;5910:10;5922:12;5936:5;5893:16;:49::i;:::-;5979:12;5958:41;;5967:10;5958:41;;;5993:5;5958:41;;;;;;;;;;;;;;;;;;;;;;6084:1;6080;6060:10;:17;6071:5;6060:17;;;;;;;;;;;;;;;;:21;:25;;;;;;6026:11;;;;;;;;;;;6014:34;;;6049:5;;;;;;;;;;;6014:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6014:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6014:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6014:41:0;;;;;;;;;;;;;;;;:72;6010:254;;6115:11;;;;;;;;;;;6103:33;;;6137:10;6149;:17;6160:5;6149:17;;;;;;;;;;;;;;;;6103:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6103:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6103:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6103:64:0;;;;;;;;;;;;;;;;;6194:11;;;;;;;;;;;6182:33;;;6216:12;6250:1;6230:10;:17;6241:5;6230:17;;;;;;;;;;;;;;;;:21;;;;;;6182:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6182:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6182:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6182:70:0;;;;;;;;;;;;;;;;;6010:254;5272:999;;:::o;11590:138::-;11663:4;11686:5;:12;11692:5;11686:12;;;;;;;;;;;;;;;:27;;:34;11714:5;11686:34;;;;;;;;;;;;;;;;;;;;;;;;;11679:41;;11590:138;;;;:::o;569:20::-;;;;;;;;;;;;;:::o;1351:::-;;;;;;;;;;;;;:::o;776:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12497:87::-;1461:5;;;;;;;;;;;1447:19;;:10;:19;;;1439:28;;;;;;12570:6;12562:5;;:14;;;;;;;;;;;;;;;;;;12497:87;:::o;651:26::-;;;;;;;;;;;;;:::o;11998:297::-;12053:7;12062:16;12080;12098:4;12122:8;:15;12131:5;12122:15;;;;;;;;;;;;;;;:31;;;;;;;;;;;;12164:8;:15;12173:5;12164:15;;;;;;;;;;;;;;;:35;;12210:8;:15;12219:5;12210:15;;;;;;;;;;;;;;;:36;;12257:8;:15;12266:5;12257:15;;;;;;;;;;;;;;;:29;;;12114:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11998:297;;;;;:::o;11736:124::-;11802:4;11825:5;:12;11831:5;11825:12;;;;;;;;;;;;;;;:20;;:27;11846:5;11825:27;;;;;;;;;;;;;;;;;;;;;;;;;11818:34;;11736:124;;;;:::o;686:40::-;;;;;;;;;;;;;;;;;:::o;2367:1276::-;1461:5;;;;;;;;;;;1447:19;;:10;:19;;;1439:28;;;;;;2456:13;2495:7;2456:49;;2524:6;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2524:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2524:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2524:14:0;;;;;;;;;;;;;;;;2516:5;;:22;;;;;;;;;;;;;;;;;;2559:6;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2559:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2559:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2559:16:0;;;;;;;;;;;;;;;;2549:7;;:26;;;;;;;;;;;;;;;;;;2593:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2593:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2593:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2593:13:0;;;;;;;;;;;;;;;;2586:4;;:20;;;;;;;;;;;;;;;;;;2631:6;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2631:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2631:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2631:20:0;;;;;;;;;;;;;;;;2617:11;;:34;;;;;;;;;;;;;;;;;;2681:1;2675:3;:7;2662:10;:20;;;;2700:6;2709:5;2700:14;;2695:941;2721:3;2716:1;:8;2695:941;;2746:19;2768:6;:18;;;2787:1;2768:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2768:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2768:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2768:21:0;;;;;;;;;;;;;;;;2746:43;;2805:7;2813:16;2830:18;2852:6;:12;;;2865:11;2852:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2852:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2852:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2852:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2804:73;;;;;;2892:16;;:::i;:::-;2911:137;;;;;;;;2940:2;2911:137;;;;2972:8;2911:137;;;;;;3015:13;2911:137;;;2892:156;;3084:4;3063:5;:18;3069:11;3063:18;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3110:7;3120:1;3110:11;;3105:475;3128:2;3123:1;:7;;;3105:475;;3165:1;3160;:6;3156:409;;;3223:4;3191:5;:18;3197:11;3191:18;;;;;;;;;;;;;;;:26;;:29;3218:1;3191:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;3289:5;3250;:18;3256:11;3250:18;;;;;;;;;;;;;;;:33;;:36;3284:1;3250:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;3156:409;;;3343:11;3357:6;:21;;;3379:11;3392:1;3357:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3357:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3357:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3357:37:0;;;;;;;;;;;;;;;;3343:51;;3456:6;3417:5;:18;3423:11;3417:18;;;;;;;;;;;;;;;:33;;:36;3451:1;3417:36;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;3516:6;:13;;;3530:11;3543:1;3516:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3516:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3516:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3516:29:0;;;;;;;;;;;;;;;;3485:5;:18;3491:11;3485:18;;;;;;;;;;;;;;;:25;;:28;3511:1;3485:28;;;;;;;;;;;;;;;:60;;;;3156:409;;3132:3;;;;;;;3105:475;;;;3613:11;3596;:14;3608:1;3596:14;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2695:941;;;;;2726:3;;;;;;;2695:941;;;;1478:1;2367:1276;;;:::o;6279:3671::-;6391:5;:22;6397:15;6391:22;;;;;;;;;;;;;;;:37;;:44;6429:5;6391:44;;;;;;;;;;;;;;;;;;;;;;;;;6383:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6556:1;6549;6529:10;:17;6540:5;6529:17;;;;;;;;;;;;;;;;:21;;;;;;6489:5;:22;6495:15;6489:22;;;;;;;;;;;;;;;:29;;:36;6519:5;6489:36;;;;;;;;;;;;;;;;:62;;;;;;6488:69;6484:258;;6579:5;:22;6585:15;6579:22;;;;;;;;;;;;;;;:37;;:48;6625:1;6617:5;:9;6579:48;;;;;;;;;;;;;;;;;;;;;;;;;6578:49;:72;;;;;525:2;6631:19;;:5;:19;;;;6578:72;6574:157;;;6711:4;6671:5;:22;6677:15;6671:22;;;;;;;;;;;;;;;:30;;:37;6702:5;6671:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;6574:157;6484:258;6801:1;6756:8;:15;6765:5;6756:15;;;;;;;;;;;;;;;:35;;:42;;;;:46;6752:1234;;;6819:8;:15;6828:5;6819:15;;;;;;;;;;;;;;;:35;;6860:11;6819:53;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;6819:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6918:15;6892:100;;6905:11;6892:100;;;6935:5;6948:8;:15;6957:5;6948:15;;;;;;;;;;;;;;;:35;;:42;;;;6892:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7043:15;7009:8;:15;7018:5;7009:15;;;;;;;;;;;;;;;:31;;;:49;;;;;;;;;;;;;;;;;;7096:5;;;;;;;;;;;7077:24;;:15;:24;;;7073:210;;;7152:10;:17;7163:5;7152:17;;;;;;;;;;;;;;;;7122:5;:12;7128:5;;;;;;;;;;;7122:12;;;;;;;;;;;;;;;:19;;:26;7142:5;7122:26;;;;;;;;;;;;;;;;:47;;;;;;;;;;;7195:72;7212:15;7229:11;7242:5;7249:10;:17;7260:5;7249:17;;;;;;;;;;;;;;;;7195:16;:72::i;:::-;7188:79;;7073:210;7299:15;7342:3;7337:2;7317:10;:17;7328:5;7317:17;;;;;;;;;;;;;;;;:22;:28;;;;;;7299:46;;7381:4;;;;;;;;;;;7365:27;;:39;7393:10;7365:39;;;;;;;;;;;;;;;;;;;;;;;7360:142;;7448:4;;;;;;;;;;;7432:31;;:54;7472:4;7464:21;;;7432:54;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7432:54:0;7425:61;;;7360:142;7516:18;7562:3;7557:2;7537:10;:17;7548:5;7537:17;;;;;;;;;;;;;;;;:22;:28;;;;;;7516:49;;7601:7;;;;;;;;;;;7585:30;;:45;7616:13;7585:45;;;;;;;;;;;;;;;;;;;;;;;7580:151;;7674:7;;;;;;;;;;;7658:34;;:57;7701:4;7693:21;;;7658:57;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7658:57:0;7651:64;;;;7580:151;7745:20;7768:38;7787:11;7800:5;7768:18;:38::i;:::-;7745:61;;7878:1;7858:10;:17;7869:5;7858:17;;;;;;;;;;;;;;;;:21;;;;;;7821:5;:19;7827:12;7821:19;;;;;;;;;;;;;;;:26;;:33;7848:5;7821:33;;;;;;;;;;;;;;;;:58;;;;;;;;;;;7901:73;7918:12;7932:11;7945:5;7972:1;7952:10;:17;7963:5;7952:17;;;;;;;;;;;;;;;;:21;;;;;;7901:16;:73::i;:::-;7894:80;;;;;6752:1234;7996:8;:15;8005:5;7996:15;;;;;;;;;;;;;;;:36;;8038:11;7996:54;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;7996:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8095:15;8061:8;:15;8070:5;8061:15;;;;;;;;;;;;;;;:31;;;:49;;;;;;;;;;;;;;;;;;8152:15;8126:105;;8139:11;8126:105;;;8169:5;8228:1;8182:8;:15;8191:5;8182:15;;;;;;;;;;;;;;;:36;;:43;;;;:47;8126:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8295:1;8248:8;:15;8257:5;8248:15;;;;;;;;;;;;;;;:36;;:43;;;;:48;8244:785;;;8313:20;8336:38;8355:11;8368:5;8336:18;:38::i;:::-;8313:61;;8446:1;8426:10;:17;8437:5;8426:17;;;;;;;;;;;;;;;;:21;;;;;;8389:5;:19;8395:12;8389:19;;;;;;;;;;;;;;;:26;;:33;8416:5;8389:33;;;;;;;;;;;;;;;;:58;;;;;;;;;;;8462:73;8479:12;8493:11;8506:5;8533:1;8513:10;:17;8524:5;8513:17;;;;;;;;;;;;;;;;:21;;;;;;8462:16;:73::i;:::-;8550:15;8593:3;8588:2;8568:10;:17;8579:5;8568:17;;;;;;;;;;;;;;;;:22;:28;;;;;;8550:46;;8632:4;;;;;;;;;;;8616:27;;:39;8644:10;8616:39;;;;;;;;;;;;;;;;;;;;;;;8611:142;;8699:4;;;;;;;;;;;8683:31;;:54;8723:4;8715:21;;;8683:54;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8683:54:0;8676:61;;;;8611:142;8767:22;8792:39;8811:12;8825:5;8792:18;:39::i;:::-;8767:64;;8910:3;8905:2;8885:10;:17;8896:5;8885:17;;;;;;;;;;;;;;;;:22;:28;;;;;;8846:5;:21;8852:14;8846:21;;;;;;;;;;;;;;;:28;;:35;8875:5;8846:35;;;;;;;;;;;;;;;;:67;;;;;;;;;;;8935:82;8952:14;8968:11;8981:5;9013:3;9008:2;8988:10;:17;8999:5;8988:17;;;;;;;;;;;;;;;;:22;:28;;;;;;8935:16;:82::i;:::-;8928:89;;;;;8244:785;9092:1;9045:8;:15;9054:5;9045:15;;;;;;;;;;;;;;;:36;;:43;;;;:48;9041:263;;;9120:8;:15;9129:5;9120:15;;;;;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;9220:1;9206:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9206:16:0;;;;9168:8;:15;9177:5;9168:15;;;;;;;;;;;;;;;:35;;:54;;;;;;;;;;;;:::i;:::-;;9290:1;9276:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9276:16:0;;;;9237:8;:15;9246:5;9237:15;;;;;;;;;;;;;;;:36;;:55;;;;;;;;;;;;:::i;:::-;;9041:263;9314:20;9337:38;9356:11;9369:5;9337:18;:38::i;:::-;9314:61;;9443:1;9423:10;:17;9434:5;9423:17;;;;;;;;;;;;;;;;:21;;;;;;9386:5;:19;9392:12;9386:19;;;;;;;;;;;;;;;:26;;:33;9413:5;9386:33;;;;;;;;;;;;;;;;:58;;;;;;;;;;;9455:73;9472:12;9486:11;9499:5;9526:1;9506:10;:17;9517:5;9506:17;;;;;;;;;;;;;;;;:21;;;;;;9455:16;:73::i;:::-;9539:15;9582:3;9577:2;9557:10;:17;9568:5;9557:17;;;;;;;;;;;;;;;;:22;:28;;;;;;9539:46;;9617:4;;;;;;;;;;;9601:27;;:39;9629:10;9601:39;;;;;;;;;;;;;;;;;;;;;;;9596:134;;9680:4;;;;;;;;;;;9664:31;;:54;9704:4;9696:21;;;9664:54;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9664:54:0;9657:61;;;;9596:134;9740:18;9786:3;9781:2;9761:10;:17;9772:5;9761:17;;;;;;;;;;;;;;;;:22;:28;;;;;;9740:49;;9821:7;;;;;;;;;;;9805:30;;:45;9836:13;9805:45;;;;;;;;;;;;;;;;;;;;;;;9800:143;;9890:7;;;;;;;;;;;9874:34;;:57;9917:4;9909:21;;;9874:57;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9874:57:0;9867:64;;;;;9800:143;6279:3671;;;;;;;:::o;10836:462::-;10944:16;10962:21;10987:42;11003:11;11016:5;11023;10987:15;:42::i;:::-;10943:86;;;;11063:8;11047:31;;:39;11079:6;11047:39;;;;;;;;;;;;;;;;;;;;;;;11042:138;;11126:8;11110:35;;:58;11154:4;11146:21;;;11110:58;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11110:58:0;11103:65;;;;11042:138;11196:16;11192:99;;;11263:8;11234:45;;11256:5;11234:45;;;11273:5;11234:45;;;;;;;;;;;;;;;;;;;;;;11192:99;10836:462;;;;;;;:::o;10304:524::-;10395:7;10404:4;10421:16;10440:11;10421:30;;10462:21;10494:327;10501:4;10494:327;;;10526:5;:15;10532:8;10526:15;;;;;;;;;;;;;;;:23;;:30;10550:5;10526:30;;;;;;;;;;;;;;;;;;;;;;;;;10522:288;;;10609:5;10582:40;;10599:8;10582:40;;;10616:5;10582:40;;;;;;;;;;;;;;;;;;;;;;10660:4;10641:23;;10694:5;:15;10700:8;10694:15;;;;;;;;;;;;;;;:24;;;;;;;;;;;;10683:35;;10522:288;;;10767:8;10777:16;10759:35;;;;;;;;10522:288;10494:327;;;10304:524;;;;;;;;;:::o;60:12889::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://50792bbacd464af1629ff7afeeb78668579315d01bad71ef5d1147e7c1b4b5a6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.