Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 34 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 10924639 | 1994 days ago | IN | 0 ETH | 0.00308476 | ||||
| Withdraw | 10924636 | 1994 days ago | IN | 0 ETH | 0.0131889 | ||||
| Buy | 10924628 | 1994 days ago | IN | 0.01 ETH | 0.01508212 | ||||
| Sell All Bonds | 10924592 | 1994 days ago | IN | 0 ETH | 0.00936388 | ||||
| Sell All Bonds | 10924420 | 1995 days ago | IN | 0 ETH | 0.01088235 | ||||
| Sell All Bonds | 10924386 | 1995 days ago | IN | 0 ETH | 0.00898426 | ||||
| Buy | 10924301 | 1995 days ago | IN | 0.01 ETH | 0.0199036 | ||||
| Sell Bonds | 10924107 | 1995 days ago | IN | 0 ETH | 0.02103425 | ||||
| Sell All Bonds | 10923942 | 1995 days ago | IN | 0 ETH | 0.0054789 | ||||
| Approve | 10923843 | 1995 days ago | IN | 0 ETH | 0.00289977 | ||||
| Sell Bonds | 10923603 | 1995 days ago | IN | 0 ETH | 0.0138775 | ||||
| Buy | 10923448 | 1995 days ago | IN | 3 ETH | 0.01255293 | ||||
| Sell All Bonds | 10920970 | 1995 days ago | IN | 0 ETH | 0.01834815 | ||||
| Buy | 10920904 | 1995 days ago | IN | 0.6 ETH | 0.03544763 | ||||
| Buy | 10920815 | 1995 days ago | IN | 0.0015 ETH | 0.02864044 | ||||
| Sell Bonds | 10920562 | 1995 days ago | IN | 0 ETH | 0.0325254 | ||||
| Buy | 10920532 | 1995 days ago | IN | 1 ETH | 0.0321216 | ||||
| Sell Bonds | 10920412 | 1995 days ago | IN | 0 ETH | 0.0247642 | ||||
| Buy | 10916260 | 1996 days ago | IN | 0.01 ETH | 0.01710036 | ||||
| Buy | 10913983 | 1996 days ago | IN | 1 ETH | 0.01329893 | ||||
| Buy | 10913326 | 1996 days ago | IN | 0.4 ETH | 0.02190087 | ||||
| Buy | 10912728 | 1996 days ago | IN | 4 ETH | 0.06326334 | ||||
| Buy | 10911369 | 1997 days ago | IN | 0.2 ETH | 0.02337049 | ||||
| Buy | 10911355 | 1997 days ago | IN | 0.4 ETH | 0.04669626 | ||||
| Buy | 10910996 | 1997 days ago | IN | 1 ETH | 0.0098992 |
Latest 11 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 10924636 | 1994 days ago | 4.4455 ETH | ||||
| - | 10924592 | 1994 days ago | 0.00579969 ETH | ||||
| - | 10924420 | 1995 days ago | 0.37653821 ETH | ||||
| - | 10924386 | 1995 days ago | 4.17224085 ETH | ||||
| - | 10924107 | 1995 days ago | 2.43336618 ETH | ||||
| - | 10923942 | 1995 days ago | 3.60530516 ETH | ||||
| - | 10923603 | 1995 days ago | 1.09024425 ETH | ||||
| - | 10920970 | 1995 days ago | 0.58969644 ETH | ||||
| - | 10920562 | 1995 days ago | 0.99938598 ETH | ||||
| - | 10920412 | 1995 days ago | 0.12825749 ETH | ||||
| - | 10888224 | 2000 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PiZZa
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-09-21
*/
pragma solidity ^ 0.6.6;
/*
// ""--.._
|| (_) _ "-._
|| _ (_) '-.
|| (_) __..-'
\\__..--""
*/
contract ColorToken{
mapping(address => uint256) public balances;
mapping(address => uint256) public red;
mapping(address => uint256) public green;
mapping(address => uint256) public blue;
uint public _totalSupply;
mapping(address => mapping(address => uint)) approvals;
event Transfer(
address indexed from,
address indexed to,
uint256 amount,
bytes data
);
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
function addColor(address addr, uint color, uint _red, uint _green, uint _blue) internal {
red[addr] += _red * color;
green[addr] += _green * color;
blue[addr] += _blue * color;
}
function RGB_Ratio() public view returns(uint,uint,uint){
return RGB_Ratio(msg.sender);
}
function RGB_Ratio(address addr) public view returns(uint,uint,uint){
uint coloredWeight = balances[addr];
if (coloredWeight==0){
return (0,0,0);
}
return ( red[addr]/coloredWeight, green[addr]/coloredWeight, blue[addr]/coloredWeight);
}
function RGB_scale(address addr, uint numerator, uint denominator) internal view returns(uint,uint,uint){
return (red[addr] * numerator / denominator, green[addr] * numerator / denominator, blue[addr] * numerator / denominator);
}
// Function that is called when a user or another contract wants to transfer funds.
function transfer(address _to, uint _value, bytes memory _data) public virtual returns (bool) {
if( isContract(_to) ){
return transferToContract(_to, _value, _data);
}else{
return transferToAddress(_to, _value, _data);
}
}
// Standard function transfer similar to ERC20 transfer with no _data.
// Added due to backwards compatibility reasons .
function transfer(address _to, uint _value) public virtual returns (bool) {
//standard function transfer similar to ERC20 transfer with no _data
//added due to backwards compatibility reasons
bytes memory empty;
if(isContract(_to)){
return transferToContract(_to, _value, empty);
}else{
return transferToAddress(_to, _value, empty);
}
}
//function that is called when transaction target is an address
function transferToAddress(address _to, uint _value, bytes memory _data) private returns (bool) {
moveTokens(msg.sender, _to, _value);
emit Transfer(msg.sender, _to, _value, _data);
return true;
}
//function that is called when transaction target is a contract
function transferToContract(address _to, uint _value, bytes memory _data) private returns (bool) {
moveTokens(msg.sender, _to, _value);
ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
receiver.tokenFallback(msg.sender, _value, _data);
emit Transfer(msg.sender, _to, _value, _data);
return true;
}
function moveTokens(address _from, address _to, uint _amount) internal virtual{
(uint red_ratio, uint green_ratio, uint blue_ratio) = RGB_scale( _from, _amount, balances[_from] );
red[_from] -= red_ratio;
green[_from] -= green_ratio;
blue[_from] -= blue_ratio;
red[_to] += red_ratio;
green[_to] += green_ratio;
blue[_to] += blue_ratio;
balances[_from] -= _amount;
balances[_to] += _amount;
}
function allowance(address src, address guy) public view returns (uint) {
return approvals[src][guy];
}
function transferFrom(address src, address dst, uint amount) public returns (bool){
address sender = msg.sender;
require(approvals[src][sender] >= amount);
if (src != sender) {
approvals[src][sender] -= amount;
}
moveTokens(src,dst,amount);
return true;
}
event Approval(address indexed src, address indexed guy, uint amount);
function approve(address guy, uint amount) public returns (bool) {
address sender = msg.sender;
approvals[sender][guy] = amount;
emit Approval( sender, guy, amount );
return true;
}
function isContract(address _addr) public view returns (bool is_contract) {
uint length;
assembly {
//retrieve the size of the code on target address, this needs assembly
length := extcodesize(_addr)
}
if(length>0) {
return true;
}else {
return false;
}
}
}
contract PiZZa is ColorToken{
// scaleFactor is used to convert Ether into bonds and vice-versa: they're of different
// orders of magnitude, hence the need to bridge between the two.
uint256 constant scaleFactor = 0x10000000000000000;
address payable address0 = address(0);
uint256 constant internal tokenPriceInitial_ = 0.0000001 ether;
uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether;
// Typical values that we have to declare.
string constant public name = "Pizza Token";
string constant public symbol = "PiZZa";
uint8 constant public decimals = 18;
mapping(address => uint256) public average_ethSpent;
// For calculating hodl multiplier that factors into resolves minted
mapping(address => uint256) public average_buyInTimeSum;
// Array between each address and their number of resolves being staked.
mapping(address => uint256) public resolveWeight;
// Array between each address and how much Ether has been paid out to it.
// Note that this is scaled by the scaleFactor variable.
mapping(address => int256) public payouts;
// The total number of resolves being staked in this contract
uint256 public dissolvingResolves;
// For calculating the hodl multiplier. Weighted average release time
uint public sumOfInputETH;
uint public sumOfInputTime;
uint public sumOfOutputETH;
uint public sumOfOutputTime;
// Something about invarience.
int256 public earningsOffset;
// Variable tracking how much Ether each token is currently worth// Note that this is scaled by the scaleFactor variable.
uint256 public earningsPerResolve;
//The resolve token contract
Crust public resolveToken;
constructor() public{
resolveToken = new Crust( address(this) );
}
function fluxFee(uint paidAmount) public view returns (uint fee) {
uint totalResolveSupply = resolveToken.totalSupply() - resolveToken.balanceOf( address(0) );
if ( dissolvingResolves == 0 )
return 0;
return paidAmount * ( totalResolveSupply - dissolvingResolves ) / totalResolveSupply * sumOfOutputETH / sumOfInputETH;
}
// Converts the Ether accrued as resolveEarnings back into bonds without having to
// withdraw it first. Saves on gas and potential price spike loss.
event Reinvest( address indexed addr, uint256 reinvested, uint256 dissolved, uint256 bonds, uint256 resolveTax);
function reinvestEarnings(uint amountFromEarnings) public returns(uint,uint){
address sender = msg.sender;
// Retrieve the resolveEarnings associated with the address the request came from.
uint upScaleDivs = (uint)((int256)( earningsPerResolve * resolveWeight[sender] ) - payouts[sender]);
uint totalEarnings = upScaleDivs / scaleFactor;//resolveEarnings(sender);
require(amountFromEarnings <= totalEarnings, "the amount exceeds total earnings");
uint oldWeight = resolveWeight[sender];
resolveWeight[sender] = oldWeight * (totalEarnings - amountFromEarnings) / totalEarnings;
uint weightDiff = oldWeight - resolveWeight[sender];
resolveToken.transfer( address0, weightDiff );
dissolvingResolves -= weightDiff;
// something about invariance
int withdrawnEarnings = (int)(upScaleDivs * amountFromEarnings / totalEarnings) - (int)(weightDiff*earningsPerResolve);
payouts[sender] += withdrawnEarnings;
// Increase the total amount that's been paid out to maintain invariance.
earningsOffset += withdrawnEarnings;
// Assign balance to a new variable.
uint value_ = (uint) (amountFromEarnings);
// If your resolveEarnings are worth less than 1 szabo, abort.
if (value_ < 0.000001 ether)
revert();
// Calculate the fee
uint fee = fluxFee(value_);
// The amount of Ether used to purchase new bonds for the caller
uint numEther = value_ - fee;
//resolve reward tracking stuff
average_ethSpent[sender] += numEther;
average_buyInTimeSum[sender] += now * scaleFactor * numEther;
sumOfInputETH += numEther;
sumOfInputTime += now * scaleFactor * numEther;
// The number of bonds which can be purchased for numEther.
uint createdBonds = ethereumToTokens_(numEther);
uint[] memory RGB = new uint[](3);
(RGB[0], RGB[1], RGB[2]) = RGB_Ratio(sender);
addColor(sender, createdBonds, RGB[0], RGB[1], RGB[2]);
// the variable stoLOGC the amount to be paid to stakers
uint resolveFee;
// Check if we have bonds in existence
if ( dissolvingResolves > 0 ) {
resolveFee = fee * scaleFactor;
// Fee is distributed to all existing resolve stakers before the new bonds are purchased.
// rewardPerResolve is the amount(ETH) gained per resolve token from this purchase.
uint rewardPerResolve = resolveFee / dissolvingResolves;
// The Ether value per token is increased proportionally.
earningsPerResolve += rewardPerResolve;
}
// Add the createdBonds to the total supply.
_totalSupply += createdBonds;
// Assign the bonds to the balance of the buyer.
balances[sender] += createdBonds;
emit Reinvest(sender, value_, weightDiff, createdBonds, resolveFee);
return (createdBonds, weightDiff);
}
// Sells your bonds for Ether
function sellAllBonds() public returns(uint returned_eth, uint returned_resolves, uint initialInput_ETH){
return sell( balanceOf(msg.sender) );
}
function sellBonds(uint amount) public returns(uint returned_eth, uint returned_resolves, uint initialInput_ETH){
uint balance = balanceOf(msg.sender);
require(balance >= amount, "Amount is more than balance");
( returned_eth, returned_resolves, initialInput_ETH ) = sell(amount);
return (returned_eth, returned_resolves, initialInput_ETH);
}
// Big red exit button to pull all of a holder's Ethereum value from the contract
function getMeOutOfHere() public {
sellAllBonds();
withdraw( resolveEarnings(msg.sender) );
}
// Gatekeeper function to check if the amount of Ether being sent isn't too small
function fund() payable public returns(uint createdBonds){
uint[] memory RGB = new uint[](3);
(RGB[0], RGB[1], RGB[2]) = RGB_Ratio(msg.sender);
return buy(msg.sender, RGB[0], RGB[1], RGB[2]);
}
// Calculate the current resolveEarnings associated with the caller address. This is the net result
// of multiplying the number of resolves held by their current value in Ether and subtracting the
// Ether that has already been paid out.
function resolveEarnings(address _owner) public view returns (uint256 amount) {
return (uint256) ((int256)(earningsPerResolve * resolveWeight[_owner]) - payouts[_owner]) / scaleFactor;
}
event Buy( address indexed addr, uint256 spent, uint256 bonds, uint256 resolveTax);
function buy(address addr, uint _red, uint _green, uint _blue) public payable returns(uint createdBonds){
if(_red>1e18) _red = 1e18;
if(_green>1e18) _green = 1e18;
if(_blue>1e18) _blue = 1e18;
// Any transaction of less than 1 szabo is likely to be worth less than the gas used to send it.
if ( msg.value < 0.000001 ether )
revert();
// Calculate the fee
uint fee = fluxFee(msg.value);
// The amount of Ether used to purchase new bonds for the caller.
uint numEther = msg.value - fee;
//resolve reward tracking stuff
uint currentTime = now;
average_ethSpent[addr] += numEther;
average_buyInTimeSum[addr] += currentTime * scaleFactor * numEther;
sumOfInputETH += numEther;
sumOfInputTime += currentTime * scaleFactor * numEther;
// The number of bonds which can be purchased for numEther.
createdBonds = ethereumToTokens_(numEther);
addColor(addr, createdBonds, _red, _green, _blue);
// Add the createdBonds to the total supply.
_totalSupply += createdBonds;
// Assign the bonds to the balance of the buyer.
balances[addr] += createdBonds;
// Check if we have bonds in existence
uint resolveFee;
if (dissolvingResolves > 0) {
resolveFee = fee * scaleFactor;
// Fee is distributed to all existing resolve holders before the new bonds are purchased.
// rewardPerResolve is the amount gained per resolve token from this purchase.
uint rewardPerResolve = resolveFee/dissolvingResolves;
// The Ether value per resolve is increased proportionally.
earningsPerResolve += rewardPerResolve;
}
emit Buy( addr, msg.value, createdBonds, resolveFee);
return createdBonds;
}
function avgHodl() public view returns(uint hodlTime){
return now - (sumOfInputTime - sumOfOutputTime) / (sumOfInputETH - sumOfOutputETH) / scaleFactor;
}
function getReturnsForBonds(address addr, uint bondsReleased) public view returns(uint etherValue, uint mintedResolves, uint new_releaseTimeSum, uint new_releaseAmount, uint initialInput_ETH){
uint output_ETH = tokensToEthereum_(bondsReleased);
uint input_ETH = average_ethSpent[addr] * bondsReleased / balances[addr];
// hodl multiplier. because if you don't hodl at all, you shouldn't be rewarded resolves.
// and the multiplier you get for hodling needs to be relative to the average hodl
uint buyInTime = average_buyInTimeSum[addr] / average_ethSpent[addr];
uint cashoutTime = now * scaleFactor - buyInTime;
uint new_sumOfOutputTime = sumOfOutputTime + average_buyInTimeSum[addr] * bondsReleased / balances[addr];
uint new_sumOfOutputETH = sumOfOutputETH + input_ETH; //It's based on the original ETH, so that's why input_ETH is used. Not output_ETH.
uint averageHoldingTime = now * scaleFactor - ( sumOfInputTime - sumOfOutputTime ) / ( sumOfInputETH - sumOfOutputETH );
return (output_ETH, input_ETH * cashoutTime / averageHoldingTime * input_ETH / output_ETH, new_sumOfOutputTime, new_sumOfOutputETH, input_ETH);
}
event Sell( address indexed addr, uint256 bondsSold, uint256 cashout, uint256 resolves, uint256 resolveTax, uint256 initialCash);
function sell(uint256 amount) internal returns(uint eth, uint resolves, uint initialInput){
address payable sender = msg.sender;
// Calculate the amount of Ether & Resolves that the holder's bonds sell for at the current sell price.
uint[] memory UINTs = new uint[](5);
(
UINTs[0]/*ether before fee*/,
UINTs[1]/*minted resolves*/,
UINTs[2]/*new_sumOfOutputTime*/,
UINTs[3]/*new_sumOfOutputETH*/,
UINTs[4]/*initialInput_ETH*/) = getReturnsForBonds(sender, amount);
// calculate the fee
uint fee = fluxFee(UINTs[0]/*ether before fee*/);
// magic distribution
uint[] memory RGB = new uint[](3);
(RGB[0], RGB[1], RGB[2]) = RGB_Ratio(sender);
resolveToken.mint(sender, UINTs[1]/*minted resolves*/, RGB[0], RGB[1], RGB[2]);
// update weighted average cashout time
sumOfOutputTime = UINTs[2]/*new_sumOfOutputTime*/;
sumOfOutputETH = UINTs[3] /*new_sumOfOutputETH*/;
// reduce the amount of "eth spent" based on the percentage of bonds being sold back into the contract
average_ethSpent[sender] = average_ethSpent[sender] * ( balances[sender] - amount) / balances[sender];
// reduce the "buyInTime" sum that's used for average buy in time
average_buyInTimeSum[sender] = average_buyInTimeSum[sender] * (balances[sender] - amount) / balances[sender];
// Net Ether for the seller after the fee has been subtracted.
uint numEthers = UINTs[0]/*ether before fee*/ - fee;
// Burn the bonds which were just sold from the total supply.
_totalSupply -= amount;
// maintain color density
thinColor( sender, balances[sender] - amount, balances[sender]);
// Remove the bonds from the balance of the buyer.
balances[sender] -= amount;
// Check if we have bonds in existence
uint resolveFee;
if ( dissolvingResolves > 0 ){
// Scale the Ether taken as the selling fee by the scaleFactor variable.
resolveFee = fee * scaleFactor;
// Fee is distributed to all remaining resolve holders.
// rewardPerResolve is the amount gained per resolve thanks to this sell.
uint rewardPerResolve = resolveFee/dissolvingResolves;
// The Ether value per resolve is increased proportionally.
earningsPerResolve += rewardPerResolve;
}
(bool success, ) = sender.call{value:numEthers}("");
require(success, "Transfer failed.");
emit Sell( sender, amount, numEthers, UINTs[1]/*minted resolves*/, resolveFee, UINTs[4] /*initialInput_ETH*/);
return (numEthers, UINTs[1]/*minted resolves*/, UINTs[4] /*initialInput_ETH*/);
}
function thinColor(address addr, uint newWeight, uint oldWeight) internal{
(red[addr], green[addr], blue[addr]) = RGB_scale( addr, newWeight, oldWeight);
}
// Allow contract to accept resolve tokens
event StakeResolves( address indexed addr, uint256 amountStaked, bytes _data );
function tokenFallback(address from, uint value, bytes calldata _data) external{
if(msg.sender == address(resolveToken) ){
resolveWeight[from] += value;
dissolvingResolves += value;
// Then we update the payouts array for the "resolve shareholder" with this amount
int payoutDiff = (int256) (earningsPerResolve * value);
payouts[from] += payoutDiff;
earningsOffset += payoutDiff;
emit StakeResolves(from, value, _data);
}else{
revert("no want");
}
}
// Withdraws resolveEarnings held by the caller sending the transaction, updates
// the requisite global variables, and transfers Ether back to the caller.
event Withdraw( address indexed addr, uint256 earnings, uint256 dissolve );
function withdraw(uint amount) public returns(uint){
address payable sender = msg.sender;
// Retrieve the resolveEarnings associated with the address the request came from.
uint upScaleDivs = (uint)((int256)( earningsPerResolve * resolveWeight[sender] ) - payouts[sender]);
uint totalEarnings = upScaleDivs / scaleFactor;
require( amount <= totalEarnings && amount > 0 );
uint oldWeight = resolveWeight[sender];
resolveWeight[sender] = oldWeight * ( totalEarnings - amount ) / totalEarnings;
uint weightDiff = oldWeight - resolveWeight[sender];
resolveToken.transfer( address0, weightDiff);
dissolvingResolves -= weightDiff;
// something about invariance
int withdrawnEarnings = (int)(upScaleDivs * amount / totalEarnings) - (int)(weightDiff*earningsPerResolve);
payouts[sender] += withdrawnEarnings;
// Increase the total amount that's been paid out to maintain invariance.
earningsOffset += withdrawnEarnings;
// Send the resolveEarnings to the address that requested the withdraw.
(bool success, ) = sender.call{value: amount}("");
require(success, "Transfer failed.");
emit Withdraw( sender, amount, weightDiff);
return weightDiff;
}
event PullResolves( address indexed addr, uint256 pulledResolves, uint256 forfeiture);
function pullResolves(uint amount) public returns (uint forfeiture){
address sender = msg.sender;
uint resolves = resolveWeight[ sender ];
require(amount <= resolves && amount > 0);
require(amount < dissolvingResolves);//"you can't forfeit the last resolve"
uint yourTotalEarnings = (uint)((int256)(resolves * earningsPerResolve) - payouts[sender]);
uint forfeitedEarnings = yourTotalEarnings * amount / resolves;
// Update the payout array so that the "resolve shareholder" cannot claim resolveEarnings on previous staked resolves.
payouts[sender] += (int256)(forfeitedEarnings) - (int256)(earningsPerResolve * amount);
resolveWeight[sender] -= amount;
dissolvingResolves -= amount;
// The Ether value per token is increased proportionally.
earningsPerResolve += forfeitedEarnings / dissolvingResolves;
resolveToken.transfer( sender, amount );
emit PullResolves( sender, amount, forfeitedEarnings / scaleFactor);
return forfeitedEarnings / scaleFactor;
}
function moveTokens(address _from, address _to, uint _amount) internal override{
uint totalBonds = balances[_from];
require(_amount <= totalBonds && _amount > 0);
uint ethSpent = average_ethSpent[_from] * _amount / totalBonds;
uint buyInTimeSum = average_buyInTimeSum[_from] * _amount / totalBonds;
average_ethSpent[_from] -= ethSpent;
average_buyInTimeSum[_from] -= buyInTimeSum;
balances[_from] -= _amount;
average_ethSpent[_to] += ethSpent;
average_buyInTimeSum[_to] += buyInTimeSum;
balances[_to] += _amount;
super.moveTokens(_from, _to, _amount);
}
function buyPrice()
public
view
returns(uint256)
{
// our calculation relies on the token supply, so we need supply. Doh.
if(_totalSupply == 0){
return tokenPriceInitial_ + tokenPriceIncremental_;
} else {
uint256 _ethereum = tokensToEthereum_(1e18);
uint256 _dividends = fluxFee(_ethereum );
uint256 _taxedEthereum = _ethereum + _dividends;
return _taxedEthereum;
}
}
function sellPrice()
public
view
returns(uint256)
{
// our calculation relies on the token supply, so we need supply. Doh.
if(_totalSupply == 0){
return tokenPriceInitial_ - tokenPriceIncremental_;
} else {
uint256 _ethereum = tokensToEthereum_(1e18);
uint256 _dividends = fluxFee(_ethereum );
uint256 _taxedEthereum = subtract(_ethereum, _dividends);
return _taxedEthereum;
}
}
function calculateTokensReceived(uint256 _ethereumToSpend)
public
view
returns(uint256)
{
uint256 _dividends = fluxFee(_ethereumToSpend);
uint256 _taxedEthereum = subtract(_ethereumToSpend, _dividends);
uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
return _amountOfTokens;
}
function calculateEthereumReceived(uint256 _tokensToSell)
public
view
returns(uint256)
{
require(_tokensToSell <= _totalSupply);
uint256 _ethereum = tokensToEthereum_(_tokensToSell);
uint256 _dividends = fluxFee(_ethereum );
uint256 _taxedEthereum = subtract(_ethereum, _dividends);
return _taxedEthereum;
}
function ethereumToTokens_(uint256 _ethereum)
internal
view
returns(uint256)
{
uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
uint256 _tokensReceived =
(
(
// underflow attempts BTFO
subtract(
(sqrt
(
(_tokenPriceInitial**2)
+
(2*(tokenPriceIncremental_ * 1e18)*(_ethereum * 1e18))
+
(((tokenPriceIncremental_)**2)*(_totalSupply**2))
+
(2*(tokenPriceIncremental_)*_tokenPriceInitial*_totalSupply)
)
), _tokenPriceInitial
)
)/(tokenPriceIncremental_)
)-(_totalSupply)
;
return _tokensReceived;
}
function tokensToEthereum_(uint256 _tokens)
internal
view
returns(uint256)
{
uint256 tokens_ = (_tokens + 1e18);
uint256 _tokenSupply = (_totalSupply + 1e18);
uint256 _etherReceived =
(
// underflow attempts BTFO
subtract(
(
(
(
tokenPriceInitial_ +(tokenPriceIncremental_ * (_tokenSupply/1e18))
)-tokenPriceIncremental_
)*(tokens_ - 1e18)
),(tokenPriceIncremental_*((tokens_**2-tokens_)/1e18))/2
)
/1e18);
return _etherReceived;
}
function sqrt(uint x) internal pure returns (uint y) {
uint z = (x + 1) / 2;
y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
}
function subtract(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
}
abstract contract ERC223ReceivingContract{
function tokenFallback(address _from, uint _value, bytes calldata _data) external virtual;
}
contract Crust is ColorToken{
string public name = "Color";
string public symbol = "`c";
uint8 constant public decimals = 18;
address public hourglass;
constructor(address _hourglass) public{
hourglass = _hourglass;
}
modifier hourglassOnly{
require(msg.sender == hourglass);
_;
}
event Transfer(
address indexed from,
address indexed to,
uint256 amount,
bytes data
);
event Mint(
address indexed addr,
uint256 amount
);
function mint(address _address, uint _value, uint _red, uint _green, uint _blue) external hourglassOnly(){
balances[_address] += _value;
_totalSupply += _value;
addColor(_address, _value, _red, _green, _blue);
emit Mint(_address, _value);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"spent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonds","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resolveTax","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"pulledResolves","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forfeiture","type":"uint256"}],"name":"PullResolves","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"reinvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dissolved","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonds","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resolveTax","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"bondsSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cashout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resolves","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resolveTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialCash","type":"uint256"}],"name":"Sell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountStaked","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"StakeResolves","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"earnings","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dissolve","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"RGB_Ratio","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"RGB_Ratio","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"guy","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"average_buyInTimeSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"average_ethSpent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"avgHodl","outputs":[{"internalType":"uint256","name":"hodlTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"_red","type":"uint256"},{"internalType":"uint256","name":"_green","type":"uint256"},{"internalType":"uint256","name":"_blue","type":"uint256"}],"name":"buy","outputs":[{"internalType":"uint256","name":"createdBonds","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dissolvingResolves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earningsOffset","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earningsPerResolve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"paidAmount","type":"uint256"}],"name":"fluxFee","outputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fund","outputs":[{"internalType":"uint256","name":"createdBonds","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMeOutOfHere","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"bondsReleased","type":"uint256"}],"name":"getReturnsForBonds","outputs":[{"internalType":"uint256","name":"etherValue","type":"uint256"},{"internalType":"uint256","name":"mintedResolves","type":"uint256"},{"internalType":"uint256","name":"new_releaseTimeSum","type":"uint256"},{"internalType":"uint256","name":"new_releaseAmount","type":"uint256"},{"internalType":"uint256","name":"initialInput_ETH","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"green","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"is_contract","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payouts","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pullResolves","outputs":[{"internalType":"uint256","name":"forfeiture","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"red","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountFromEarnings","type":"uint256"}],"name":"reinvestEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"resolveEarnings","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resolveToken","outputs":[{"internalType":"contract Crust","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"resolveWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellAllBonds","outputs":[{"internalType":"uint256","name":"returned_eth","type":"uint256"},{"internalType":"uint256","name":"returned_resolves","type":"uint256"},{"internalType":"uint256","name":"initialInput_ETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellBonds","outputs":[{"internalType":"uint256","name":"returned_eth","type":"uint256"},{"internalType":"uint256","name":"returned_resolves","type":"uint256"},{"internalType":"uint256","name":"initialInput_ETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumOfInputETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumOfInputTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumOfOutputETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumOfOutputTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600680546001600160a01b03191690553480156200002157600080fd5b5030604051620000319062000086565b6001600160a01b03909116815260405190819003602001906000f0801580156200005f573d6000803e3d6000fd5b50601280546001600160a01b0319166001600160a01b039290921691909117905562000094565b610f038062002aae83390190565b612a0a80620000a46000396000f3fe6080604052600436106102885760003560e01c80637060ec021161015a578063b1e35242116100c1578063dd62ed3e1161007a578063dd62ed3e14610ac3578063e0cfe6ba14610afe578063e3c4d97d14610b13578063e8d310d214610b46578063ec5899e414610b5b578063ee4350ed14610b7057610288565b8063b1e35242146108d4578063b60d4288146108eb578063b65a9bcf146108f3578063be45fd6214610926578063c0ee0b8a146109ee578063dce0501014610a8057610288565b806395d89b411161011357806395d89b41146107f85780639843fc791461080d578063a3e5301c14610840578063a9059cbb14610871578063a9c0effd146108aa578063aa574244146108bf57610288565b80637060ec021461070257806370a08231146107175780638544d3fa1461074a5780638620410b1461077d57806390dbc6b21461079257806394b3a2a3146107c557610288565b80632446ce3f116101fe5780633eaaf86b116101b75780633eaaf86b146105f95780634851f91a1461060e5780634b6f1671146106415780634b7503341461065657806365bcfbe71461066b5780636a540df01461069e57610288565b80632446ce3f1461051457806327e235e314610529578063288237741461055c5780632e1a7d4d14610571578063313ce5671461059b5780633a9430ff146105c657610288565b80631627905511610250578063162790551461040257806318160ddd146104355780631f278b641461044a5780631fc5cfc41461047d57806322609373146104a757806323b872dd146104d157610288565b806306fdde031461028d578063095ea7b31461031757806310d0ffdd146103645780631554784a146103a05780631622dbe4146103ca575b600080fd5b34801561029957600080fd5b506102a2610b9a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102dc5781810151838201526020016102c4565b50505050905090810190601f1680156103095780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032357600080fd5b506103506004803603604081101561033a57600080fd5b506001600160a01b038135169060200135610bc1565b604080519115158252519081900360200190f35b34801561037057600080fd5b5061038e6004803603602081101561038757600080fd5b5035610c2e565b60408051918252519081900360200190f35b3480156103ac57600080fd5b5061038e600480360360208110156103c357600080fd5b5035610c60565b61038e600480360360808110156103e057600080fd5b506001600160a01b038135169060208101359060408101359060600135610d8a565b34801561040e57600080fd5b506103506004803603602081101561042557600080fd5b50356001600160a01b0316610f16565b34801561044157600080fd5b5061038e610f3a565b34801561045657600080fd5b5061038e6004803603602081101561046d57600080fd5b50356001600160a01b0316610f41565b34801561048957600080fd5b5061038e600480360360208110156104a057600080fd5b5035610f53565b3480156104b357600080fd5b5061038e600480360360208110156104ca57600080fd5b50356110f3565b3480156104dd57600080fd5b50610350600480360360608110156104f457600080fd5b506001600160a01b0381358116916020810135909116906040013561112a565b34801561052057600080fd5b5061038e6111b8565b34801561053557600080fd5b5061038e6004803603602081101561054c57600080fd5b50356001600160a01b03166111be565b34801561056857600080fd5b5061038e6111d0565b34801561057d57600080fd5b5061038e6004803603602081101561059457600080fd5b50356111d6565b3480156105a757600080fd5b506105b0611409565b6040805160ff9092168252519081900360200190f35b3480156105d257600080fd5b506105db61140e565b60408051938452602084019290925282820152519081900360600190f35b34801561060557600080fd5b5061038e611427565b34801561061a57600080fd5b5061038e6004803603602081101561063157600080fd5b50356001600160a01b031661142d565b34801561064d57600080fd5b5061038e611463565b34801561066257600080fd5b5061038e611469565b34801561067757600080fd5b5061038e6004803603602081101561068e57600080fd5b50356001600160a01b03166114bb565b3480156106aa57600080fd5b506106d7600480360360408110156106c157600080fd5b506001600160a01b0381351690602001356114cd565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561070e57600080fd5b5061038e6115e6565b34801561072357600080fd5b5061038e6004803603602081101561073a57600080fd5b50356001600160a01b03166115ec565b34801561075657600080fd5b5061038e6004803603602081101561076d57600080fd5b50356001600160a01b0316611607565b34801561078957600080fd5b5061038e611619565b34801561079e57600080fd5b506105db600480360360208110156107b557600080fd5b50356001600160a01b031661165f565b3480156107d157600080fd5b5061038e600480360360208110156107e857600080fd5b50356001600160a01b0316611710565b34801561080457600080fd5b506102a2611722565b34801561081957600080fd5b5061038e6004803603602081101561083057600080fd5b50356001600160a01b0316611743565b34801561084c57600080fd5b50610855611755565b604080516001600160a01b039092168252519081900360200190f35b34801561087d57600080fd5b506103506004803603604081101561089457600080fd5b506001600160a01b038135169060200135611764565b3480156108b657600080fd5b5061038e611794565b3480156108cb57600080fd5b506105db61179a565b3480156108e057600080fd5b506108e96117b0565b005b61038e6117cf565b3480156108ff57600080fd5b5061038e6004803603602081101561091657600080fd5b50356001600160a01b0316611897565b34801561093257600080fd5b506103506004803603606081101561094957600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561097957600080fd5b82018360208201111561098b57600080fd5b803590602001918460018302840111640100000000831117156109ad57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118a9945050505050565b3480156109fa57600080fd5b506108e960048036036060811015610a1157600080fd5b6001600160a01b0382351691602081013591810190606081016040820135640100000000811115610a4157600080fd5b820183602082011115610a5357600080fd5b80359060200191846001830284011164010000000083111715610a7557600080fd5b5090925090506118d6565b348015610a8c57600080fd5b50610aaa60048036036020811015610aa357600080fd5b50356119da565b6040805192835260208301919091528051918290030190f35b348015610acf57600080fd5b5061038e60048036036040811015610ae657600080fd5b506001600160a01b0381358116916020013516611d46565b348015610b0a57600080fd5b5061038e611d71565b348015610b1f57600080fd5b5061038e60048036036020811015610b3657600080fd5b50356001600160a01b0316611d9d565b348015610b5257600080fd5b5061038e611daf565b348015610b6757600080fd5b5061038e611db5565b348015610b7c57600080fd5b506105db60048036036020811015610b9357600080fd5b5035611dbb565b6040518060400160405280600b81526020016a2834bd3d30902a37b5b2b760a91b81525081565b3360008181526005602090815260408083206001600160a01b03871680855290835281842086905581518681529151939493909284927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a360019150505b92915050565b600080610c3a83610c60565b90506000610c488483611e38565b90506000610c5582611e4a565b93505050505b919050565b601254604080516370a0823160e01b81526000600482018190529151919283926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610cb157600080fd5b505afa158015610cc5573d6000803e3d6000fd5b505050506040513d6020811015610cdb57600080fd5b5051601254604080516318160ddd60e01b815290516001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b158015610d2257600080fd5b505afa158015610d36573d6000803e3d6000fd5b505050506040513d6020811015610d4c57600080fd5b5051600b549190039150610d64576000915050610c5b565b600c54600e5482600b548403860281610d7957fe5b040281610d8257fe5b049392505050565b6000670de0b6b3a7640000841115610da857670de0b6b3a764000093505b670de0b6b3a7640000831115610dc457670de0b6b3a764000092505b670de0b6b3a7640000821115610de057670de0b6b3a764000091505b64e8d4a51000341015610df257600080fd5b6000610dfd34610c60565b6001600160a01b03871660009081526007602090815260408083208054348690039081019091556008909252909120805442808402600160401b02918201909255600c805484019055600d8054909101905591925090610e5c82611e4a565b9350610e6b8885898989611ee0565b60048054850190556001600160a01b0388166000908152602081905260408120805486019055600b5415610ebe57600160401b840290506000600b548281610eaf57fe5b60118054929091049091019055505b604080513481526020810187905280820183905290516001600160a01b038b16917fbeae048c6d270d9469f86cf6e8fedda3c60ad770f16c24c9fc131c8e9a09101d919081900360600190a250505050949350505050565b6000813b8015610f2a576001915050610c5b565b6000915050610c5b565b50919050565b6004545b90565b60026020526000908152604090205481565b33600081815260096020526040812054909190808411801590610f765750600084115b610f7f57600080fd5b600b548410610f8d57600080fd5b6001600160a01b0382166000908152600a6020526040812054601154830203908286830281610fb857fe5b6011546001600160a01b0387166000908152600a602090815260408083208054948d02969095049586039093019093556009909252902080548890039055600b805488900390819055909150818161100c57fe5b601180549290910490910190556012546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018a90529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561106f57600080fd5b505af1158015611083573d6000803e3d6000fd5b505050506040513d602081101561109957600080fd5b505060408051878152600160401b8304602082015281516001600160a01b038716927ff597bb09fb98a90b578e74952df9d7e06d7505f52a264d786bb11770873dccb2928290030190a2600160401b900495945050505050565b600060045482111561110457600080fd5b600061110f83611f2b565b9050600061111c82610c60565b90506000610c558383611e38565b6001600160a01b038316600090815260056020908152604080832033808552925282205483111561115a57600080fd5b806001600160a01b0316856001600160a01b0316146111a0576001600160a01b038086166000908152600560209081526040808320938516835292905220805484900390555b6111ab858585611f9e565b60019150505b9392505050565b600e5481565b60006020819052908152604090205481565b600b5481565b336000818152600a602090815260408083205460099092528220546011549293920203600160401b81048085118015906112105750600085115b61121957600080fd5b6001600160a01b0383166000908152600960205260409020548186810382028161123f57fe5b6001600160a01b0380871660009081526009602090815260408083209590940494859055601254600654855163a9059cbb60e01b81529085166004820152958703602487018190529451949593169363a9059cbb93604480820194918390030190829087803b1580156112b157600080fd5b505af11580156112c5573d6000803e3d6000fd5b505050506040513d60208110156112db57600080fd5b5050600b80548290039055601154600090820284868a02816112f957fe5b6001600160a01b0389166000818152600a6020526040808220805495909404959095039384019092556010805484019055925191935091908a908381818185875af1925050503d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b50509050806113b9576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b604080518a81526020810185905281516001600160a01b038a16927ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568928290030190a25090979650505050505050565b601281565b600080600061141c3361165f565b925092509250909192565b60045481565b6001600160a01b03166000908152600a6020908152604080832054600990925290912054601154600160401b9102919091030490565b60115481565b60006004546000141561148257506414f46b0400610f3e565b6000611495670de0b6b3a7640000611f2b565b905060006114a282610c60565b905060006114b08383611e38565b9350610f3e92505050565b600a6020526000908152604090205481565b6000806000806000806114df87611f2b565b6001600160a01b038916600090815260208181526040808320546007909252822054929350909189028161150f57fe5b6001600160a01b038b166000908152600760209081526040808320546008909252822054939092049350918161154157fe5b6001600160a01b038c1660009081526020818152604080832054600890925282205493909204935042600160401b02849003929091908c028161158057fe5b04600f54019050600084600e540190506000600e54600c5403600f54600d5403816115a757fe5b04600160401b420203905086878783878a02816115c057fe5b0402816115c957fe5b919d5090049a509198509650929450505050509295509295909350565b60105481565b6001600160a01b031660009081526020819052604090205490565b60086020526000908152604090205481565b600060045460001415611632575064199c82cc00610f3e565b6000611645670de0b6b3a7640000611f2b565b9050600061165282610c60565b919091019150610f3e9050565b6001600160a01b038116600090815260208190526040812054819081908061169257600080600093509350935050611709565b6001600160a01b0385166000908152600160205260409020548190816116b457fe5b6001600160a01b038716600090815260026020526040902054919004908290816116da57fe5b6001600160a01b0388166000908152600360205260409020549190049083908161170057fe5b04935093509350505b9193909250565b60076020526000908152604090205481565b6040518060400160405280600581526020016450695a5a6160d81b81525081565b60016020526000908152604090205481565b6012546001600160a01b031681565b6000606061177184610f16565b15611789576117818484836120a2565b915050610c28565b611781848483612243565b600d5481565b600080600061141c6117ab336115ec565b61230f565b6117b861179a565b5050506117cc6117c73361142d565b6111d6565b50565b60408051600380825260808201909252600091606091906020820183803683370190505090506117fe3361165f565b8360008151811061180b57fe5b602002602001018460018151811061181f57fe5b602002602001018560028151811061183357fe5b60200260200101838152508381525083815250505050611891338260008151811061185a57fe5b60200260200101518360018151811061186f57fe5b60200260200101518460028151811061188457fe5b6020026020010151610d8a565b91505090565b60036020526000908152604090205481565b60006118b484610f16565b156118cb576118c48484846120a2565b90506111b1565b6118c4848484612243565b6012546001600160a01b031633141561199d576001600160a01b0384166000818152600960209081526040808320805488019055600b805488019055601154600a83529281902080549388029384019055601080548401905580518781529182018181529082018590529192917f496d21a3791df17b9e71acba0bd6c88352f3da2636dc2bfae959f09af6c4fb999187918791879160608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a2506119d4565b6040805162461bcd60e51b81526020600482015260076024820152661b9bc81dd85b9d60ca1b604482015290519081900360640190fd5b50505050565b336000818152600a60209081526040808320546009909252822054601154929384939092910203600160401b810480861115611a475760405162461bcd60e51b81526004018080602001828103825260218152602001806129b46021913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205481878103820281611a6d57fe5b6001600160a01b0380871660009081526009602090815260408083209590940494859055601254600654855163a9059cbb60e01b81529085166004820152958703602487018190529451949593169363a9059cbb93604480820194918390030190829087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050506040513d6020811015611b0957600080fd5b5050600b80548290039055601154600090820284868b0281611b2757fe5b6001600160a01b0389166000908152600a6020526040902080549290910492909203908101909155601080548201905590508864e8d4a51000811015611b6c57600080fd5b6000611b7782610c60565b6001600160a01b03891660009081526007602090815260408083208054858803908101909155600890925282208054428302600160401b02908101909155600c805483019055600d80549091019055919250611bd282611e4a565b6040805160038082526080820190925291925060609190602082018380368337019050509050611c018b61165f565b83600081518110611c0e57fe5b6020026020010184600181518110611c2257fe5b6020026020010185600281518110611c3657fe5b60200260200101838152508381525083815250505050611c958b8383600081518110611c5e57fe5b602002602001015184600181518110611c7357fe5b602002602001015185600281518110611c8857fe5b6020026020010151611ee0565b600b5460009015611cc557600160401b850290506000600b548281611cb657fe5b60118054929091049091019055505b60048054840190556001600160a01b038c166000818152602081815260409182902080548701905581518981529081018b90528082018690526060810184905290517fc7209ba1b691ad661f5afd3d5360a45f0f4e3dac25357bf4f346e73166f35c939181900360800190a250909b50949950505050505050505050915091565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6000600160401b600e54600c5403600f54600d540381611d8d57fe5b0481611d9557fe5b044203905090565b60096020526000908152604090205481565b600f5481565b600c5481565b600080600080611dca336115ec565b905084811015611e21576040805162461bcd60e51b815260206004820152601b60248201527f416d6f756e74206973206d6f7265207468616e2062616c616e63650000000000604482015290519081900360640190fd5b611e2a8561230f565b919790965090945092505050565b600082821115611e4457fe5b50900390565b6004546000906c01431e0fae6d7217caa00000009082906402540be400611ecf611ec9730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e400000000000000016127f0565b85611e38565b81611ed657fe5b0403949350505050565b6001600160a01b039490941660009081526001602090815260408083208054958702909501909455600281528382208054938602909301909255600390915220805491909202019055565b600454600090670de0b6b3a7640000808401918101908390611f8d866402540be4008386046402540be4000264174876e8000103026002670de0b6b3a7640000876002890a0381611f7857fe5b046402540be4000281611f8757fe5b04611e38565b81611f9457fe5b0495945050505050565b6001600160a01b038316600090815260208190526040902054808211801590611fc75750600082115b611fd057600080fd5b6001600160a01b0384166000908152600760205260408120548290840281611ff457fe5b6001600160a01b03871660009081526008602052604081205492909104925090839085028161201f57fe5b6001600160a01b03808916600090815260076020818152604080842080548a9003905560088083528185208054989097049788900390965583825280842080548c90039055938b168352908152828220805488019055928352818120805485019055918290529020805486019055905061209a868686612821565b505050505050565b60006120af338585611f9e565b60405163607705c560e11b815233600482018181526024830186905260606044840190815285516064850152855188946001600160a01b0386169463c0ee0b8a9490938a938a9360840190602085019080838360005b8381101561211d578181015183820152602001612105565b50505050905090810190601f16801561214a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50505050846001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1686866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121fd5781810151838201526020016121e5565b50505050905090810190601f16801561222a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3506001949350505050565b6000612250338585611f9e565b836001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1685856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122ca5781810151838201526020016122b2565b50505050905090810190601f1680156122f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35060019392505050565b60408051600580825260c082019092526000918291829133916060916020820160a08036833701905050905061234582876114cd565b8560008151811061235257fe5b602002602001018660018151811061236657fe5b602002602001018760028151811061237a57fe5b602002602001018860038151811061238e57fe5b60200260200101896004815181106123a257fe5b602002602001018581525085815250858152508581525085815250505050505060006123e1826000815181106123d457fe5b6020026020010151610c60565b60408051600380825260808201909252919250606091906020820183803683370190505090506124108461165f565b8360008151811061241d57fe5b602002602001018460018151811061243157fe5b602002602001018560028151811061244557fe5b60209081029190910101929092529190525260125483516001600160a01b039091169063f92883a29086908690600190811061247d57fe5b60200260200101518460008151811061249257fe5b6020026020010151856001815181106124a757fe5b6020026020010151866002815181106124bc57fe5b60200260200101516040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050508260028151811061254457fe5b6020026020010151600f819055508260038151811061255f57fe5b602090810291909101810151600e556001600160a01b03851660009081528082526040808220546007909352902054898203028161259957fe5b6001600160a01b038616600090815260076020908152604080832094909304909355808352818120546008909352205489820302816125d457fe5b6001600160a01b038616600090815260086020526040812092909104909155835183908590839061260157fe5b602090810291909101810151600480548d900390556001600160a01b03881660009081529182905260409091205491900391506126439086908b8103906128e9565b6001600160a01b038516600090815260208190526040812080548b90039055600b541561268f57600160401b840290506000600b54828161268057fe5b60118054929091049091019055505b6040516000906001600160a01b0388169084908381818185875af1925050503d80600081146126da576040519150601f19603f3d011682016040523d82523d6000602084013e6126df565b606091505b5050905080612728576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b866001600160a01b03167f20a7fc03b19d7f251cc907f177ff82194c6aebe9a2b47e1cd734dcb6bf772cc28c858960018151811061276257fe5b6020026020010151868b60048151811061277857fe5b6020026020010151604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a282866001815181106127bf57fe5b6020026020010151876004815181106127d457fe5b6020026020010151995099509950505050505050509193909250565b80600260018201045b81811015610f345780915060028182858161281057fe5b04018161281957fe5b0490506127f9565b600080600061285586856000808a6001600160a01b03166001600160a01b031681526020019081526020016000205461292b565b6001600160a01b039889166000818152600160208181526040808420805489900390556002808352818520805489900390556003808452828620805489900390559d909e1680855292825280842080549098019097559b8c528582208054909501909455988a5283892080549092019091558752968690528086208054869003905595855250505091902080549091019055565b6128f483838361292b565b6001600160a01b03909516600090815260016020908152604080832060028352818420600390935292209690965594559092555050565b6001600160a01b03831660009081526001602052604081205481908190849086028161295357fe5b6001600160a01b03881660009081526002602052604090205491900490859087028161297b57fe5b6001600160a01b0389166000908152600360205260409020549190049086908802816129a357fe5b049250925092509350935093905056fe74686520616d6f756e74206578636565647320746f74616c206561726e696e6773a2646970667358221220956c84691b2b41edc938ab79bd1d0750456b65d4a60db8bcdbfc50b630d6e3f464736f6c634300060c003360c0604052600560808190526421b7b637b960d91b60a090815261002691600691906100a6565b5060408051808201909152600280825261606360f01b6020909201918252610050916007916100a6565b5034801561005d57600080fd5b50604051610f03380380610f038339818101604052602081101561008057600080fd5b5051600880546001600160a01b0319166001600160a01b03909216919091179055610139565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e757805160ff1916838001178555610114565b82800160010185558215610114579182015b828111156101145782518255916020019190600101906100f9565b50610120929150610124565b5090565b5b808211156101205760008155600101610125565b610dbb806101486000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80634bc7f977116100ad578063a9059cbb11610071578063a9059cbb1461039a578063b65a9bcf146103c6578063be45fd62146103ec578063dd62ed3e146104a7578063f92883a2146104d55761012c565b80634bc7f977146102fc57806370a082311461032057806390dbc6b21461034657806395d89b411461036c5780639843fc79146103745761012c565b806323b872dd116100f457806323b872dd1461025457806327e235e31461028a578063313ce567146102b05780633a9430ff146102ce5780633eaaf86b146102f45761012c565b806306fdde0314610131578063095ea7b3146101ae57806316279055146101ee57806318160ddd146102145780631f278b641461022e575b600080fd5b610139610515565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017357818101518382015260200161015b565b50505050905090810190601f1680156101a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101da600480360360408110156101c457600080fd5b506001600160a01b0381351690602001356105a3565b604080519115158252519081900360200190f35b6101da6004803603602081101561020457600080fd5b50356001600160a01b0316610610565b61021c61062f565b60408051918252519081900360200190f35b61021c6004803603602081101561024457600080fd5b50356001600160a01b0316610635565b6101da6004803603606081101561026a57600080fd5b506001600160a01b03813581169160208101359091169060400135610647565b61021c600480360360208110156102a057600080fd5b50356001600160a01b03166106d5565b6102b86106e7565b6040805160ff9092168252519081900360200190f35b6102d66106ec565b60408051938452602084019290925282820152519081900360600190f35b61021c610705565b61030461070b565b604080516001600160a01b039092168252519081900360200190f35b61021c6004803603602081101561033657600080fd5b50356001600160a01b031661071a565b6102d66004803603602081101561035c57600080fd5b50356001600160a01b0316610735565b6101396107e6565b61021c6004803603602081101561038a57600080fd5b50356001600160a01b0316610841565b6101da600480360360408110156103b057600080fd5b506001600160a01b038135169060200135610853565b61021c600480360360208110156103dc57600080fd5b50356001600160a01b0316610883565b6101da6004803603606081101561040257600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561043257600080fd5b82018360208201111561044457600080fd5b8035906020019184600183028401116401000000008311171561046657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610895945050505050565b61021c600480360360408110156104bd57600080fd5b506001600160a01b03813581169160200135166108c2565b610513600480360360a08110156104eb57600080fd5b506001600160a01b0381351690602081013590604081013590606081013590608001356108ed565b005b6006805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561059b5780601f106105705761010080835404028352916020019161059b565b820191906000526020600020905b81548152906001019060200180831161057e57829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b03871680855290835281842086905581518681529151939493909284927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a360019150505b92915050565b6000813b801561062457600191505061062a565b60009150505b919050565b60045490565b60026020526000908152604090205481565b6001600160a01b038316600090815260056020908152604080832033808552925282205483111561067757600080fd5b806001600160a01b0316856001600160a01b0316146106bd576001600160a01b038086166000908152600560209081526040808320938516835292905220805484900390555b6106c885858561097d565b60019150505b9392505050565b60006020819052908152604090205481565b601281565b60008060006106fa33610735565b925092509250909192565b60045481565b6008546001600160a01b031681565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b0381166000908152602081905260408120548190819080610768576000806000935093509350506107df565b6001600160a01b03851660009081526001602052604090205481908161078a57fe5b6001600160a01b038716600090815260026020526040902054919004908290816107b057fe5b6001600160a01b038816600090815260036020526040902054919004908390816107d657fe5b04935093509350505b9193909250565b6007805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561059b5780601f106105705761010080835404028352916020019161059b565b60016020526000908152604090205481565b6000606061086084610610565b1561087857610870848483610a45565b91505061060a565b610870848483610be6565b60036020526000908152604090205481565b60006108a084610610565b156108b7576108b0848484610a45565b90506106ce565b6108b0848484610be6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6008546001600160a01b0316331461090457600080fd5b6001600160a01b038516600090815260208190526040902080548501905560048054850190556109378585858585610cb2565b6040805185815290516001600160a01b038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a25050505050565b60008060006109b186856000808a6001600160a01b03166001600160a01b0316815260200190815260200160002054610cfd565b6001600160a01b039889166000818152600160208181526040808420805489900390556002808352818520805489900390556003808452828620805489900390559d909e1680855292825280842080549098019097559b8c528582208054909501909455988a5283892080549092019091558752968690528086208054869003905595855250505091902080549091019055565b6000610a5233858561097d565b60405163607705c560e11b815233600482018181526024830186905260606044840190815285516064850152855188946001600160a01b0386169463c0ee0b8a9490938a938a9360840190602085019080838360005b83811015610ac0578181015183820152602001610aa8565b50505050905090810190601f168015610aed5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610b0e57600080fd5b505af1158015610b22573d6000803e3d6000fd5b50505050846001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1686866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610ba0578181015183820152602001610b88565b50505050905090810190601f168015610bcd5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3506001949350505050565b6000610bf333858561097d565b836001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1685856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c6d578181015183820152602001610c55565b50505050905090810190601f168015610c9a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35060019392505050565b6001600160a01b039490941660009081526001602090815260408083208054958702909501909455600281528382208054938602909301909255600390915220805491909202019055565b6001600160a01b038316600090815260016020526040812054819081908490860281610d2557fe5b6001600160a01b038816600090815260026020526040902054919004908590870281610d4d57fe5b6001600160a01b038916600090815260036020526040902054919004908690880281610d7557fe5b049250925092509350935093905056fea26469706673582212201aa7cd8a42534c2fd1cc8ca4cff235ddf49e03898986818662d4bd30e6b504e264736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106102885760003560e01c80637060ec021161015a578063b1e35242116100c1578063dd62ed3e1161007a578063dd62ed3e14610ac3578063e0cfe6ba14610afe578063e3c4d97d14610b13578063e8d310d214610b46578063ec5899e414610b5b578063ee4350ed14610b7057610288565b8063b1e35242146108d4578063b60d4288146108eb578063b65a9bcf146108f3578063be45fd6214610926578063c0ee0b8a146109ee578063dce0501014610a8057610288565b806395d89b411161011357806395d89b41146107f85780639843fc791461080d578063a3e5301c14610840578063a9059cbb14610871578063a9c0effd146108aa578063aa574244146108bf57610288565b80637060ec021461070257806370a08231146107175780638544d3fa1461074a5780638620410b1461077d57806390dbc6b21461079257806394b3a2a3146107c557610288565b80632446ce3f116101fe5780633eaaf86b116101b75780633eaaf86b146105f95780634851f91a1461060e5780634b6f1671146106415780634b7503341461065657806365bcfbe71461066b5780636a540df01461069e57610288565b80632446ce3f1461051457806327e235e314610529578063288237741461055c5780632e1a7d4d14610571578063313ce5671461059b5780633a9430ff146105c657610288565b80631627905511610250578063162790551461040257806318160ddd146104355780631f278b641461044a5780631fc5cfc41461047d57806322609373146104a757806323b872dd146104d157610288565b806306fdde031461028d578063095ea7b31461031757806310d0ffdd146103645780631554784a146103a05780631622dbe4146103ca575b600080fd5b34801561029957600080fd5b506102a2610b9a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102dc5781810151838201526020016102c4565b50505050905090810190601f1680156103095780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032357600080fd5b506103506004803603604081101561033a57600080fd5b506001600160a01b038135169060200135610bc1565b604080519115158252519081900360200190f35b34801561037057600080fd5b5061038e6004803603602081101561038757600080fd5b5035610c2e565b60408051918252519081900360200190f35b3480156103ac57600080fd5b5061038e600480360360208110156103c357600080fd5b5035610c60565b61038e600480360360808110156103e057600080fd5b506001600160a01b038135169060208101359060408101359060600135610d8a565b34801561040e57600080fd5b506103506004803603602081101561042557600080fd5b50356001600160a01b0316610f16565b34801561044157600080fd5b5061038e610f3a565b34801561045657600080fd5b5061038e6004803603602081101561046d57600080fd5b50356001600160a01b0316610f41565b34801561048957600080fd5b5061038e600480360360208110156104a057600080fd5b5035610f53565b3480156104b357600080fd5b5061038e600480360360208110156104ca57600080fd5b50356110f3565b3480156104dd57600080fd5b50610350600480360360608110156104f457600080fd5b506001600160a01b0381358116916020810135909116906040013561112a565b34801561052057600080fd5b5061038e6111b8565b34801561053557600080fd5b5061038e6004803603602081101561054c57600080fd5b50356001600160a01b03166111be565b34801561056857600080fd5b5061038e6111d0565b34801561057d57600080fd5b5061038e6004803603602081101561059457600080fd5b50356111d6565b3480156105a757600080fd5b506105b0611409565b6040805160ff9092168252519081900360200190f35b3480156105d257600080fd5b506105db61140e565b60408051938452602084019290925282820152519081900360600190f35b34801561060557600080fd5b5061038e611427565b34801561061a57600080fd5b5061038e6004803603602081101561063157600080fd5b50356001600160a01b031661142d565b34801561064d57600080fd5b5061038e611463565b34801561066257600080fd5b5061038e611469565b34801561067757600080fd5b5061038e6004803603602081101561068e57600080fd5b50356001600160a01b03166114bb565b3480156106aa57600080fd5b506106d7600480360360408110156106c157600080fd5b506001600160a01b0381351690602001356114cd565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561070e57600080fd5b5061038e6115e6565b34801561072357600080fd5b5061038e6004803603602081101561073a57600080fd5b50356001600160a01b03166115ec565b34801561075657600080fd5b5061038e6004803603602081101561076d57600080fd5b50356001600160a01b0316611607565b34801561078957600080fd5b5061038e611619565b34801561079e57600080fd5b506105db600480360360208110156107b557600080fd5b50356001600160a01b031661165f565b3480156107d157600080fd5b5061038e600480360360208110156107e857600080fd5b50356001600160a01b0316611710565b34801561080457600080fd5b506102a2611722565b34801561081957600080fd5b5061038e6004803603602081101561083057600080fd5b50356001600160a01b0316611743565b34801561084c57600080fd5b50610855611755565b604080516001600160a01b039092168252519081900360200190f35b34801561087d57600080fd5b506103506004803603604081101561089457600080fd5b506001600160a01b038135169060200135611764565b3480156108b657600080fd5b5061038e611794565b3480156108cb57600080fd5b506105db61179a565b3480156108e057600080fd5b506108e96117b0565b005b61038e6117cf565b3480156108ff57600080fd5b5061038e6004803603602081101561091657600080fd5b50356001600160a01b0316611897565b34801561093257600080fd5b506103506004803603606081101561094957600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561097957600080fd5b82018360208201111561098b57600080fd5b803590602001918460018302840111640100000000831117156109ad57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118a9945050505050565b3480156109fa57600080fd5b506108e960048036036060811015610a1157600080fd5b6001600160a01b0382351691602081013591810190606081016040820135640100000000811115610a4157600080fd5b820183602082011115610a5357600080fd5b80359060200191846001830284011164010000000083111715610a7557600080fd5b5090925090506118d6565b348015610a8c57600080fd5b50610aaa60048036036020811015610aa357600080fd5b50356119da565b6040805192835260208301919091528051918290030190f35b348015610acf57600080fd5b5061038e60048036036040811015610ae657600080fd5b506001600160a01b0381358116916020013516611d46565b348015610b0a57600080fd5b5061038e611d71565b348015610b1f57600080fd5b5061038e60048036036020811015610b3657600080fd5b50356001600160a01b0316611d9d565b348015610b5257600080fd5b5061038e611daf565b348015610b6757600080fd5b5061038e611db5565b348015610b7c57600080fd5b506105db60048036036020811015610b9357600080fd5b5035611dbb565b6040518060400160405280600b81526020016a2834bd3d30902a37b5b2b760a91b81525081565b3360008181526005602090815260408083206001600160a01b03871680855290835281842086905581518681529151939493909284927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a360019150505b92915050565b600080610c3a83610c60565b90506000610c488483611e38565b90506000610c5582611e4a565b93505050505b919050565b601254604080516370a0823160e01b81526000600482018190529151919283926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610cb157600080fd5b505afa158015610cc5573d6000803e3d6000fd5b505050506040513d6020811015610cdb57600080fd5b5051601254604080516318160ddd60e01b815290516001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b158015610d2257600080fd5b505afa158015610d36573d6000803e3d6000fd5b505050506040513d6020811015610d4c57600080fd5b5051600b549190039150610d64576000915050610c5b565b600c54600e5482600b548403860281610d7957fe5b040281610d8257fe5b049392505050565b6000670de0b6b3a7640000841115610da857670de0b6b3a764000093505b670de0b6b3a7640000831115610dc457670de0b6b3a764000092505b670de0b6b3a7640000821115610de057670de0b6b3a764000091505b64e8d4a51000341015610df257600080fd5b6000610dfd34610c60565b6001600160a01b03871660009081526007602090815260408083208054348690039081019091556008909252909120805442808402600160401b02918201909255600c805484019055600d8054909101905591925090610e5c82611e4a565b9350610e6b8885898989611ee0565b60048054850190556001600160a01b0388166000908152602081905260408120805486019055600b5415610ebe57600160401b840290506000600b548281610eaf57fe5b60118054929091049091019055505b604080513481526020810187905280820183905290516001600160a01b038b16917fbeae048c6d270d9469f86cf6e8fedda3c60ad770f16c24c9fc131c8e9a09101d919081900360600190a250505050949350505050565b6000813b8015610f2a576001915050610c5b565b6000915050610c5b565b50919050565b6004545b90565b60026020526000908152604090205481565b33600081815260096020526040812054909190808411801590610f765750600084115b610f7f57600080fd5b600b548410610f8d57600080fd5b6001600160a01b0382166000908152600a6020526040812054601154830203908286830281610fb857fe5b6011546001600160a01b0387166000908152600a602090815260408083208054948d02969095049586039093019093556009909252902080548890039055600b805488900390819055909150818161100c57fe5b601180549290910490910190556012546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018a90529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561106f57600080fd5b505af1158015611083573d6000803e3d6000fd5b505050506040513d602081101561109957600080fd5b505060408051878152600160401b8304602082015281516001600160a01b038716927ff597bb09fb98a90b578e74952df9d7e06d7505f52a264d786bb11770873dccb2928290030190a2600160401b900495945050505050565b600060045482111561110457600080fd5b600061110f83611f2b565b9050600061111c82610c60565b90506000610c558383611e38565b6001600160a01b038316600090815260056020908152604080832033808552925282205483111561115a57600080fd5b806001600160a01b0316856001600160a01b0316146111a0576001600160a01b038086166000908152600560209081526040808320938516835292905220805484900390555b6111ab858585611f9e565b60019150505b9392505050565b600e5481565b60006020819052908152604090205481565b600b5481565b336000818152600a602090815260408083205460099092528220546011549293920203600160401b81048085118015906112105750600085115b61121957600080fd5b6001600160a01b0383166000908152600960205260409020548186810382028161123f57fe5b6001600160a01b0380871660009081526009602090815260408083209590940494859055601254600654855163a9059cbb60e01b81529085166004820152958703602487018190529451949593169363a9059cbb93604480820194918390030190829087803b1580156112b157600080fd5b505af11580156112c5573d6000803e3d6000fd5b505050506040513d60208110156112db57600080fd5b5050600b80548290039055601154600090820284868a02816112f957fe5b6001600160a01b0389166000818152600a6020526040808220805495909404959095039384019092556010805484019055925191935091908a908381818185875af1925050503d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b50509050806113b9576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b604080518a81526020810185905281516001600160a01b038a16927ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568928290030190a25090979650505050505050565b601281565b600080600061141c3361165f565b925092509250909192565b60045481565b6001600160a01b03166000908152600a6020908152604080832054600990925290912054601154600160401b9102919091030490565b60115481565b60006004546000141561148257506414f46b0400610f3e565b6000611495670de0b6b3a7640000611f2b565b905060006114a282610c60565b905060006114b08383611e38565b9350610f3e92505050565b600a6020526000908152604090205481565b6000806000806000806114df87611f2b565b6001600160a01b038916600090815260208181526040808320546007909252822054929350909189028161150f57fe5b6001600160a01b038b166000908152600760209081526040808320546008909252822054939092049350918161154157fe5b6001600160a01b038c1660009081526020818152604080832054600890925282205493909204935042600160401b02849003929091908c028161158057fe5b04600f54019050600084600e540190506000600e54600c5403600f54600d5403816115a757fe5b04600160401b420203905086878783878a02816115c057fe5b0402816115c957fe5b919d5090049a509198509650929450505050509295509295909350565b60105481565b6001600160a01b031660009081526020819052604090205490565b60086020526000908152604090205481565b600060045460001415611632575064199c82cc00610f3e565b6000611645670de0b6b3a7640000611f2b565b9050600061165282610c60565b919091019150610f3e9050565b6001600160a01b038116600090815260208190526040812054819081908061169257600080600093509350935050611709565b6001600160a01b0385166000908152600160205260409020548190816116b457fe5b6001600160a01b038716600090815260026020526040902054919004908290816116da57fe5b6001600160a01b0388166000908152600360205260409020549190049083908161170057fe5b04935093509350505b9193909250565b60076020526000908152604090205481565b6040518060400160405280600581526020016450695a5a6160d81b81525081565b60016020526000908152604090205481565b6012546001600160a01b031681565b6000606061177184610f16565b15611789576117818484836120a2565b915050610c28565b611781848483612243565b600d5481565b600080600061141c6117ab336115ec565b61230f565b6117b861179a565b5050506117cc6117c73361142d565b6111d6565b50565b60408051600380825260808201909252600091606091906020820183803683370190505090506117fe3361165f565b8360008151811061180b57fe5b602002602001018460018151811061181f57fe5b602002602001018560028151811061183357fe5b60200260200101838152508381525083815250505050611891338260008151811061185a57fe5b60200260200101518360018151811061186f57fe5b60200260200101518460028151811061188457fe5b6020026020010151610d8a565b91505090565b60036020526000908152604090205481565b60006118b484610f16565b156118cb576118c48484846120a2565b90506111b1565b6118c4848484612243565b6012546001600160a01b031633141561199d576001600160a01b0384166000818152600960209081526040808320805488019055600b805488019055601154600a83529281902080549388029384019055601080548401905580518781529182018181529082018590529192917f496d21a3791df17b9e71acba0bd6c88352f3da2636dc2bfae959f09af6c4fb999187918791879160608201848480828437600083820152604051601f909101601f1916909201829003965090945050505050a2506119d4565b6040805162461bcd60e51b81526020600482015260076024820152661b9bc81dd85b9d60ca1b604482015290519081900360640190fd5b50505050565b336000818152600a60209081526040808320546009909252822054601154929384939092910203600160401b810480861115611a475760405162461bcd60e51b81526004018080602001828103825260218152602001806129b46021913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205481878103820281611a6d57fe5b6001600160a01b0380871660009081526009602090815260408083209590940494859055601254600654855163a9059cbb60e01b81529085166004820152958703602487018190529451949593169363a9059cbb93604480820194918390030190829087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050506040513d6020811015611b0957600080fd5b5050600b80548290039055601154600090820284868b0281611b2757fe5b6001600160a01b0389166000908152600a6020526040902080549290910492909203908101909155601080548201905590508864e8d4a51000811015611b6c57600080fd5b6000611b7782610c60565b6001600160a01b03891660009081526007602090815260408083208054858803908101909155600890925282208054428302600160401b02908101909155600c805483019055600d80549091019055919250611bd282611e4a565b6040805160038082526080820190925291925060609190602082018380368337019050509050611c018b61165f565b83600081518110611c0e57fe5b6020026020010184600181518110611c2257fe5b6020026020010185600281518110611c3657fe5b60200260200101838152508381525083815250505050611c958b8383600081518110611c5e57fe5b602002602001015184600181518110611c7357fe5b602002602001015185600281518110611c8857fe5b6020026020010151611ee0565b600b5460009015611cc557600160401b850290506000600b548281611cb657fe5b60118054929091049091019055505b60048054840190556001600160a01b038c166000818152602081815260409182902080548701905581518981529081018b90528082018690526060810184905290517fc7209ba1b691ad661f5afd3d5360a45f0f4e3dac25357bf4f346e73166f35c939181900360800190a250909b50949950505050505050505050915091565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6000600160401b600e54600c5403600f54600d540381611d8d57fe5b0481611d9557fe5b044203905090565b60096020526000908152604090205481565b600f5481565b600c5481565b600080600080611dca336115ec565b905084811015611e21576040805162461bcd60e51b815260206004820152601b60248201527f416d6f756e74206973206d6f7265207468616e2062616c616e63650000000000604482015290519081900360640190fd5b611e2a8561230f565b919790965090945092505050565b600082821115611e4457fe5b50900390565b6004546000906c01431e0fae6d7217caa00000009082906402540be400611ecf611ec9730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e400000000000000016127f0565b85611e38565b81611ed657fe5b0403949350505050565b6001600160a01b039490941660009081526001602090815260408083208054958702909501909455600281528382208054938602909301909255600390915220805491909202019055565b600454600090670de0b6b3a7640000808401918101908390611f8d866402540be4008386046402540be4000264174876e8000103026002670de0b6b3a7640000876002890a0381611f7857fe5b046402540be4000281611f8757fe5b04611e38565b81611f9457fe5b0495945050505050565b6001600160a01b038316600090815260208190526040902054808211801590611fc75750600082115b611fd057600080fd5b6001600160a01b0384166000908152600760205260408120548290840281611ff457fe5b6001600160a01b03871660009081526008602052604081205492909104925090839085028161201f57fe5b6001600160a01b03808916600090815260076020818152604080842080548a9003905560088083528185208054989097049788900390965583825280842080548c90039055938b168352908152828220805488019055928352818120805485019055918290529020805486019055905061209a868686612821565b505050505050565b60006120af338585611f9e565b60405163607705c560e11b815233600482018181526024830186905260606044840190815285516064850152855188946001600160a01b0386169463c0ee0b8a9490938a938a9360840190602085019080838360005b8381101561211d578181015183820152602001612105565b50505050905090810190601f16801561214a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50505050846001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1686866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121fd5781810151838201526020016121e5565b50505050905090810190601f16801561222a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3506001949350505050565b6000612250338585611f9e565b836001600160a01b0316336001600160a01b03167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c1685856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122ca5781810151838201526020016122b2565b50505050905090810190601f1680156122f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35060019392505050565b60408051600580825260c082019092526000918291829133916060916020820160a08036833701905050905061234582876114cd565b8560008151811061235257fe5b602002602001018660018151811061236657fe5b602002602001018760028151811061237a57fe5b602002602001018860038151811061238e57fe5b60200260200101896004815181106123a257fe5b602002602001018581525085815250858152508581525085815250505050505060006123e1826000815181106123d457fe5b6020026020010151610c60565b60408051600380825260808201909252919250606091906020820183803683370190505090506124108461165f565b8360008151811061241d57fe5b602002602001018460018151811061243157fe5b602002602001018560028151811061244557fe5b60209081029190910101929092529190525260125483516001600160a01b039091169063f92883a29086908690600190811061247d57fe5b60200260200101518460008151811061249257fe5b6020026020010151856001815181106124a757fe5b6020026020010151866002815181106124bc57fe5b60200260200101516040518663ffffffff1660e01b815260040180866001600160a01b0316815260200185815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b15801561251f57600080fd5b505af1158015612533573d6000803e3d6000fd5b505050508260028151811061254457fe5b6020026020010151600f819055508260038151811061255f57fe5b602090810291909101810151600e556001600160a01b03851660009081528082526040808220546007909352902054898203028161259957fe5b6001600160a01b038616600090815260076020908152604080832094909304909355808352818120546008909352205489820302816125d457fe5b6001600160a01b038616600090815260086020526040812092909104909155835183908590839061260157fe5b602090810291909101810151600480548d900390556001600160a01b03881660009081529182905260409091205491900391506126439086908b8103906128e9565b6001600160a01b038516600090815260208190526040812080548b90039055600b541561268f57600160401b840290506000600b54828161268057fe5b60118054929091049091019055505b6040516000906001600160a01b0388169084908381818185875af1925050503d80600081146126da576040519150601f19603f3d011682016040523d82523d6000602084013e6126df565b606091505b5050905080612728576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b866001600160a01b03167f20a7fc03b19d7f251cc907f177ff82194c6aebe9a2b47e1cd734dcb6bf772cc28c858960018151811061276257fe5b6020026020010151868b60048151811061277857fe5b6020026020010151604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a282866001815181106127bf57fe5b6020026020010151876004815181106127d457fe5b6020026020010151995099509950505050505050509193909250565b80600260018201045b81811015610f345780915060028182858161281057fe5b04018161281957fe5b0490506127f9565b600080600061285586856000808a6001600160a01b03166001600160a01b031681526020019081526020016000205461292b565b6001600160a01b039889166000818152600160208181526040808420805489900390556002808352818520805489900390556003808452828620805489900390559d909e1680855292825280842080549098019097559b8c528582208054909501909455988a5283892080549092019091558752968690528086208054869003905595855250505091902080549091019055565b6128f483838361292b565b6001600160a01b03909516600090815260016020908152604080832060028352818420600390935292209690965594559092555050565b6001600160a01b03831660009081526001602052604081205481908190849086028161295357fe5b6001600160a01b03881660009081526002602052604090205491900490859087028161297b57fe5b6001600160a01b0389166000908152600360205260409020549190049086908802816129a357fe5b049250925092509350935093905056fe74686520616d6f756e74206578636565647320746f74616c206561726e696e6773a2646970667358221220956c84691b2b41edc938ab79bd1d0750456b65d4a60db8bcdbfc50b630d6e3f464736f6c634300060c0033
Deployed Bytecode Sourcemap
4549:20282:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5026:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4020:223;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4020:223:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21999:375;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21999:375:0;;:::i;:::-;;;;;;;;;;;;;;;;6318:338;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6318:338:0;;:::i;11259:1695::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11259:1695:0;;;;;;;;;;;;;;;;;;:::i;4251:291::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4251:291:0;-1:-1:-1;;;;;4251:291:0;;:::i;522:91::-;;;;;;;;;;;;;:::i;236:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;236:40:0;-1:-1:-1;;;;;236:40:0;;:::i;19343:1010::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19343:1010:0;;:::i;22388:392::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22388:392:0;;:::i;3616:322::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3616:322:0;;;;;;;;;;;;;;;;;:::i;5887:26::-;;;;;;;;;;;;;:::i;147:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;147:43:0;-1:-1:-1;;;;;147:43:0;;:::i;5717:33::-;;;;;;;;;;;;;:::i;18034:1215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18034:1215:0;;:::i;5116:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;931:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;325:24;;;;;;;;;;;;;:::i;10977:191::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10977:191:0;-1:-1:-1;;;;;10977:191:0;;:::i;6141:33::-;;;;;;;;;;;;;:::i;21471:520::-;;;;;;;;;;;;;:::i;5606:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5606:41:0;-1:-1:-1;;;;;5606:41:0;;:::i;13123:1153::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13123:1153:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5983:28;;;;;;;;;;;;;:::i;621:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;621:106:0;-1:-1:-1;;;;;621:106:0;;:::i;5283:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5283:55:0;-1:-1:-1;;;;;5283:55:0;;:::i;20954:509::-;;;;;;;;;;;;;:::i;1036:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1036:267:0;-1:-1:-1;;;;;1036:267:0;;:::i;5157:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5157:51:0;-1:-1:-1;;;;;5157:51:0;;:::i;5073:39::-;;;;;;;;;;;;;:::i;194:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;194:38:0;-1:-1:-1;;;;;194:38:0;;:::i;6211:25::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;6211:25:0;;;;;;;;;;;;;;2008:364;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2008:364:0;;;;;;;;:::i;5857:26::-;;;;;;;;;;;;;:::i;9728:150::-;;;;;;;;;;;;;:::i;10328:101::-;;;;;;;;;;;;;:::i;:::-;;10518:208;;;:::i;280:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;280:39:0;-1:-1:-1;;;;;280:39:0;;:::i;1636:241::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1636:241:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1636:241:0;;-1:-1:-1;1636:241:0;;-1:-1:-1;;;;;1636:241:0:i;17295:496::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17295:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17295:496:0;;-1:-1:-1;17295:496:0;-1:-1:-1;17295:496:0;:::i;6930:2761::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6930:2761:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3488:117;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3488:117:0;;;;;;;;;;:::i;12959:159::-;;;;;;;;;;;;;:::i;5417:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5417:48:0;-1:-1:-1;;;;;5417:48:0;;:::i;5917:27::-;;;;;;;;;;;;;:::i;5828:25::-;;;;;;;;;;;;;:::i;9883:356::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9883:356:0;;:::i;5026:43::-;;;;;;;;;;;;;;-1:-1:-1;;;5026:43:0;;;;:::o;4020:223::-;4110:10;4079:4;4131:17;;;:9;:17;;;;;;;;-1:-1:-1;;;;;4131:22:0;;;;;;;;;;;:31;;;4180;;;;;;;4079:4;;4110:10;4131:22;;4110:10;;4180:31;;;;;;;;;;;4231:4;4224:11;;;4020:223;;;;;:::o;21999:375::-;22108:7;22133:18;22154:25;22162:16;22154:7;:25::i;:::-;22133:46;;22190:22;22215:38;22224:16;22242:10;22215:8;:38::i;:::-;22190:63;;22264:23;22290:33;22308:14;22290:17;:33::i;:::-;22264:59;-1:-1:-1;;;;21999:375:0;;;;:::o;6318:338::-;6443:12;;:36;;;-1:-1:-1;;;6443:36:0;;6373:8;6443:36;;;;;;;;6373:8;;;;-1:-1:-1;;;;;6443:12:0;;;;:22;;:36;;;;;;;;;;;;;;:12;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6443:36:0;6414:12;;:26;;;-1:-1:-1;;;6414:26:0;;;;-1:-1:-1;;;;;6414:12:0;;;;:24;;:26;;;;;6443:36;;6414:26;;;;;;;;:12;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6414:26:0;6489:18;;6414:65;;;;-1:-1:-1;6484:43:0;;6526:1;6519:8;;;;;6484:43;6638:13;;6621:14;;6600:18;6577;;6556;:39;6541:10;:56;:77;;;;;;:94;:110;;;;;;;6318:338;-1:-1:-1;;;6318:338:0:o;11259:1695::-;11345:17;11376:4;11371;:9;11368:25;;;11389:4;11382:11;;11368:25;11408:4;11401:6;:11;11398:29;;;11423:4;11414:13;;11398:29;11441:4;11435:5;:10;11432:27;;;11455:4;11447:12;;11432:27;11585:14;11573:9;:26;11568:46;;;11606:8;;;11568:46;11645:8;11656:18;11664:9;11656:7;:18::i;:::-;-1:-1:-1;;;;;11850:22:0;;11750:13;11850:22;;;:16;:22;;;;;;;;:34;;11766:9;:15;;;11850:34;;;;;;11889:20;:26;;;;;;:66;;11842:3;11919:36;;;-1:-1:-1;;;11919:36:0;11889:66;;;;;;11960:13;:25;;;;;;11990:14;:54;;;;;;;11645:29;;-1:-1:-1;11766:15:0;12129:27;11766:15;12129:17;:27::i;:::-;12114:42;;12161:49;12170:4;12176:12;12190:4;12196:6;12204:5;12161:8;:49::i;:::-;12265:12;:28;;;;;;-1:-1:-1;;;;;12352:14:0;;12265:12;12352:14;;;;;;;;;;:30;;;;;;12455:18;;:22;12451:418;;-1:-1:-1;;;12498:3:0;:17;12485:30;;12700:21;12735:18;;12724:10;:29;;;;;12825:18;:38;;12724:29;;;;12825:38;;;;;-1:-1:-1;12451:418:0;12878:47;;;12889:9;12878:47;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12878:47:0;;;;;;;;;;;;;12930:19;;;;11259:1695;;;;;;:::o;4251:291::-;4307:16;4446:18;;4476:8;;4473:65;;4499:4;4492:11;;;;;4473:65;4527:5;4520:12;;;;;4473:65;4251:291;;;;:::o;522:91::-;593:12;;522:91;;:::o;236:40::-;;;;;;;;;;;;;:::o;19343:1010::-;19432:10;19394:15;19463:23;;;:13;:23;;;;;;19394:15;;19432:10;19499:18;;;;;;:32;;;19530:1;19521:6;:10;19499:32;19491:41;;;;;;19554:18;;19545:6;:27;19537:36;;;;;;-1:-1:-1;;;;;19692:15:0;;19618:22;19692:15;;;:7;:15;;;;;;19670:18;;19659:29;;19650:57;;19659:8;19738:26;;;19659:8;19738:37;;;;19962:18;;-1:-1:-1;;;;;19904:15:0;;;;;;:7;:15;;;;;;;;:86;;19962:27;;;19738:37;;;;19923:67;;;19904:86;;;;;;19997:13;:21;;;;;:31;;;;;;;20033:18;:28;;;;;;;;;19738:37;;-1:-1:-1;19738:37:0;20033:28;20149:38;;;;20127:18;:60;;20149:38;;;;20127:60;;;;;20194:12;;:39;;;-1:-1:-1;;;20194:39:0;;-1:-1:-1;;;;;20194:39:0;;;;;;;;;;;;;;;:12;;;;;:21;;:39;;;;;;;;;;;;;;-1:-1:-1;20194:12:0;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20243:62:0;;;;;;-1:-1:-1;;;20273:31:0;;20243:62;;;;;;-1:-1:-1;;;;;20243:62:0;;;;;;;;;;;-1:-1:-1;;;20317:31:0;;;;-1:-1:-1;;;;;19343:1010:0:o;22388:392::-;22496:7;22546:12;;22529:13;:29;;22521:38;;;;;;22570:17;22590:32;22608:13;22590:17;:32::i;:::-;22570:52;;22633:18;22654:19;22662:9;22654:7;:19::i;:::-;22633:40;;22684:22;22709:31;22718:9;22729:10;22709:8;:31::i;3616:322::-;-1:-1:-1;;;;;3752:14:0;;3693:4;3752:14;;;:9;:14;;;;;;;;3723:10;3752:22;;;;;;;;:33;-1:-1:-1;3752:33:0;3744:42;;;;;;3808:6;-1:-1:-1;;;;;3801:13:0;:3;-1:-1:-1;;;;;3801:13:0;;3797:79;;-1:-1:-1;;;;;3831:14:0;;;;;;;:9;:14;;;;;;;;:22;;;;;;;;;:33;;;;;;;3797:79;3880:26;3891:3;3895;3899:6;3880:10;:26::i;:::-;3926:4;3919:11;;;3616:322;;;;;;:::o;5887:26::-;;;;:::o;147:43::-;;;;;;;;;;;;;;:::o;5717:33::-;;;;:::o;18034:1215::-;18115:10;18080:4;18299:15;;;:7;:15;;;;;;;;;18273:13;:21;;;;;;18252:18;;18080:4;;18115:10;18252:42;18242:72;-1:-1:-1;;;18341:25:0;;18380:23;;;;;;:37;;;18416:1;18407:6;:10;18380:37;18371:48;;;;;;-1:-1:-1;;;;;18441:21:0;;18424:14;18441:21;;;:13;:21;;;;;;18532:13;18505:22;;;18491:38;;18532:13;18491:54;;;;-1:-1:-1;;;;;18467:21:0;;;;;;;:13;:21;;;;;;;;18491:54;;;;18467:78;;;;18606:12;;18629:8;;18606:44;;-1:-1:-1;;;18606:44:0;;18629:8;;;18606:44;;;;18568:33;;;18606:44;;;;;;;;18568:33;;18606:12;;;:21;;:44;;;;;;;;;;;;;:12;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18655:18:0;:32;;;;;;;18816:18;;18655;;18805:29;;18782:13;18759:20;;;18782:13;18759:36;;;;-1:-1:-1;;;;;18840:15:0;;;;;;:7;:15;;;;;;:36;;18759;;;;18753:82;;;;18840:36;;;;;;18958:14;:35;;;;;;19096:30;;18753:82;;-1:-1:-1;18840:15:0;;19115:6;;18840:15;19096:30;18840:15;19096:30;19115:6;18840:15;19096:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19077:49;;;19145:7;19137:36;;;;;-1:-1:-1;;;19137:36:0;;;;;;;;;;;;-1:-1:-1;;;19137:36:0;;;;;;;;;;;;;;;19185:37;;;;;;;;;;;;;;-1:-1:-1;;;;;19185:37:0;;;;;;;;;;;-1:-1:-1;19234:10:0;;18034:1215;-1:-1:-1;;;;;;;18034:1215:0:o;5116:35::-;5149:2;5116:35;:::o;931:98::-;972:4;977;982;1001:21;1011:10;1001:9;:21::i;:::-;994:28;;;;;;931:98;;;:::o;325:24::-;;;;:::o;10977:191::-;-1:-1:-1;;;;;11133:15:0;11039:14;11133:15;;;:7;:15;;;;;;;;;11108:13;:21;;;;;;;11087:18;;-1:-1:-1;;;11087:42:0;;11078:70;;;;11067:96;;10977:191::o;6141:33::-;;;;:::o;21471:520::-;21542:7;21650:12;;21666:1;21650:17;21647:337;;;-1:-1:-1;21690:43:0;21683:50;;21647:337;21766:17;21786:23;21804:4;21786:17;:23::i;:::-;21766:43;;21824:18;21845:20;21853:9;21845:7;:20::i;:::-;21824:41;;21880:22;21905:31;21914:9;21925:10;21905:8;:31::i;:::-;21880:56;-1:-1:-1;21951:21:0;;-1:-1:-1;;;21951:21:0;5606:41;;;;;;;;;;;;;:::o;13123:1153::-;13205:15;13222:19;13243:23;13268:22;13292:21;13319:15;13337:32;13355:13;13337:17;:32::i;:::-;-1:-1:-1;;;;;13432:14:0;;13374;13432;;;;;;;;;;;;13391:16;:22;;;;;;13319:50;;-1:-1:-1;13374:14:0;;13391:38;;13432:14;13391:55;;;;-1:-1:-1;;;;;13676:22:0;;13630:14;13676:22;;;:16;:22;;;;;;;;;13647:20;:26;;;;;;13391:55;;;;;-1:-1:-1;13630:14:0;13676:22;13647:51;;;;-1:-1:-1;;;;;13846:14:0;;13703:16;13846:14;;;;;;;;;;;;13801:20;:26;;;;;;13647:51;;;;;-1:-1:-1;13722:3:0;-1:-1:-1;;;13722:17:0;:29;;;;13703:16;;13846:14;13801:42;;13846:14;13801:59;;;;;13783:15;;:77;13756:104;;13865:23;13908:9;13891:14;;:26;13865:52;;14005:23;14108:14;;14092:13;;:30;14070:15;;14053:14;;:32;14051:73;;;;;;-1:-1:-1;;;14031:3:0;:17;:93;14005:119;;14137:10;14208;14196:9;14175:18;14161:11;14149:9;:23;:44;;;;;;:56;:69;;;;;14129:142;;-1:-1:-1;14149:69:0;;;-1:-1:-1;14220:19:0;;-1:-1:-1;14241:18:0;-1:-1:-1;14261:9:0;;-1:-1:-1;;;;;13123:1153:0;;;;;;;;:::o;5983:28::-;;;;:::o;621:106::-;-1:-1:-1;;;;;706:16:0;677:15;706:16;;;;;;;;;;;;621:106::o;5283:55::-;;;;;;;;;;;;;:::o;20954:509::-;21023:7;21131:12;;21147:1;21131:17;21128:328;;;-1:-1:-1;21171:43:0;21164:50;;21128:328;21247:17;21267:23;21285:4;21267:17;:23::i;:::-;21247:43;;21305:18;21326:20;21334:9;21326:7;:20::i;:::-;21386:22;;;;;-1:-1:-1;21423:21:0;;-1:-1:-1;21423:21:0;1036:267;-1:-1:-1;;;;;1132:14:0;;1089:4;1132:14;;;;;;;;;;;1089:4;;;;1157:16;1153:51;;1190:1;1192;1194;1182:14;;;;;;;;;1153:51;-1:-1:-1;;;;;1219:9:0;;;;;;:3;:9;;;;;;1229:13;;;1219:23;;;;-1:-1:-1;;;;;1244:11:0;;;;;;:5;:11;;;;;;1219:23;;;;1256:13;;;1244:25;;;;-1:-1:-1;;;;;1271:10:0;;;;;;:4;:10;;;;;;1244:25;;;;1282:13;;;1271:24;;;;;1210:86;;;;;;;1036:267;;;;;;:::o;5157:51::-;;;;;;;;;;;;;:::o;5073:39::-;;;;;;;;;;;;;;-1:-1:-1;;;5073:39:0;;;;:::o;194:38::-;;;;;;;;;;;;;:::o;6211:25::-;;;-1:-1:-1;;;;;6211:25:0;;:::o;2008:364::-;2076:4;2209:18;2235:15;2246:3;2235:10;:15::i;:::-;2232:136;;;2264:38;2283:3;2288:6;2296:5;2264:18;:38::i;:::-;2257:45;;;;;2232:136;2325:37;2343:3;2348:6;2356:5;2325:17;:37::i;5857:26::-;;;;:::o;9728:150::-;9767:17;9786:22;9810:21;9844:29;9850:21;9860:10;9850:9;:21::i;:::-;9844:4;:29::i;10328:101::-;10366:14;:12;:14::i;:::-;;;;10385:39;10395:27;10411:10;10395:15;:27::i;:::-;10385:8;:39::i;:::-;;10328:101::o;10518:208::-;10600:13;;;10611:1;10600:13;;;;;;;;;10557:17;;10580;;10600:13;;;;10580:17;;10600:13;;;;;-1:-1:-1;10600:13:0;10580:33;;10647:21;10657:10;10647:9;:21::i;:::-;10621:3;10625:1;10621:6;;;;;;;;;;;;;10629:3;10633:1;10629:6;;;;;;;;;;;;;10637:3;10641:1;10637:6;;;;;;;;;;;;;10620:48;;;;;;;;;;;;;;;10680:39;10684:10;10696:3;10700:1;10696:6;;;;;;;;;;;;;;10704:3;10708:1;10704:6;;;;;;;;;;;;;;10712:3;10716:1;10712:6;;;;;;;;;;;;;;10680:3;:39::i;:::-;10673:46;;;10518:208;:::o;280:39::-;;;;;;;;;;;;;:::o;1636:241::-;1724:4;1739:15;1750:3;1739:10;:15::i;:::-;1735:138;;;1769:38;1788:3;1793:6;1801:5;1769:18;:38::i;:::-;1762:45;;;;1735:138;1830:37;1848:3;1853:6;1861:5;1830:17;:37::i;17295:496::-;17404:12;;-1:-1:-1;;;;;17404:12:0;17382:10;:35;17379:408;;;-1:-1:-1;;;;;17425:19:0;;;;;;:13;:19;;;;;;;;:28;;;;;;17459:18;:27;;;;;;17608:18;;17641:7;:13;;;;;;:27;;17608:26;;;17641:27;;;;;17674:14;:28;;;;;;17715:33;;;;;;;;;;;;;;;;;17608:26;;17425:19;17715:33;;17448:5;;17742;;;;17715:33;;;17742:5;;;;17715:33;;;;;;;;;;;;;-1:-1:-1;;17715:33:0;;;;;;;;-1:-1:-1;17715:33:0;;-1:-1:-1;;;;;17715:33:0;17379:408;;;;17764:17;;;-1:-1:-1;;;17764:17:0;;;;;;;;;;;;-1:-1:-1;;;17764:17:0;;;;;;;;;;;;;;17379:408;17295:496;;;;:::o;6930:2761::-;7028:10;6996:4;7214:15;;;:7;:15;;;;;;;;;7188:13;:21;;;;;;7167:18;;6996:4;;;;7028:10;;7167:42;;7157:72;-1:-1:-1;;;7256:25:0;;7320:35;;;;7312:81;;;;-1:-1:-1;;;7312:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7415:21:0;;7398:14;7415:21;;;:13;:21;;;;;;7516:13;7478:34;;;7465:48;;7516:13;7465:64;;;;-1:-1:-1;;;;;7441:21:0;;;;;;;:13;:21;;;;;;;;7465:64;;;;7441:88;;;;7590:12;;7613:8;;7590:45;;-1:-1:-1;;;7590:45:0;;7613:8;;;7590:45;;;;7552:33;;;7590:45;;;;;;;;7552:33;;7590:12;;;:21;;:45;;;;;;;;;;;;;:12;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7640:18:0;:32;;;;;;;7813:18;;7640;;7802:29;;7779:13;7744:32;;;7779:13;7744:48;;;;-1:-1:-1;;;;;7837:15:0;;;;;;:7;:15;;;;;:36;;7744:48;;;;7738:94;;;;7837:36;;;;;;7955:14;:35;;;;;;7738:94;-1:-1:-1;8059:18:0;8164:14;8155:23;;8151:41;;;8184:8;;;8151:41;8223:8;8234:15;8242:6;8234:7;:15::i;:::-;-1:-1:-1;;;;;8394:24:0;;8324:13;8394:24;;;:16;:24;;;;;;;;:36;;8340:12;;;8394:36;;;;;;8435:20;:28;;;;;:60;;8467:3;:28;;-1:-1:-1;;;8467:28:0;8435:60;;;;;;8500:13;:25;;;;;;8530:14;:46;;;;;;;8223:26;;-1:-1:-1;8666:27:0;8340:12;8666:17;:27::i;:::-;8718:13;;;8729:1;8718:13;;;;;;;;;8646:47;;-1:-1:-1;8698:17:0;;8718:13;;;;8698:17;;8718:13;;;;;-1:-1:-1;8718:13:0;8698:33;;8765:17;8775:6;8765:9;:17::i;:::-;8739:3;8743:1;8739:6;;;;;;;;;;;;;8747:3;8751:1;8747:6;;;;;;;;;;;;;8755:3;8759:1;8755:6;;;;;;;;;;;;;8738:44;;;;;;;;;;;;;;;8791:54;8800:6;8808:12;8822:3;8826:1;8822:6;;;;;;;;;;;;;;8830:3;8834:1;8830:6;;;;;;;;;;;;;;8838:3;8842:1;8838:6;;;;;;;;;;;;;;8791:8;:54::i;:::-;8981:18;;8912:15;;8981:22;8976:425;;-1:-1:-1;;;9025:3:0;:17;9012:30;;9232:21;9269:18;;9256:10;:31;;;;;9357:18;:38;;9256:31;;;;9357:38;;;;;-1:-1:-1;8976:425:0;9455:12;:28;;;;;;-1:-1:-1;;;;;9542:16:0;;9455:12;9542:16;;;;;;;;;;;;:32;;;;;;9586:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9661:12:0;;-1:-1:-1;9675:10:0;;-1:-1:-1;;;;;;;;;;6930:2761:0;;;:::o;3488:117::-;-1:-1:-1;;;;;3578:14:0;;;3554:4;3578:14;;;:9;:14;;;;;;;;:19;;;;;;;;;;;;;3488:117::o;12959:159::-;12998:13;-1:-1:-1;;;13084:14:0;;13068:13;;:30;13048:15;;13031:14;;:32;13030:69;;;;;;:83;;;;;;13024:3;:89;13017:96;;12959:159;:::o;5417:48::-;;;;;;;;;;;;;:::o;5917:27::-;;;;:::o;5828:25::-;;;;:::o;9883:356::-;9930:17;9949:22;9973:21;10000:12;10015:21;10025:10;10015:9;:21::i;:::-;10000:36;;10060:6;10049:7;:17;;10041:57;;;;;-1:-1:-1;;;10041:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10159:12;10164:6;10159:4;:12::i;:::-;10103:68;;;;-1:-1:-1;10103:68:0;;-1:-1:-1;9883:356:0;-1:-1:-1;;;9883:356:0:o;24700:128::-;24763:7;24795:1;24790;:6;;24783:14;;;;-1:-1:-1;24815:5:0;;;24700:128::o;22788:972::-;23692:12;;22883:7;;22937:25;;22883:7;;4959:16;23088:551;23120:457;23266:52;;;23382:27;23491:1;23412:15;;23381:47;23181:248;23491:45;:58;;23181:369;23182:21;23181:369;23120:4;:457::i;:::-;23602:18;23088:8;:551::i;:::-;23025:654;;;;;;23010:695;;22788:972;-1:-1:-1;;;;22788:972:0:o;732:190::-;-1:-1:-1;;;;;826:9:0;;;;;;;;:3;:9;;;;;;;;:25;;839:12;;;826:25;;;;;;856:5;:11;;;;;:29;;871:14;;;856:29;;;;;;890:4;:10;;;;:27;;904:13;;;;890:27;;;732:190::o;23768:718::-;23957:12;;23861:7;;23917:4;23907:14;;;;23957:19;;;23861:7;;24077:353;23907:7;4959:16;23917:4;23957:19;24232:17;4959:16;24206:44;4886:15;24185:66;24154:147;24127:214;24414:1;24407:4;24398:7;24396:1;24387:7;:10;:18;24386:25;;;;;;4959:16;24362:50;24361:54;;;;;;24077:8;:353::i;:::-;:368;;;;;;;23768:718;-1:-1:-1;;;;;23768:718:0:o;20358:588::-;-1:-1:-1;;;;;20460:15:0;;20442;20460;;;;;;;;;;;20488:21;;;;;;:36;;;20523:1;20513:7;:11;20488:36;20480:45;;;;;;-1:-1:-1;;;;;20546:23:0;;20530:13;20546:23;;;:16;:23;;;;;;20582:10;;20546:33;;20582:10;20546:46;;;;-1:-1:-1;;;;;20617:27:0;;20597:17;20617:27;;;:20;:27;;;;;;20546:46;;;;;-1:-1:-1;20597:17:0;20657:10;;20617:37;;20657:10;20617:50;;;;-1:-1:-1;;;;;20672:23:0;;;;;;;:16;:23;;;;;;;;:35;;;;;;;20712:20;:27;;;;;;:43;;20617:50;;;;20712:43;;;;;;;20760:15;;;;;;:26;;;;;;;20791:21;;;;;;;;;;;:33;;;;;;20829:25;;;;;;:41;;;;;;20875:13;;;;;;:24;;;;;;20617:50;-1:-1:-1;20904:37:0;20689:5;20808:3;20779:7;20904:16;:37::i;:::-;20358:588;;;;;;:::o;2723:330::-;2814:4;2825:35;2836:10;2848:3;2853:6;2825:10;:35::i;:::-;2933:49;;-1:-1:-1;;;2933:49:0;;2956:10;2933:49;;;;;;;;;;;;;;;;;;;;;;;;;;;2924:3;;-1:-1:-1;;;;;2933:22:0;;;;;2956:10;;2968:6;;2976:5;;2933:49;;;;;;;;;;2865:32;2933:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3013:3;-1:-1:-1;;;;;2992:40:0;3001:10;-1:-1:-1;;;;;2992:40:0;;3018:6;3026:5;2992:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3044:4:0;;2723:330;-1:-1:-1;;;;2723:330:0:o;2445:207::-;2535:4;2546:35;2557:10;2569:3;2574:6;2546:10;:35::i;:::-;2612:3;-1:-1:-1;;;;;2591:40:0;2600:10;-1:-1:-1;;;;;2591:40:0;;2617:6;2625:5;2591:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2643:4:0;2445:207;;;;;:::o;14413:2581::-;14681:13;;;14692:1;14681:13;;;;;;;;;14460:8;;;;;;14533:10;;14659:19;;14681:13;;;;;;;;;;-1:-1:-1;14681:13:0;14659:35;;14872:34;14891:6;14899;14872:18;:34::i;:::-;14704:5;14710:1;14704:8;;;;;;;;;;;;;14737:5;14743:1;14737:8;;;;;;;;;;;;;14769:5;14775:1;14769:8;;;;;;;;;;;;;14805:5;14811:1;14805:8;;;;;;;;;;;;;14840:5;14846:1;14840:8;;;;;;;;;;;;;14699:207;;;;;;;;;;;;;;;;;;;;;;;;;14940:8;14951:37;14959:5;14965:1;14959:8;;;;;;;;;;;;;;14951:7;:37::i;:::-;15040:13;;;15051:1;15040:13;;;;;;;;;14940:48;;-1:-1:-1;15020:17:0;;15040:13;;;;15020:17;;15040:13;;;;;-1:-1:-1;15040:13:0;15020:33;;15087:17;15097:6;15087:9;:17::i;:::-;15061:3;15065:1;15061:6;;;;;;;;;;;;;15069:3;15073:1;15069:6;;;;;;;;;;;;;15077:3;15081:1;15077:6;;;;;;;;;;;;;;;;;15060:44;;;;;;;;15109:12;;15135:8;;-1:-1:-1;;;;;15109:12:0;;;;:17;;15127:6;;15135:5;;15109:12;;15135:8;;;;;;;;;;;;15164:3;15168:1;15164:6;;;;;;;;;;;;;;15172:3;15176:1;15172:6;;;;;;;;;;;;;;15180:3;15184:1;15180:6;;;;;;;;;;;;;;15109:78;;;;;;;;;;;;;-1:-1:-1;;;;;15109:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15255:5;15261:1;15255:8;;;;;;;;;;;;;;15237:15;:26;;;;15308:5;15314:1;15308:8;;;;;;;;;;;;;;;;;;;15291:14;:25;-1:-1:-1;;;;;15537:16:0;;:8;:16;;;;;;;;;;;15479;:24;;;;;;15508:25;;;15479:55;15537:16;15479:74;;;;-1:-1:-1;;;;;15452:24:0;;;;;;:16;:24;;;;;;;;15479:74;;;;15452:101;;;15719:16;;;;;;;15658:20;:28;;;;;15690:25;;;15658:58;15719:16;15658:77;;;;-1:-1:-1;;;;;15627:28:0;;;;;;:20;:28;;;;;15658:77;;;;15627:108;;;15828:8;;15859:3;;15828:5;;15627:28;;15828:8;;;;;;;;;;;;;;;15934:12;:22;;;;;;;-1:-1:-1;;;;;16019:16:0;;15934:12;16019:16;;;;;;;;;;;;15828:34;;;;-1:-1:-1;16000:63:0;;16011:6;;16019:25;;;;16000:9;:63::i;:::-;-1:-1:-1;;;;;16128:16:0;;:8;:16;;;;;;;;;;:26;;;;;;;16228:18;;:22;16223:457;;-1:-1:-1;;;16348:3:0;:17;16335:30;;16511:21;16546:18;;16535:10;:29;;;;;16636:18;:38;;16535:29;;;;16636:38;;;;;-1:-1:-1;16223:457:0;16711:32;;16693:12;;-1:-1:-1;;;;;16711:11:0;;;16729:9;;16693:12;16711:32;16693:12;16711:32;16729:9;16711:11;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16692:51;;;16762:7;16754:36;;;;;-1:-1:-1;;;16754:36:0;;;;;;;;;;;;-1:-1:-1;;;16754:36:0;;;;;;;;;;;;;;;16808:6;-1:-1:-1;;;;;16802:104:0;;16816:6;16824:9;16835:5;16841:1;16835:8;;;;;;;;;;;;;;16864:10;16876:5;16882:1;16876:8;;;;;;;;;;;;;;16802:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16919:9;16930:5;16936:1;16930:8;;;;;;;;;;;;;;16959:5;16965:1;16959:8;;;;;;;;;;;;;;16911:78;;;;;;;;;;;;;14413:2581;;;;;:::o;24494:198::-;24568:5;24577:1;24572;24568:5;;24567:11;24605:80;24616:1;24612;:5;24605:80;;;24638:1;24634:5;;24672:1;24667;24663;24659;:5;;;;;;:9;24658:15;;;;;;24654:19;;24605:80;;3058:422;3142:14;3158:16;3176:15;3195:44;3206:5;3213:7;3222:8;:15;3231:5;-1:-1:-1;;;;;3222:15:0;-1:-1:-1;;;;;3222:15:0;;;;;;;;;;;;;3195:9;:44::i;:::-;-1:-1:-1;;;;;3244:10:0;;;;;;;:3;:10;;;;;;;;:23;;;;;;;3272:5;:12;;;;;;:27;;;;;;;3304:4;:11;;;;;;:25;;;;;;;3334:8;;;;;;;;;;;;;:21;;;;;;;;3360:10;;;;;;:25;;;;;;;;3390:9;;;;;;:23;;;;;;;;3420:15;;;;;;;;;:26;;;;;;;3451:13;;;-1:-1:-1;;;3451:13:0;;;:24;;;;;;;3058:422::o;16999:164::-;17118:38;17129:4;17135:9;17146;17118;:38::i;:::-;-1:-1:-1;;;;;17080:9:0;;;;;;;:3;:9;;;;;;;;17091:5;:11;;;;;17104:4;:10;;;;;17079:77;;;;;;;;;-1:-1:-1;;16999:164:0:o;1310:235::-;-1:-1:-1;;;;;1427:9:0;;1399:4;1427:9;;;:3;:9;;;;;;1399:4;;;;1451:11;;1427:21;;1451:11;1427:35;;;;-1:-1:-1;;;;;1464:11:0;;;;;;:5;:11;;;;;;1427:35;;;;1490:11;;1464:23;;1490:11;1464:37;;;;-1:-1:-1;;;;;1503:10:0;;;;;;:4;:10;;;;;;1464:37;;;;1528:11;;1503:22;;1528:11;1503:36;;;;;1419:121;;;;;;1310:235;;;;;;;:::o
Swarm Source
ipfs://1aa7cd8a42534c2fd1cc8ca4cff235ddf49e03898986818662d4bd30e6b504e2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.03
Net Worth in ETH
0.000015
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,043.96 | 0.0000147 | $0.030053 |
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.