Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 60 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Distribute AUM | 11905678 | 1832 days ago | IN | 0 ETH | 0.19412116 | ||||
| Start | 11288903 | 1927 days ago | IN | 0 ETH | 0.00299824 | ||||
| Deposit | 11287601 | 1927 days ago | IN | 0 ETH | 0.00491241 | ||||
| Deposit | 11286885 | 1927 days ago | IN | 0 ETH | 0.00394137 | ||||
| Deposit | 11286585 | 1927 days ago | IN | 0 ETH | 0.00442116 | ||||
| Deposit | 11286325 | 1928 days ago | IN | 0 ETH | 0.00294744 | ||||
| Deposit | 11286195 | 1928 days ago | IN | 0 ETH | 0.00536241 | ||||
| Deposit | 11285980 | 1928 days ago | IN | 0 ETH | 0.00428992 | ||||
| Deposit | 11285885 | 1928 days ago | IN | 0 ETH | 0.00589865 | ||||
| Deposit | 11285667 | 1928 days ago | IN | 0 ETH | 0.0036953 | ||||
| Deposit | 11282286 | 1928 days ago | IN | 0 ETH | 0.00911609 | ||||
| Deposit | 11281333 | 1928 days ago | IN | 0 ETH | 0.00679238 | ||||
| Deposit | 11281294 | 1928 days ago | IN | 0 ETH | 0.00802419 | ||||
| Deposit | 11280449 | 1928 days ago | IN | 0 ETH | 0.00536241 | ||||
| Deposit | 11279990 | 1928 days ago | IN | 0 ETH | 0.01715856 | ||||
| Deposit | 11278440 | 1929 days ago | IN | 0 ETH | 0.0091167 | ||||
| Deposit | 11275457 | 1929 days ago | IN | 0 ETH | 0.00807096 | ||||
| Deposit | 11275279 | 1929 days ago | IN | 0 ETH | 0.00687787 | ||||
| Deposit | 11274969 | 1929 days ago | IN | 0 ETH | 0.00378283 | ||||
| Deposit | 11274798 | 1929 days ago | IN | 0 ETH | 0.00851422 | ||||
| Deposit | 11274086 | 1929 days ago | IN | 0 ETH | 0.0084011 | ||||
| Deposit | 11273610 | 1929 days ago | IN | 0 ETH | 0.00720486 | ||||
| Deposit | 11273382 | 1930 days ago | IN | 0 ETH | 0.00648808 | ||||
| Deposit | 11273260 | 1930 days ago | IN | 0 ETH | 0.01233437 | ||||
| Deposit | 11272371 | 1930 days ago | IN | 0 ETH | 0.0076961 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xc09b5bf0...F3eC4322a The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
CoolBitETFUSDTAndCompound
Compiler Version
v0.4.26+commit.4563c3fc
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-19
*/
pragma solidity ^0.4.24;
interface ITetherERC20 {
function totalSupply() public view returns (uint supply);
function balanceOf(address _owner) public view returns (uint balance);
function transfer(address _to, uint _value) public;
function transferFrom(address _from, address _to, uint _value) public;
function approve(address _spender, uint _value) public;
function allowance(address _owner, address _spender) public view returns (uint remaining);
function decimals() public view returns(uint8 digits);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
/**
* @title ERC20Basic
* @dev Simpler version of ERC20 interface
* See https://github.com/ethereum/EIPs/issues/179
*/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
*/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances; // Storage slot 0
uint256 totalSupply_; // Storage slot 1
/**
* @dev Total number of tokens in existence
*/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev Transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
*/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
*/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
/**
* @title Standard ERC20 token
*
* @dev Implementation of the basic standard token.
* https://github.com/ethereum/EIPs/issues/20
* Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
*/
contract StandardToken is ERC20, BasicToken {
using SafeMath for uint256;
mapping (address => mapping (address => uint256)) internal allowed; // Storage slot 2
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
*/
function transferFrom(
address _from,
address _to,
uint256 _value
)
public
returns (bool)
{
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
*/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
*/
function allowance(
address _owner,
address _spender
)
public
view
returns (uint256)
{
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
*/
function increaseApproval(
address _spender,
uint256 _addedValue
)
public
returns (bool)
{
allowed[msg.sender][_spender] = (
allowed[msg.sender][_spender].add(_addedValue));
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
*/
function decreaseApproval(
address _spender,
uint256 _subtractedValue
)
public
returns (bool)
{
uint256 oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
contract StandardTokenMintableBurnable is StandardToken {
using SafeMath for uint256;
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
totalSupply_ = totalSupply_.add(amount);
balances[account] = balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function burn(uint256 amount) public {
_burn(msg.sender, amount);
}
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
totalSupply_ = totalSupply_.sub(amount);
balances[account] = balances[account].sub(amount);
emit Transfer(account, address(0), amount);
}
}
contract WhiteListToken is StandardTokenMintableBurnable{
address public whiteListAdmin;
bool public isTransferRestricted;
bool public isReceiveRestricted;
mapping(address => bool) public transferWhiteList;
mapping(address => bool) public receiveWhiteList;
constructor(address _admin) public {
whiteListAdmin = _admin;
isReceiveRestricted = true;
}
modifier isWhiteListAdmin() {
require(msg.sender == whiteListAdmin);
_;
}
function transfer(address _to, uint256 _value) public returns (bool){
if (isTransferRestricted) {
require(transferWhiteList[msg.sender], "only whitelist senders can transfer tokens");
}
if (isReceiveRestricted) {
require(receiveWhiteList[_to], "only whiteList receivers can receive tokens");
}
return super.transfer(_to, _value);
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool){
if (isTransferRestricted) {
require(transferWhiteList[_from], "only whiteList senders can transfer tokens");
}
if (isReceiveRestricted) {
require(receiveWhiteList[_to], "only whiteList receivers can receive tokens");
}
return super.transferFrom(_from, _to, _value);
}
function enableTransfer() isWhiteListAdmin public {
require(isTransferRestricted);
isTransferRestricted = false;
}
function restrictTransfer() isWhiteListAdmin public {
require(isTransferRestricted == false);
isTransferRestricted = true;
}
function enableReceive() isWhiteListAdmin public {
require(isReceiveRestricted);
isReceiveRestricted = false;
}
function restrictReceive() isWhiteListAdmin public {
require(isReceiveRestricted == false);
isReceiveRestricted = true;
}
function removeTransferWhiteListAddress(address _whiteListAddress) public isWhiteListAdmin returns(bool) {
require(transferWhiteList[_whiteListAddress]);
transferWhiteList[_whiteListAddress] = false;
return true;
}
function addTransferWhiteListAddress(address _whiteListAddress) public isWhiteListAdmin returns(bool) {
require(transferWhiteList[_whiteListAddress] == false);
transferWhiteList[_whiteListAddress] = true;
return true;
}
function removeReceiveWhiteListAddress(address _whiteListAddress) public isWhiteListAdmin returns(bool) {
require(receiveWhiteList[_whiteListAddress]);
receiveWhiteList[_whiteListAddress] = false;
return true;
}
function addReceiveWhiteListAddress(address _whiteListAddress) public isWhiteListAdmin returns(bool) {
require(receiveWhiteList[_whiteListAddress] == false);
receiveWhiteList[_whiteListAddress] = true;
return true;
}
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
// Gas optimization: this is cheaper than asserting 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
contract SimpleOracleAccruedRatioUSD {
using SafeMath for uint256;
address public admin;
address public superAdmin;
uint256 public accruedRatioUSD;
uint256 public lastUpdateTime;
uint256 public MAXIMUM_CHANGE_PCT = 3;
constructor(uint256 _accruedRatioUSD, address _admin, address _superAdmin) public {
admin = _admin;
superAdmin = _superAdmin;
accruedRatioUSD = _accruedRatioUSD;
}
modifier onlyAdmin {
require(msg.sender == admin || msg.sender == superAdmin);
_;
}
modifier onlySuperAdmin {
require(msg.sender == superAdmin);
_;
}
function isValidRatio(uint256 _accruedRatioUSD) view internal {
require(_accruedRatioUSD >= accruedRatioUSD, "ratio should be monotonically increased");
uint256 maximumChange = accruedRatioUSD.mul(MAXIMUM_CHANGE_PCT).div(100);
require(_accruedRatioUSD.sub(accruedRatioUSD) < maximumChange, "exceeds maximum chagne");
}
function checkTimeStamp() view internal {
// 82800 = 23 * 60 * 60 (23 hours)
require(block.timestamp.sub(lastUpdateTime) > 82800, "oracle are not allowed to update two times within 23 hours");
}
function set(uint256 _accruedRatioUSD) onlyAdmin public{
if(msg.sender != superAdmin) {
isValidRatio(_accruedRatioUSD);
checkTimeStamp();
}
lastUpdateTime = block.timestamp;
accruedRatioUSD = _accruedRatioUSD;
}
function query() external view returns(uint256) {
// QueryEvent(msg.sender, block.number);
return accruedRatioUSD;
}
}
interface CERC20 {
function mint(uint mintAmount) returns (uint);
function redeem(uint redeemTokens) returns (uint);
function supplyRatePerBlock() returns (uint);
function exchangeRateCurrent() returns (uint);
function balanceOf(address _owner) public view returns (uint balance);
function balanceOfUnderlying(address account) returns (uint);
}
interface CEther {
function mint() payable;
function redeem(uint redeemTokens) returns (uint);
function supplyRatePerBlock() returns (uint);
function balanceOf(address _owner) public view returns (uint balance);
function balanceOfUnderlying(address account) returns (uint);
}
contract CoolBitETFUSDTAndCompound is WhiteListToken{
using SafeMath for uint256;
uint256 public baseRatio;
string public name = "X-Saving Certificate";
string public constant symbol = "XSCert";
uint8 public decimals;
// USDT token contract
ITetherERC20 public StableToken;
SimpleOracleAccruedRatioUSD public oracle;
// Defi contract
CERC20 public cToken;
// Roles
address public bincentiveHot; // i.e., Platform Owner
address public bincentiveCold;
address[] public investors;
mapping(address => bool) public isInInvestorList;
uint256 public numAUMDistributedInvestors; // i.e., number of investors that already received AUM
// Contract(Fund) Status
// 0: not initialized
// 1: initialized
// 2: not enough fund came in in time
// 3: fundStarted
// 4: running
// 5: stoppped
// 6: closed
// 7: suspended
uint256 public fundStatus;
// Money
mapping(address => uint256) public investorDepositUSDTAmount; // denominated in stable token
uint256 public currentInvestedAmount; // denominated in stable token
// Fund Parameters
uint256 public investPaymentDueTime; // deadline for deposit which comes in before fund starts running
uint256 public percentageOffchainFund; // percentage of fund that will be transfered off-chain
uint256 public percentageMinimumFund; // minimum percentage of fund required to keep the fund functioning
uint256 public minimumFund; // minimum amounf required to keep the fund functioning
uint256 public minPenalty; // a minimum 100 USDT penalty
// Events
event Deposit(address indexed investor, uint256 investAmount, uint256 mintedAmount);
event UserInfo(bytes32 indexed uuid, string referralCode);
event StartFund(uint256 timeStamp, uint256 num_investors, uint256 totalInvestedAmount, uint256 totalMintedTokenAmount);
event Withdraw(address indexed investor, uint256 tokenAmount, uint256 USDTAmount, uint256 ToBincentiveColdUSDTAmount);
event MidwayQuit(address indexed investor, uint256 tokenAmount, uint256 USDTAmount);
event ReturnAUM(uint256 StableTokenAmount);
event DistributeAUM(address indexed to, uint256 tokenAmount, uint256 StableTokenAmount);
// Admin Events
event NewBincentiveCold(address newBincentiveCold);
// Defi Events
event MintcUSDT(uint USDTAmount);
event RedeemcUSDT(uint RedeemcUSDTAmount);
// Modifiers
modifier initialized() {
require(fundStatus == 1);
_;
}
// modifier fundStarted() {
// require(fundStatus == 3);
// _;
// }
modifier running() {
require(fundStatus == 4);
_;
}
modifier runningOrSuspended() {
require((fundStatus == 4) || (fundStatus == 7));
_;
}
modifier stoppedOrSuspended() {
require((fundStatus == 5) || (fundStatus == 7));
_;
}
modifier runningOrStoppedOrSuspended() {
require((fundStatus == 4) || (fundStatus == 5) || (fundStatus == 7));
_;
}
modifier closedOrAbortedOrSuspended() {
require((fundStatus == 6) || (fundStatus == 2) || (fundStatus == 7));
_;
}
modifier isBincentive() {
require(
(msg.sender == bincentiveHot) || (msg.sender == bincentiveCold)
);
_;
}
modifier isBincentiveCold() {
require(msg.sender == bincentiveCold);
_;
}
modifier isInvestor() {
// bincentive is not investor
require(msg.sender != bincentiveHot);
require(msg.sender != bincentiveCold);
require(balances[msg.sender] > 0);
_;
}
// Transfer functions for USDT
function checkBalanceTransfer(address to, uint256 amount) internal {
uint256 balanceBeforeTransfer = StableToken.balanceOf(to);
uint256 balanceAfterTransfer;
StableToken.transfer(to, amount);
balanceAfterTransfer = StableToken.balanceOf(to);
require(balanceAfterTransfer == balanceBeforeTransfer.add(amount));
}
function checkBalanceTransferFrom(address from, address to, uint256 amount) internal {
uint256 balanceBeforeTransfer = StableToken.balanceOf(to);
uint256 balanceAfterTransfer;
StableToken.transferFrom(from, to, amount);
balanceAfterTransfer = StableToken.balanceOf(to);
require(balanceAfterTransfer == balanceBeforeTransfer.add(amount));
}
// Getter Functions
// Get the balance of an investor, denominated in stable token
function getBalanceValue(address investor) public view returns(uint256) {
uint256 accruedRatioUSDT = oracle.query();
return balances[investor].mul(accruedRatioUSDT).div(baseRatio);
}
// Defi Functions
function querycUSDTAmount() internal returns(uint256) {
return cToken.balanceOf(address(this));
}
function querycExgRate() internal returns(uint256) {
return cToken.exchangeRateCurrent();
}
function mintcUSDT(uint USDTAmount) public isBincentive {
StableToken.approve(address(cToken), USDTAmount); // approve the transfer
assert(cToken.mint(USDTAmount) == 0);
emit MintcUSDT(USDTAmount);
}
function redeemcUSDT(uint RedeemcUSDTAmount) public isBincentive {
require(cToken.redeem(RedeemcUSDTAmount) == 0, "something went wrong");
emit RedeemcUSDT(RedeemcUSDTAmount);
}
// Investor Deposit
// It can either be called by investor directly or by bincentive accounts.
// Only the passed in argument `investor` would be treated as the real investor.
function deposit(address investor, uint256 depositUSDTAmount, bytes32 uuid, string referralCode) initialized public {
require(now < investPaymentDueTime, "Deposit too late");
require((investor != bincentiveHot) && (investor != bincentiveCold), "Investor can not be bincentive accounts");
require(depositUSDTAmount > 0, "Deposited stable token amount should be greater than zero");
// Transfer Stable Token to this contract
checkBalanceTransferFrom(msg.sender, address(this), depositUSDTAmount);
// Add investor to investor list if not present in the record before
if(isInInvestorList[investor] == false) {
investors.push(investor);
isInInvestorList[investor] = true;
}
currentInvestedAmount = currentInvestedAmount.add(depositUSDTAmount);
investorDepositUSDTAmount[investor] = investorDepositUSDTAmount[investor].add(depositUSDTAmount);
// Query Oracle for current stable token ratio
uint256 accruedRatioUSDT = oracle.query();
// Mint and distribute tokens to investors
uint256 mintedTokenAmount;
mintedTokenAmount = depositUSDTAmount.mul(baseRatio).div(accruedRatioUSDT);
_mint(investor, mintedTokenAmount);
emit Deposit(investor, depositUSDTAmount, mintedTokenAmount);
emit UserInfo(uuid, referralCode);
}
// Start Investing
// Send part of the funds offline
// and calculate the minimum amount of fund needed to keep the fund functioning
// and calculate the maximum amount of fund allowed to be withdrawn per period.
function start() initialized isBincentive public {
// Send some USDT offline
uint256 amountSentOffline = currentInvestedAmount.mul(percentageOffchainFund).div(100);
checkBalanceTransfer(bincentiveCold, amountSentOffline);
minimumFund = totalSupply().mul(percentageMinimumFund).div(100);
// Start the contract
fundStatus = 4;
emit StartFund(now, investors.length, currentInvestedAmount, totalSupply());
}
function amountWithdrawable() public view returns(uint256) {
return totalSupply().sub(minimumFund);
}
function isAmountWithdrawable(address investor, uint256 tokenAmount) public view returns(bool) {
require(tokenAmount > 0, "Withdrawn amount must be greater than zero");
require(balances[investor] >= tokenAmount, "Not enough token to be withdrawn");
require(totalSupply().sub(tokenAmount) >= minimumFund, "Amount of fund left would be less than minimum fund threshold after withdrawal");
return true;
}
function withdraw(address investor, uint256 tokenAmount) running isBincentive public {
require(tokenAmount > 0, "Withdrawn amount must be greater than zero");
require(balances[investor] >= tokenAmount, "Not enough token to be withdrawn");
require(totalSupply().sub(tokenAmount) >= minimumFund, "Amount of fund left would be less than minimum fund threshold after withdrawal");
uint256 investorBalanceBeforeWithdraw = balances[investor];
// Substract withdrawing amount from investor's balance
_burn(investor, tokenAmount);
uint256 depositUSDTAmount = investorDepositUSDTAmount[investor];
// Query Oracle for current stable token ratio
uint256 accruedRatioUSDT = oracle.query();
uint256 principle;
uint256 interest;
uint256 amountUSDTToWithdraw;
uint256 amountUSDTForInvestor;
uint256 amountUSDTToBincentiveCold;
amountUSDTToWithdraw = tokenAmount.mul(accruedRatioUSDT).div(baseRatio);
principle = depositUSDTAmount.mul(tokenAmount).div(investorBalanceBeforeWithdraw);
interest = amountUSDTToWithdraw.sub(principle);
amountUSDTForInvestor = principle.mul(99).div(100).add(interest.div(2));
amountUSDTToBincentiveCold = amountUSDTToWithdraw.sub(amountUSDTForInvestor);
// Check if `amountUSDTToBincentiveCold >= penalty`
if (amountUSDTToBincentiveCold < minPenalty) {
uint256 dif = minPenalty.sub(amountUSDTToBincentiveCold);
require(dif <= amountUSDTForInvestor, "Withdraw amount is not enough to cover minimum penalty");
amountUSDTForInvestor = amountUSDTForInvestor.sub(dif);
amountUSDTToBincentiveCold = minPenalty;
}
investorDepositUSDTAmount[investor] = investorDepositUSDTAmount[investor].sub(principle);
checkBalanceTransfer(investor, amountUSDTForInvestor);
checkBalanceTransfer(bincentiveCold, amountUSDTToBincentiveCold);
emit Withdraw(investor, tokenAmount, amountUSDTForInvestor, amountUSDTToBincentiveCold);
// Suspend the contract if not enough fund remained
if(totalSupply() == minimumFund) {
fundStatus = 7;
}
}
// Return AUM
// Transfer the fund back to the contract
function returnAUM(uint256 stableTokenAmount) runningOrSuspended isBincentiveCold public {
// Option 1: contract transfer AUM directly from bincentiveCold
checkBalanceTransferFrom(bincentiveCold, address(this), stableTokenAmount);
emit ReturnAUM(stableTokenAmount);
// If fund is running, stop the fund after AUM is returned
if(fundStatus == 4) fundStatus = 5;
}
// Add an overlay on top of underlying token transfer
// because token receiver should also be added to investor list to be able to receive AUM.
function transfer(address _to, uint256 _value) public returns (bool){
uint256 tokenBalanceBeforeTransfer = balances[msg.sender];
bool success = super.transfer(_to, _value);
if(success == true) {
if(isInInvestorList[_to] == false) {
investors.push(_to);
isInInvestorList[_to] = true;
}
// Also transfer the deposited USDT so the receiver can withdraw
uint256 USDTAmountToTransfer = investorDepositUSDTAmount[msg.sender].mul(_value).div(tokenBalanceBeforeTransfer);
investorDepositUSDTAmount[msg.sender] = investorDepositUSDTAmount[msg.sender].sub(USDTAmountToTransfer);
investorDepositUSDTAmount[_to] = investorDepositUSDTAmount[_to].add(USDTAmountToTransfer);
}
return success;
}
// Add an overlay on top of underlying token transferFrom
// because token receiver should also be added to investor list to be able to receive AUM.
function transferFrom(address _from, address _to, uint256 _value) public returns (bool){
uint256 tokenBalanceBeforeTransfer = balances[_from];
bool success = super.transferFrom(_from, _to, _value);
if(success == true) {
if(isInInvestorList[_to] == false) {
investors.push(_to);
isInInvestorList[_to] = true;
}
// Also transfer the deposited USDT so the receiver can withdraw
uint256 USDTAmountToTransfer = investorDepositUSDTAmount[_from].mul(_value).div(tokenBalanceBeforeTransfer);
investorDepositUSDTAmount[_from] = investorDepositUSDTAmount[_from].sub(USDTAmountToTransfer);
investorDepositUSDTAmount[_to] = investorDepositUSDTAmount[_to].add(USDTAmountToTransfer);
}
return success;
}
function update_investor(address _old_address, address _new_address) public isBincentiveCold {
require((_new_address != bincentiveHot) && (_new_address != bincentiveCold), "Investor can not be bincentive accounts");
require(isInInvestorList[_old_address] == true, "Investor does not exist");
uint256 balance = balances[_old_address];
balances[_old_address] = balances[_old_address].sub(balance);
balances[_new_address] = balances[_new_address].add(balance);
emit Transfer(_old_address, _new_address, balance);
if(isInInvestorList[_new_address] == false) {
investors.push(_new_address);
isInInvestorList[_new_address] = true;
}
uint256 USDTAmountToTransfer = investorDepositUSDTAmount[_old_address];
investorDepositUSDTAmount[_old_address] = investorDepositUSDTAmount[_old_address].sub(USDTAmountToTransfer);
investorDepositUSDTAmount[_new_address] = investorDepositUSDTAmount[_new_address].add(USDTAmountToTransfer);
}
// Distribute AUM
// Dispense the fund returned to each investor according to his portion of the token he possessed.
// All withdraw requests should be processed before calling this function.
// Since there might be too many investors, each time this function is called,
// a parameter `numInvestorsToDistribute` is passed in to indicate how many investors to process this time.
function distributeAUM(uint256 numInvestorsToDistribute) stoppedOrSuspended isBincentive public {
require(numAUMDistributedInvestors.add(numInvestorsToDistribute) <= investors.length, "Distributing to more than total number of investors");
// Query Oracle for current stable token ratio
uint256 accruedRatioUSDT = oracle.query();
uint256 stableTokenDistributeAmount;
address investor;
uint256 investor_amount;
// Distribute Stable Token to investors
for(uint i = numAUMDistributedInvestors; i < (numAUMDistributedInvestors.add(numInvestorsToDistribute)); i++) {
investor = investors[i];
investor_amount = balances[investor];
if(investor_amount == 0) continue;
_burn(investor, investor_amount);
stableTokenDistributeAmount = investor_amount.mul(accruedRatioUSDT).div(baseRatio);
checkBalanceTransfer(investor, stableTokenDistributeAmount);
emit DistributeAUM(investor, investor_amount, stableTokenDistributeAmount);
}
numAUMDistributedInvestors = numAUMDistributedInvestors.add(numInvestorsToDistribute);
// If all investors have received AUM, then close the fund.
if(numAUMDistributedInvestors >= investors.length) {
currentInvestedAmount = 0;
// If fund is stopped, close the fund
if(fundStatus == 5) fundStatus = 6;
}
}
function claimWronglyTransferredFund() closedOrAbortedOrSuspended isBincentive public {
// withdraw leftover funds from Defi
uint256 totalcUSDTAmount;
totalcUSDTAmount = querycUSDTAmount();
redeemcUSDT(totalcUSDTAmount);
uint256 leftOverAmount = StableToken.balanceOf(address(this));
if(leftOverAmount > 0) {
checkBalanceTransfer(bincentiveCold, leftOverAmount);
}
}
function updateBincentiveColdAddress(address _newBincentiveCold) public isBincentiveCold {
require(_newBincentiveCold != address(0), "New BincentiveCold address can not be zero");
bincentiveCold = _newBincentiveCold;
emit NewBincentiveCold(_newBincentiveCold);
}
constructor(
address _oracle,
address _StableToken,
address _cToken,
address _bincentiveHot,
address _bincentiveCold,
uint256 _investPaymentPeriod,
uint256 _percentageOffchainFund,
uint256 _percentageMinimumFund) WhiteListToken(_bincentiveCold) public {
oracle = SimpleOracleAccruedRatioUSD(_oracle);
bincentiveHot = _bincentiveHot;
bincentiveCold = _bincentiveCold;
StableToken = ITetherERC20(_StableToken);
cToken = CERC20(_cToken);
decimals = StableToken.decimals();
minPenalty = 100 * (10 ** uint256(decimals)); // a minimum 100 USDT penalty
baseRatio = oracle.query();
require(baseRatio > 0, "baseRatio should always greater than zero");
// Set parameters
investPaymentDueTime = now.add(_investPaymentPeriod);
percentageOffchainFund = _percentageOffchainFund;
percentageMinimumFund = _percentageMinimumFund;
// Initialized the contract
fundStatus = 1;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"transferWhiteList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bincentiveHot","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minPenalty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"receiveWhiteList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"percentageOffchainFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"amountWithdrawable","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListAddress","type":"address"}],"name":"removeReceiveWhiteListAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableReceive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investors","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"investorDepositUSDTAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"StableToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"}],"name":"getBalanceValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isTransferRestricted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minimumFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_old_address","type":"address"},{"name":"_new_address","type":"address"}],"name":"update_investor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whiteListAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investor","type":"address"},{"name":"depositUSDTAmount","type":"uint256"},{"name":"uuid","type":"bytes32"},{"name":"referralCode","type":"string"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"numInvestorsToDistribute","type":"uint256"}],"name":"distributeAUM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"investPaymentDueTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"stableTokenAmount","type":"uint256"}],"name":"returnAUM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isInInvestorList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"baseRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"},{"name":"tokenAmount","type":"uint256"}],"name":"isAmountWithdrawable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"RedeemcUSDTAmount","type":"uint256"}],"name":"redeemcUSDT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimWronglyTransferredFund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isReceiveRestricted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListAddress","type":"address"}],"name":"removeTransferWhiteListAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"USDTAmount","type":"uint256"}],"name":"mintcUSDT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"restrictTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bincentiveCold","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListAddress","type":"address"}],"name":"addTransferWhiteListAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListAddress","type":"address"}],"name":"addReceiveWhiteListAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numAUMDistributedInvestors","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundStatus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBincentiveCold","type":"address"}],"name":"updateBincentiveColdAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"restrictReceive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"investor","type":"address"},{"name":"tokenAmount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"percentageMinimumFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentInvestedAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_oracle","type":"address"},{"name":"_StableToken","type":"address"},{"name":"_cToken","type":"address"},{"name":"_bincentiveHot","type":"address"},{"name":"_bincentiveCold","type":"address"},{"name":"_investPaymentPeriod","type":"uint256"},{"name":"_percentageOffchainFund","type":"uint256"},{"name":"_percentageMinimumFund","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"investAmount","type":"uint256"},{"indexed":false,"name":"mintedAmount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"uuid","type":"bytes32"},{"indexed":false,"name":"referralCode","type":"string"}],"name":"UserInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timeStamp","type":"uint256"},{"indexed":false,"name":"num_investors","type":"uint256"},{"indexed":false,"name":"totalInvestedAmount","type":"uint256"},{"indexed":false,"name":"totalMintedTokenAmount","type":"uint256"}],"name":"StartFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"USDTAmount","type":"uint256"},{"indexed":false,"name":"ToBincentiveColdUSDTAmount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"USDTAmount","type":"uint256"}],"name":"MidwayQuit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"StableTokenAmount","type":"uint256"}],"name":"ReturnAUM","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"StableTokenAmount","type":"uint256"}],"name":"DistributeAUM","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newBincentiveCold","type":"address"}],"name":"NewBincentiveCold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"USDTAmount","type":"uint256"}],"name":"MintcUSDT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"RedeemcUSDTAmount","type":"uint256"}],"name":"RedeemcUSDT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]Contract Creation Code
0x60c0604052601460808190527f582d536176696e6720436572746966696361746500000000000000000000000060a09081526200004091600791906200033c565b503480156200004e57600080fd5b5060405161010080620039f18339810160408181528251602080850151838601516060870151608088015160a089015160c08a015160e0909a0151600380547501000000000000000000000000000000000000000000600160a060020a0319918216600160a060020a0380881691821760a860020a60ff02191692909217909355600980548316828d16179055600b80548316828916179055600c805483169093179092556008805461010060a860020a031916610100848b1681029190911791829055600a8054909316848a16179092557f313ce567000000000000000000000000000000000000000000000000000000008d529a51999c979b969a95999498939796929504169263313ce567926004808401939192918290030181600087803b1580156200017d57600080fd5b505af115801562000192573d6000803e3d6000fd5b505050506040513d6020811015620001a957600080fd5b50516008805460ff191660ff928316179081905516600a0a606402601755600954604080517f2c46b2050000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921691632c46b205916004808201926020929091908290030181600087803b1580156200022857600080fd5b505af11580156200023d573d6000803e3d6000fd5b505050506040513d60208110156200025457600080fd5b50516006819055600010620002f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f62617365526174696f2073686f756c6420616c7761797320677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6200030a428464010000000062002c156200032882021704565b6013556014919091556015555050600160105550620003e192505050565b818101828110156200033657fe5b92915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037f57805160ff1916838001178555620003af565b82800160010185558215620003af579182015b82811115620003af57825182559160200191906001019062000392565b50620003bd929150620003c1565b5090565b620003de91905b80821115620003bd5760008155600101620003c8565b90565b61360080620003f16000396000f3006080604052600436106102795763ffffffff60e060020a60003504166302e4ef66811461027e57806306fdde03146102b3578063095ea7b31461033d578063098dc843146103615780630eba9849146103925780630edb2639146103b957806318160ddd146103da5780631d5e4fc0146103ef57806321d8096b1461040457806323b872dd1461041957806325eea8bf14610443578063313ce567146104645780633b384e7d1461048f5780633feb5f2b146104a657806342966c68146104be5780635090392c146104d657806350c0077a146104f757806353d056d71461050c578063636a720e1461052d578063661884631461054257806366b30f0614610566578063680dae2e1461057b57806369e527da146105a257806370a08231146105b757806373ced088146105d85780637583e9fd146105ed578063781f1523146106595780637d3d7524146106715780637dc0d1d014610686578063854396771461069b57806395d89b41146106b3578063986c55e0146106c8578063a9059cbb146106e9578063ad008f491461070d578063b56fdcfe14610722578063bd55855314610746578063be9a65551461075e578063c17a10c014610773578063c69d98ff14610788578063c94eee9c1461079d578063ca055819146107be578063ceb5b638146107d6578063d60c6a13146107eb578063d73dd62314610800578063da14b2f414610824578063dcafc57814610845578063dd62ed3e14610866578063e22547e41461088d578063e39e45e2146108a2578063e5fb5f1f146108b7578063ec8a4456146108d8578063f1b50c1d146108ed578063f3fef3a314610902578063fb953a4214610926578063fc2917751461093b575b600080fd5b34801561028a57600080fd5b5061029f600160a060020a0360043516610950565b604080519115158252519081900360200190f35b3480156102bf57600080fd5b506102c8610965565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103025781810151838201526020016102ea565b50505050905090810190601f16801561032f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034957600080fd5b5061029f600160a060020a03600435166024356109f3565b34801561036d57600080fd5b50610376610a5a565b60408051600160a060020a039092168252519081900360200190f35b34801561039e57600080fd5b506103a7610a69565b60408051918252519081900360200190f35b3480156103c557600080fd5b5061029f600160a060020a0360043516610a6f565b3480156103e657600080fd5b506103a7610a84565b3480156103fb57600080fd5b506103a7610a8a565b34801561041057600080fd5b506103a7610a90565b34801561042557600080fd5b5061029f600160a060020a0360043581169060243516604435610ab1565b34801561044f57600080fd5b5061029f600160a060020a0360043516610c25565b34801561047057600080fd5b50610479610c8b565b6040805160ff9092168252519081900360200190f35b34801561049b57600080fd5b506104a4610c94565b005b3480156104b257600080fd5b50610376600435610ce4565b3480156104ca57600080fd5b506104a4600435610d0c565b3480156104e257600080fd5b506103a7600160a060020a0360043516610d19565b34801561050357600080fd5b50610376610d2b565b34801561051857600080fd5b506103a7600160a060020a0360043516610d3f565b34801561053957600080fd5b5061029f610dfb565b34801561054e57600080fd5b5061029f600160a060020a0360043516602435610e0b565b34801561057257600080fd5b506103a7610efb565b34801561058757600080fd5b506104a4600160a060020a0360043581169060243516610f01565b3480156105ae57600080fd5b506103766111df565b3480156105c357600080fd5b506103a7600160a060020a03600435166111ee565b3480156105e457600080fd5b50610376611209565b3480156105f957600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526104a494600160a060020a0381351694602480359560443595369560849493019181908401838280828437509497506112189650505050505050565b34801561066557600080fd5b506104a4600435611620565b34801561067d57600080fd5b506103a76118a2565b34801561069257600080fd5b506103766118a8565b3480156106a757600080fd5b506104a46004356118b7565b3480156106bf57600080fd5b506102c8611949565b3480156106d457600080fd5b5061029f600160a060020a0360043516611980565b3480156106f557600080fd5b5061029f600160a060020a0360043516602435611995565b34801561071957600080fd5b506103a7611add565b34801561072e57600080fd5b5061029f600160a060020a0360043516602435611ae3565b34801561075257600080fd5b506104a4600435611c8c565b34801561076a57600080fd5b506104a4611dd8565b34801561077f57600080fd5b506104a4611ece565b34801561079457600080fd5b5061029f611fe2565b3480156107a957600080fd5b5061029f600160a060020a0360043516611ff2565b3480156107ca57600080fd5b506104a4600435612058565b3480156107e257600080fd5b506104a46121e5565b3480156107f757600080fd5b50610376612239565b34801561080c57600080fd5b5061029f600160a060020a0360043516602435612248565b34801561083057600080fd5b5061029f600160a060020a03600435166122e1565b34801561085157600080fd5b5061029f600160a060020a036004351661234a565b34801561087257600080fd5b506103a7600160a060020a03600435811690602435166123b3565b34801561089957600080fd5b506103a76123de565b3480156108ae57600080fd5b506103a76123e4565b3480156108c357600080fd5b506104a4600160a060020a03600435166123ea565b3480156108e457600080fd5b506104a46124e8565b3480156108f957600080fd5b506104a461253d565b34801561090e57600080fd5b506104a4600160a060020a036004351660243561258c565b34801561093257600080fd5b506103a7612a4f565b34801561094757600080fd5b506103a7612a55565b60046020526000908152604090205460ff1681565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b505050505081565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600b54600160a060020a031681565b60175481565b60056020526000908152604090205460ff1681565b60015490565b60145481565b6000610aac601654610aa0610a84565b9063ffffffff612a5b16565b905090565b600160a060020a0383166000908152602081905260408120548180610ad7878787612a6d565b915060018215151415610c1b57600160a060020a0386166000908152600e602052604090205460ff161515610b6557600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0389169081179091556000908152600e60205260409020805460ff191690911790555b600160a060020a038716600090815260116020526040902054610ba0908490610b94908863ffffffff612bd716565b9063ffffffff612c0016565b600160a060020a038816600090815260116020526040902054909150610bcc908263ffffffff612a5b16565b600160a060020a038089166000908152601160205260408082209390935590881681522054610c01908263ffffffff612c1516565b600160a060020a0387166000908152601160205260409020555b5095945050505050565b600354600090600160a060020a03163314610c3f57600080fd5b600160a060020a03821660009081526005602052604090205460ff161515610c6657600080fd5b50600160a060020a03166000908152600560205260409020805460ff19169055600190565b60085460ff1681565b600354600160a060020a03163314610cab57600080fd5b60035460a860020a900460ff161515610cc357600080fd5b6003805475ff00000000000000000000000000000000000000000019169055565b600d805482908110610cf257fe5b600091825260209091200154600160a060020a0316905081565b610d163382612c22565b50565b60116020526000908152604090205481565b6008546101009004600160a060020a031681565b600080600960009054906101000a9004600160a060020a0316600160a060020a0316632c46b2056040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d9557600080fd5b505af1158015610da9573d6000803e3d6000fd5b505050506040513d6020811015610dbf57600080fd5b5051600654600160a060020a038516600090815260208190526040902054919250610df491610b94908463ffffffff612bd716565b9392505050565b60035460a060020a900460ff1681565b336000908152600260209081526040808320600160a060020a038616845290915281205480831115610e6057336000908152600260209081526040808320600160a060020a0388168452909152812055610e95565b610e70818463ffffffff612a5b16565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60165481565b600c546000908190600160a060020a03163314610f1d57600080fd5b600b54600160a060020a03848116911614801590610f495750600c54600160a060020a03848116911614155b1515610fc5576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746f722063616e206e6f742062652062696e63656e74697665206160448201527f63636f756e747300000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0384166000908152600e602052604090205460ff16151560011461103a576040805160e560020a62461bcd02815260206004820152601760248201527f496e766573746f7220646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b600160a060020a0384166000908152602081905260409020549150611065828063ffffffff612a5b16565b600160a060020a03808616600090815260208190526040808220939093559085168152205461109a908363ffffffff612c1516565b600160a060020a038085166000818152602081815260409182902094909455805186815290519193928816926000805160206135b583398151915292918290030190a3600160a060020a0383166000908152600e602052604090205460ff16151561115e57600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386169081179091556000908152600e60205260409020805460ff191690911790555b50600160a060020a038316600090815260116020526040902054611188818063ffffffff612a5b16565b600160a060020a0380861660009081526011602052604080822093909355908516815220546111bd908263ffffffff612c1516565b600160a060020a03909316600090815260116020526040902092909255505050565b600a54600160a060020a031681565b600160a060020a031660009081526020819052604090205490565b600354600160a060020a031681565b600080601054600114151561122c57600080fd5b6013544210611285576040805160e560020a62461bcd02815260206004820152601060248201527f4465706f73697420746f6f206c61746500000000000000000000000000000000604482015290519081900360640190fd5b600b54600160a060020a038781169116148015906112b15750600c54600160a060020a03878116911614155b151561132d576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746f722063616e206e6f742062652062696e63656e74697665206160448201527f63636f756e747300000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600085116113ab576040805160e560020a62461bcd02815260206004820152603960248201527f4465706f736974656420737461626c6520746f6b656e20616d6f756e7420736860448201527f6f756c642062652067726561746572207468616e207a65726f00000000000000606482015290519081900360840190fd5b6113b6333087612d2a565b600160a060020a0386166000908152600e602052604090205460ff16151561143757600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0389169081179091556000908152600e60205260409020805460ff191690911790555b60125461144a908663ffffffff612c1516565b601255600160a060020a038616600090815260116020526040902054611476908663ffffffff612c1516565b600160a060020a0380881660009081526011602090815260408083209490945560095484517f2c46b2050000000000000000000000000000000000000000000000000000000081529451931693632c46b2059360048083019491928390030190829087803b1580156114e757600080fd5b505af11580156114fb573d6000803e3d6000fd5b505050506040513d602081101561151157600080fd5b5051600654909250611530908390610b9490889063ffffffff612bd716565b905061153c8682612eec565b60408051868152602081018390528151600160a060020a038916927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2604080516020808252855181830152855187937f5c0d0117b40a73a022296ac40e2adacb36e36480703c6e5ba6281e63778d85379388939092839283019185019080838360005b838110156115de5781810151838201526020016115c6565b50505050905090810190601f16801561160b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050505050565b60008060008060006010546005148061163b57506010546007145b151561164657600080fd5b600b54600160a060020a03163314806116695750600c54600160a060020a031633145b151561167457600080fd5b600d54600f5461168a908863ffffffff612c1516565b1115611706576040805160e560020a62461bcd02815260206004820152603360248201527f446973747269627574696e6720746f206d6f7265207468616e20746f74616c2060448201527f6e756d626572206f6620696e766573746f727300000000000000000000000000606482015290519081900360840190fd5b600960009054906101000a9004600160a060020a0316600160a060020a0316632c46b2056040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561175957600080fd5b505af115801561176d573d6000803e3d6000fd5b505050506040513d602081101561178357600080fd5b5051600f5490955090505b600f546117a1908763ffffffff612c1516565b81101561186457600d8054829081106117b657fe5b6000918252602080832090910154600160a060020a03168083529082905260409091205490935091508115156117eb5761185c565b6117f58383612c22565b60065461180c90610b94848863ffffffff612bd716565b93506118188385612fcf565b60408051838152602081018690528151600160a060020a038616927fc0d7daf063ebc62ce2106349353b9921835ee556adcc96d283a2255ed2db46cf928290030190a25b60010161178e565b600f54611877908763ffffffff612c1516565b600f819055600d541161189a5760006012556010546005141561189a5760066010555b505050505050565b60135481565b600954600160a060020a031681565b601054600414806118ca57506010546007145b15156118d557600080fd5b600c54600160a060020a031633146118ec57600080fd5b600c5461190390600160a060020a03163083612d2a565b6040805182815290517f6b64f6654829a562d2f4fb57628b9fb189af23266eb7bf618ebe1ee2d25861169181900360200190a160105460041415610d1657600560105550565b60408051808201909152600681527f5853436572740000000000000000000000000000000000000000000000000000602082015281565b600e6020526000908152604090205460ff1681565b3360009081526020819052604081205481806119b18686613188565b915060018215151415611ad457600160a060020a0386166000908152600e602052604090205460ff161515611a3f57600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0389169081179091556000908152600e60205260409020805460ff191690911790555b33600090815260116020526040902054611a65908490610b94908863ffffffff612bd716565b33600090815260116020526040902054909150611a88908263ffffffff612a5b16565b3360009081526011602052604080822092909255600160a060020a03881681522054611aba908263ffffffff612c1516565b600160a060020a0387166000908152601160205260409020555b50949350505050565b60065481565b6000808211611b62576040805160e560020a62461bcd02815260206004820152602a60248201527f57697468647261776e20616d6f756e74206d757374206265206772656174657260448201527f207468616e207a65726f00000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038316600090815260208190526040902054821115611bd2576040805160e560020a62461bcd02815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e20746f2062652077697468647261776e604482015290519081900360640190fd5b601654611be183610aa0610a84565b1015611c83576040805160e560020a62461bcd02815260206004820152604e60248201527f416d6f756e74206f662066756e64206c65667420776f756c64206265206c657360448201527f73207468616e206d696e696d756d2066756e64207468726573686f6c6420616660648201527f746572207769746864726177616c000000000000000000000000000000000000608482015290519081900360a40190fd5b50600192915050565b600b54600160a060020a0316331480611caf5750600c54600160a060020a031633145b1515611cba57600080fd5b600a54604080517fdb006a75000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163db006a75916024808201926020929091908290030181600087803b158015611d2157600080fd5b505af1158015611d35573d6000803e3d6000fd5b505050506040513d6020811015611d4b57600080fd5b505115611da2576040805160e560020a62461bcd02815260206004820152601460248201527f736f6d657468696e672077656e742077726f6e67000000000000000000000000604482015290519081900360640190fd5b6040805182815290517ff393ea747b705b955849733040ef812bc3579a099027be87e083737573a8a5609181900360200190a150565b601054600090600114611dea57600080fd5b600b54600160a060020a0316331480611e0d5750600c54600160a060020a031633145b1515611e1857600080fd5b611e346064610b94601454601254612bd790919063ffffffff16565b600c54909150611e4d90600160a060020a031682612fcf565b611e6c6064610b94601554611e60610a84565b9063ffffffff612bd716565b6016556004601055600d546012547f1f7eb45fe73d0921317be27e3eae38ad1d302ebc1b8908a1a589cc91fb46c8f8914291611ea6610a84565b604080519485526020850193909352838301919091526060830152519081900360800190a150565b60008060105460061480611ee457506010546002145b80611ef157506010546007145b1515611efc57600080fd5b600b54600160a060020a0316331480611f1f5750600c54600160a060020a031633145b1515611f2a57600080fd5b611f326132e0565b9150611f3d82611c8c565b6008546040805160e060020a6370a082310281523060048201529051610100909204600160a060020a0316916370a08231916024808201926020929091908290030181600087803b158015611f9157600080fd5b505af1158015611fa5573d6000803e3d6000fd5b505050506040513d6020811015611fbb57600080fd5b505190506000811115611fde57600c54611fde90600160a060020a031682612fcf565b5050565b60035460a860020a900460ff1681565b600354600090600160a060020a0316331461200c57600080fd5b600160a060020a03821660009081526004602052604090205460ff16151561203357600080fd5b50600160a060020a03166000908152600460205260409020805460ff19169055600190565b600b54600160a060020a031633148061207b5750600c54600160a060020a031633145b151561208657600080fd5b600854600a54604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290516101009093049091169163095ea7b39160448082019260009290919082900301818387803b1580156120fd57600080fd5b505af1158015612111573d6000803e3d6000fd5b5050600a54604080517fa0712d68000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a03909216935063a0712d6892506024808201926020929091908290030181600087803b15801561217c57600080fd5b505af1158015612190573d6000803e3d6000fd5b505050506040513d60208110156121a657600080fd5b5051156121af57fe5b6040805182815290517f6e6829e03e5d1ef4c462cc1165a57ca946b47bb550e2d2810e23add06f3b1c5c9181900360200190a150565b600354600160a060020a031633146121fc57600080fd5b60035460a060020a900460ff161561221357600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b600c54600160a060020a031681565b336000908152600260209081526040808320600160a060020a038616845290915281205461227c908363ffffffff612c1516565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600354600090600160a060020a031633146122fb57600080fd5b600160a060020a03821660009081526004602052604090205460ff161561232157600080fd5b50600160a060020a03166000908152600460205260409020805460ff1916600190811790915590565b600354600090600160a060020a0316331461236457600080fd5b600160a060020a03821660009081526005602052604090205460ff161561238a57600080fd5b50600160a060020a03166000908152600560205260409020805460ff1916600190811790915590565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600f5481565b60105481565b600c54600160a060020a0316331461240157600080fd5b600160a060020a0381161515612487576040805160e560020a62461bcd02815260206004820152602a60248201527f4e65772042696e63656e74697665436f6c6420616464726573732063616e206e60448201527f6f74206265207a65726f00000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c8054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f53103ab2a8020cc559e4dec2798ff675ca4057e38292d1ded6d12780605fae9e9181900360200190a150565b600354600160a060020a031633146124ff57600080fd5b60035460a860020a900460ff161561251657600080fd5b6003805475ff000000000000000000000000000000000000000000191660a860020a179055565b600354600160a060020a0316331461255457600080fd5b60035460a060020a900460ff16151561256c57600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b600080600080600080600080600060105460041415156125ab57600080fd5b600b54600160a060020a03163314806125ce5750600c54600160a060020a031633145b15156125d957600080fd5b60008a11612657576040805160e560020a62461bcd02815260206004820152602a60248201527f57697468647261776e20616d6f756e74206d757374206265206772656174657260448201527f207468616e207a65726f00000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038b166000908152602081905260409020548a11156126c7576040805160e560020a62461bcd02815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e20746f2062652077697468647261776e604482015290519081900360640190fd5b6016546126d68b610aa0610a84565b1015612778576040805160e560020a62461bcd02815260206004820152604e60248201527f416d6f756e74206f662066756e64206c65667420776f756c64206265206c657360448201527f73207468616e206d696e696d756d2066756e64207468726573686f6c6420616660648201527f746572207769746864726177616c000000000000000000000000000000000000608482015290519081900360a40190fd5b600160a060020a038b16600090815260208190526040902054985061279d8b8b612c22565b600160a060020a03808c1660009081526011602090815260408083205460095482517f2c46b2050000000000000000000000000000000000000000000000000000000081529251919d5090941693632c46b20593600480840194938390030190829087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b505050506040513d602081101561283857600080fd5b505160065490975061285490610b948c8a63ffffffff612bd716565b935061286a89610b948a8d63ffffffff612bd716565b955061287c848763ffffffff612a5b16565b94506128b461289286600263ffffffff612c0016565b6128a86064610b948a606363ffffffff612bd716565b9063ffffffff612c1516565b92506128c6848463ffffffff612a5b16565b915060175482101561297d576017546128e5908363ffffffff612a5b16565b905082811115612965576040805160e560020a62461bcd02815260206004820152603660248201527f576974686472617720616d6f756e74206973206e6f7420656e6f75676820746f60448201527f20636f766572206d696e696d756d2070656e616c747900000000000000000000606482015290519081900360840190fd5b612975838263ffffffff612a5b16565b925060175491505b600160a060020a038b166000908152601160205260409020546129a6908763ffffffff612a5b16565b600160a060020a038c166000908152601160205260409020556129c98b84612fcf565b600c546129df90600160a060020a031683612fcf565b604080518b8152602081018590528082018490529051600160a060020a038d16917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a2601654612a36610a84565b1415612a425760076010555b5050505050505050505050565b60155481565b60125481565b600082821115612a6757fe5b50900390565b60035460009060a060020a900460ff1615612b1a57600160a060020a03841660009081526004602052604090205460ff161515612b1a576040805160e560020a62461bcd02815260206004820152602a60248201527f6f6e6c792077686974654c6973742073656e646572732063616e207472616e7360448201527f66657220746f6b656e7300000000000000000000000000000000000000000000606482015290519081900360840190fd5b60035460a860020a900460ff1615612bc457600160a060020a03831660009081526005602052604090205460ff161515612bc4576040805160e560020a62461bcd02815260206004820152602b60248201527f6f6e6c792077686974654c697374207265636569766572732063616e2072656360448201527f6569766520746f6b656e73000000000000000000000000000000000000000000606482015290519081900360840190fd5b612bcf848484613360565b949350505050565b6000821515612be857506000610a54565b50818102818382811515612bf857fe5b0414610a5457fe5b60008183811515612c0d57fe5b049392505050565b81810182811015610a5457fe5b600160a060020a0382161515612ca8576040805160e560020a62461bcd02815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600154612cbb908263ffffffff612a5b16565b600155600160a060020a038216600090815260208190526040902054612ce7908263ffffffff612a5b16565b600160a060020a038316600081815260208181526040808320949094558351858152935191936000805160206135b5833981519152929081900390910190a35050565b6008546040805160e060020a6370a08231028152600160a060020a0385811660048301529151600093849361010090910416916370a0823191602480830192602092919082900301818787803b158015612d8357600080fd5b505af1158015612d97573d6000803e3d6000fd5b505050506040513d6020811015612dad57600080fd5b5051600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152888116602483015260448201889052915193955061010090920416916323b872dd9160648082019260009290919082900301818387803b158015612e2c57600080fd5b505af1158015612e40573d6000803e3d6000fd5b50506008546040805160e060020a6370a08231028152600160a060020a038981166004830152915161010090930490911693506370a0823192506024808201926020929091908290030181600087803b158015612e9c57600080fd5b505af1158015612eb0573d6000803e3d6000fd5b505050506040513d6020811015612ec657600080fd5b50519050612eda828463ffffffff612c1516565b8114612ee557600080fd5b5050505050565b600160a060020a0382161515612f4c576040805160e560020a62461bcd02815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600154612f5f908263ffffffff612c1516565b600155600160a060020a038216600090815260208190526040902054612f8b908263ffffffff612c1516565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391926000805160206135b58339815191529281900390910190a35050565b6008546040805160e060020a6370a08231028152600160a060020a0385811660048301529151600093849361010090910416916370a0823191602480830192602092919082900301818787803b15801561302857600080fd5b505af115801561303c573d6000803e3d6000fd5b505050506040513d602081101561305257600080fd5b5051600854604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152602482018890529151939550610100909204169163a9059cbb9160448082019260009290919082900301818387803b1580156130c957600080fd5b505af11580156130dd573d6000803e3d6000fd5b50506008546040805160e060020a6370a08231028152600160a060020a038981166004830152915161010090930490911693506370a0823192506024808201926020929091908290030181600087803b15801561313957600080fd5b505af115801561314d573d6000803e3d6000fd5b505050506040513d602081101561316357600080fd5b50519050613177828463ffffffff612c1516565b811461318257600080fd5b50505050565b60035460009060a060020a900460ff161561322c573360009081526004602052604090205460ff16151561322c576040805160e560020a62461bcd02815260206004820152602a60248201527f6f6e6c792077686974656c6973742073656e646572732063616e207472616e7360448201527f66657220746f6b656e7300000000000000000000000000000000000000000000606482015290519081900360840190fd5b60035460a860020a900460ff16156132d657600160a060020a03831660009081526005602052604090205460ff1615156132d6576040805160e560020a62461bcd02815260206004820152602b60248201527f6f6e6c792077686974654c697374207265636569766572732063616e2072656360448201527f6569766520746f6b656e73000000000000000000000000000000000000000000606482015290519081900360840190fd5b610df483836134c5565b600a546040805160e060020a6370a082310281523060048201529051600092600160a060020a0316916370a0823191602480830192602092919082900301818787803b15801561332f57600080fd5b505af1158015613343573d6000803e3d6000fd5b505050506040513d602081101561335957600080fd5b5051905090565b6000600160a060020a038316151561337757600080fd5b600160a060020a03841660009081526020819052604090205482111561339c57600080fd5b600160a060020a03841660009081526002602090815260408083203384529091529020548211156133cc57600080fd5b600160a060020a0384166000908152602081905260409020546133f5908363ffffffff612a5b16565b600160a060020a03808616600090815260208190526040808220939093559085168152205461342a908363ffffffff612c1516565b600160a060020a0380851660009081526020818152604080832094909455918716815260028252828120338252909152205461346c908363ffffffff612a5b16565b600160a060020a03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206135b5833981519152929181900390910190a35060019392505050565b6000600160a060020a03831615156134dc57600080fd5b336000908152602081905260409020548211156134f857600080fd5b33600090815260208190526040902054613518908363ffffffff612a5b16565b3360009081526020819052604080822092909255600160a060020a0385168152205461354a908363ffffffff612c1516565b600160a060020a038416600081815260208181526040918290209390935580518581529051919233926000805160206135b58339815191529281900390910190a3506001929150505600d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820cc776b8e55d6996f6aea8961634de74e7567c5b1d94774b6f374520f10f9249a0029000000000000000000000000aa1592b8cd1f64bec5b0ea193a9254ccd8c74e64000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000c4c358f3af4888c5fea5f232ccc7ed04d5735cae00000000000000000000000034ccd8a57d002663ff9befe42cb47db8fadc18a60000000000000000000000000000000000000000000000000000000000278d0000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000050
Deployed Bytecode
0x6080604052600436106102795763ffffffff60e060020a60003504166302e4ef66811461027e57806306fdde03146102b3578063095ea7b31461033d578063098dc843146103615780630eba9849146103925780630edb2639146103b957806318160ddd146103da5780631d5e4fc0146103ef57806321d8096b1461040457806323b872dd1461041957806325eea8bf14610443578063313ce567146104645780633b384e7d1461048f5780633feb5f2b146104a657806342966c68146104be5780635090392c146104d657806350c0077a146104f757806353d056d71461050c578063636a720e1461052d578063661884631461054257806366b30f0614610566578063680dae2e1461057b57806369e527da146105a257806370a08231146105b757806373ced088146105d85780637583e9fd146105ed578063781f1523146106595780637d3d7524146106715780637dc0d1d014610686578063854396771461069b57806395d89b41146106b3578063986c55e0146106c8578063a9059cbb146106e9578063ad008f491461070d578063b56fdcfe14610722578063bd55855314610746578063be9a65551461075e578063c17a10c014610773578063c69d98ff14610788578063c94eee9c1461079d578063ca055819146107be578063ceb5b638146107d6578063d60c6a13146107eb578063d73dd62314610800578063da14b2f414610824578063dcafc57814610845578063dd62ed3e14610866578063e22547e41461088d578063e39e45e2146108a2578063e5fb5f1f146108b7578063ec8a4456146108d8578063f1b50c1d146108ed578063f3fef3a314610902578063fb953a4214610926578063fc2917751461093b575b600080fd5b34801561028a57600080fd5b5061029f600160a060020a0360043516610950565b604080519115158252519081900360200190f35b3480156102bf57600080fd5b506102c8610965565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103025781810151838201526020016102ea565b50505050905090810190601f16801561032f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034957600080fd5b5061029f600160a060020a03600435166024356109f3565b34801561036d57600080fd5b50610376610a5a565b60408051600160a060020a039092168252519081900360200190f35b34801561039e57600080fd5b506103a7610a69565b60408051918252519081900360200190f35b3480156103c557600080fd5b5061029f600160a060020a0360043516610a6f565b3480156103e657600080fd5b506103a7610a84565b3480156103fb57600080fd5b506103a7610a8a565b34801561041057600080fd5b506103a7610a90565b34801561042557600080fd5b5061029f600160a060020a0360043581169060243516604435610ab1565b34801561044f57600080fd5b5061029f600160a060020a0360043516610c25565b34801561047057600080fd5b50610479610c8b565b6040805160ff9092168252519081900360200190f35b34801561049b57600080fd5b506104a4610c94565b005b3480156104b257600080fd5b50610376600435610ce4565b3480156104ca57600080fd5b506104a4600435610d0c565b3480156104e257600080fd5b506103a7600160a060020a0360043516610d19565b34801561050357600080fd5b50610376610d2b565b34801561051857600080fd5b506103a7600160a060020a0360043516610d3f565b34801561053957600080fd5b5061029f610dfb565b34801561054e57600080fd5b5061029f600160a060020a0360043516602435610e0b565b34801561057257600080fd5b506103a7610efb565b34801561058757600080fd5b506104a4600160a060020a0360043581169060243516610f01565b3480156105ae57600080fd5b506103766111df565b3480156105c357600080fd5b506103a7600160a060020a03600435166111ee565b3480156105e457600080fd5b50610376611209565b3480156105f957600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526104a494600160a060020a0381351694602480359560443595369560849493019181908401838280828437509497506112189650505050505050565b34801561066557600080fd5b506104a4600435611620565b34801561067d57600080fd5b506103a76118a2565b34801561069257600080fd5b506103766118a8565b3480156106a757600080fd5b506104a46004356118b7565b3480156106bf57600080fd5b506102c8611949565b3480156106d457600080fd5b5061029f600160a060020a0360043516611980565b3480156106f557600080fd5b5061029f600160a060020a0360043516602435611995565b34801561071957600080fd5b506103a7611add565b34801561072e57600080fd5b5061029f600160a060020a0360043516602435611ae3565b34801561075257600080fd5b506104a4600435611c8c565b34801561076a57600080fd5b506104a4611dd8565b34801561077f57600080fd5b506104a4611ece565b34801561079457600080fd5b5061029f611fe2565b3480156107a957600080fd5b5061029f600160a060020a0360043516611ff2565b3480156107ca57600080fd5b506104a4600435612058565b3480156107e257600080fd5b506104a46121e5565b3480156107f757600080fd5b50610376612239565b34801561080c57600080fd5b5061029f600160a060020a0360043516602435612248565b34801561083057600080fd5b5061029f600160a060020a03600435166122e1565b34801561085157600080fd5b5061029f600160a060020a036004351661234a565b34801561087257600080fd5b506103a7600160a060020a03600435811690602435166123b3565b34801561089957600080fd5b506103a76123de565b3480156108ae57600080fd5b506103a76123e4565b3480156108c357600080fd5b506104a4600160a060020a03600435166123ea565b3480156108e457600080fd5b506104a46124e8565b3480156108f957600080fd5b506104a461253d565b34801561090e57600080fd5b506104a4600160a060020a036004351660243561258c565b34801561093257600080fd5b506103a7612a4f565b34801561094757600080fd5b506103a7612a55565b60046020526000908152604090205460ff1681565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b505050505081565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600b54600160a060020a031681565b60175481565b60056020526000908152604090205460ff1681565b60015490565b60145481565b6000610aac601654610aa0610a84565b9063ffffffff612a5b16565b905090565b600160a060020a0383166000908152602081905260408120548180610ad7878787612a6d565b915060018215151415610c1b57600160a060020a0386166000908152600e602052604090205460ff161515610b6557600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0389169081179091556000908152600e60205260409020805460ff191690911790555b600160a060020a038716600090815260116020526040902054610ba0908490610b94908863ffffffff612bd716565b9063ffffffff612c0016565b600160a060020a038816600090815260116020526040902054909150610bcc908263ffffffff612a5b16565b600160a060020a038089166000908152601160205260408082209390935590881681522054610c01908263ffffffff612c1516565b600160a060020a0387166000908152601160205260409020555b5095945050505050565b600354600090600160a060020a03163314610c3f57600080fd5b600160a060020a03821660009081526005602052604090205460ff161515610c6657600080fd5b50600160a060020a03166000908152600560205260409020805460ff19169055600190565b60085460ff1681565b600354600160a060020a03163314610cab57600080fd5b60035460a860020a900460ff161515610cc357600080fd5b6003805475ff00000000000000000000000000000000000000000019169055565b600d805482908110610cf257fe5b600091825260209091200154600160a060020a0316905081565b610d163382612c22565b50565b60116020526000908152604090205481565b6008546101009004600160a060020a031681565b600080600960009054906101000a9004600160a060020a0316600160a060020a0316632c46b2056040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d9557600080fd5b505af1158015610da9573d6000803e3d6000fd5b505050506040513d6020811015610dbf57600080fd5b5051600654600160a060020a038516600090815260208190526040902054919250610df491610b94908463ffffffff612bd716565b9392505050565b60035460a060020a900460ff1681565b336000908152600260209081526040808320600160a060020a038616845290915281205480831115610e6057336000908152600260209081526040808320600160a060020a0388168452909152812055610e95565b610e70818463ffffffff612a5b16565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60165481565b600c546000908190600160a060020a03163314610f1d57600080fd5b600b54600160a060020a03848116911614801590610f495750600c54600160a060020a03848116911614155b1515610fc5576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746f722063616e206e6f742062652062696e63656e74697665206160448201527f63636f756e747300000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0384166000908152600e602052604090205460ff16151560011461103a576040805160e560020a62461bcd02815260206004820152601760248201527f496e766573746f7220646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b600160a060020a0384166000908152602081905260409020549150611065828063ffffffff612a5b16565b600160a060020a03808616600090815260208190526040808220939093559085168152205461109a908363ffffffff612c1516565b600160a060020a038085166000818152602081815260409182902094909455805186815290519193928816926000805160206135b583398151915292918290030190a3600160a060020a0383166000908152600e602052604090205460ff16151561115e57600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386169081179091556000908152600e60205260409020805460ff191690911790555b50600160a060020a038316600090815260116020526040902054611188818063ffffffff612a5b16565b600160a060020a0380861660009081526011602052604080822093909355908516815220546111bd908263ffffffff612c1516565b600160a060020a03909316600090815260116020526040902092909255505050565b600a54600160a060020a031681565b600160a060020a031660009081526020819052604090205490565b600354600160a060020a031681565b600080601054600114151561122c57600080fd5b6013544210611285576040805160e560020a62461bcd02815260206004820152601060248201527f4465706f73697420746f6f206c61746500000000000000000000000000000000604482015290519081900360640190fd5b600b54600160a060020a038781169116148015906112b15750600c54600160a060020a03878116911614155b151561132d576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746f722063616e206e6f742062652062696e63656e74697665206160448201527f63636f756e747300000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600085116113ab576040805160e560020a62461bcd02815260206004820152603960248201527f4465706f736974656420737461626c6520746f6b656e20616d6f756e7420736860448201527f6f756c642062652067726561746572207468616e207a65726f00000000000000606482015290519081900360840190fd5b6113b6333087612d2a565b600160a060020a0386166000908152600e602052604090205460ff16151561143757600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0389169081179091556000908152600e60205260409020805460ff191690911790555b60125461144a908663ffffffff612c1516565b601255600160a060020a038616600090815260116020526040902054611476908663ffffffff612c1516565b600160a060020a0380881660009081526011602090815260408083209490945560095484517f2c46b2050000000000000000000000000000000000000000000000000000000081529451931693632c46b2059360048083019491928390030190829087803b1580156114e757600080fd5b505af11580156114fb573d6000803e3d6000fd5b505050506040513d602081101561151157600080fd5b5051600654909250611530908390610b9490889063ffffffff612bd716565b905061153c8682612eec565b60408051868152602081018390528151600160a060020a038916927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2604080516020808252855181830152855187937f5c0d0117b40a73a022296ac40e2adacb36e36480703c6e5ba6281e63778d85379388939092839283019185019080838360005b838110156115de5781810151838201526020016115c6565b50505050905090810190601f16801561160b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050505050565b60008060008060006010546005148061163b57506010546007145b151561164657600080fd5b600b54600160a060020a03163314806116695750600c54600160a060020a031633145b151561167457600080fd5b600d54600f5461168a908863ffffffff612c1516565b1115611706576040805160e560020a62461bcd02815260206004820152603360248201527f446973747269627574696e6720746f206d6f7265207468616e20746f74616c2060448201527f6e756d626572206f6620696e766573746f727300000000000000000000000000606482015290519081900360840190fd5b600960009054906101000a9004600160a060020a0316600160a060020a0316632c46b2056040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561175957600080fd5b505af115801561176d573d6000803e3d6000fd5b505050506040513d602081101561178357600080fd5b5051600f5490955090505b600f546117a1908763ffffffff612c1516565b81101561186457600d8054829081106117b657fe5b6000918252602080832090910154600160a060020a03168083529082905260409091205490935091508115156117eb5761185c565b6117f58383612c22565b60065461180c90610b94848863ffffffff612bd716565b93506118188385612fcf565b60408051838152602081018690528151600160a060020a038616927fc0d7daf063ebc62ce2106349353b9921835ee556adcc96d283a2255ed2db46cf928290030190a25b60010161178e565b600f54611877908763ffffffff612c1516565b600f819055600d541161189a5760006012556010546005141561189a5760066010555b505050505050565b60135481565b600954600160a060020a031681565b601054600414806118ca57506010546007145b15156118d557600080fd5b600c54600160a060020a031633146118ec57600080fd5b600c5461190390600160a060020a03163083612d2a565b6040805182815290517f6b64f6654829a562d2f4fb57628b9fb189af23266eb7bf618ebe1ee2d25861169181900360200190a160105460041415610d1657600560105550565b60408051808201909152600681527f5853436572740000000000000000000000000000000000000000000000000000602082015281565b600e6020526000908152604090205460ff1681565b3360009081526020819052604081205481806119b18686613188565b915060018215151415611ad457600160a060020a0386166000908152600e602052604090205460ff161515611a3f57600d8054600180820190925560008051602061359583398151915201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0389169081179091556000908152600e60205260409020805460ff191690911790555b33600090815260116020526040902054611a65908490610b94908863ffffffff612bd716565b33600090815260116020526040902054909150611a88908263ffffffff612a5b16565b3360009081526011602052604080822092909255600160a060020a03881681522054611aba908263ffffffff612c1516565b600160a060020a0387166000908152601160205260409020555b50949350505050565b60065481565b6000808211611b62576040805160e560020a62461bcd02815260206004820152602a60248201527f57697468647261776e20616d6f756e74206d757374206265206772656174657260448201527f207468616e207a65726f00000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038316600090815260208190526040902054821115611bd2576040805160e560020a62461bcd02815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e20746f2062652077697468647261776e604482015290519081900360640190fd5b601654611be183610aa0610a84565b1015611c83576040805160e560020a62461bcd02815260206004820152604e60248201527f416d6f756e74206f662066756e64206c65667420776f756c64206265206c657360448201527f73207468616e206d696e696d756d2066756e64207468726573686f6c6420616660648201527f746572207769746864726177616c000000000000000000000000000000000000608482015290519081900360a40190fd5b50600192915050565b600b54600160a060020a0316331480611caf5750600c54600160a060020a031633145b1515611cba57600080fd5b600a54604080517fdb006a75000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163db006a75916024808201926020929091908290030181600087803b158015611d2157600080fd5b505af1158015611d35573d6000803e3d6000fd5b505050506040513d6020811015611d4b57600080fd5b505115611da2576040805160e560020a62461bcd02815260206004820152601460248201527f736f6d657468696e672077656e742077726f6e67000000000000000000000000604482015290519081900360640190fd5b6040805182815290517ff393ea747b705b955849733040ef812bc3579a099027be87e083737573a8a5609181900360200190a150565b601054600090600114611dea57600080fd5b600b54600160a060020a0316331480611e0d5750600c54600160a060020a031633145b1515611e1857600080fd5b611e346064610b94601454601254612bd790919063ffffffff16565b600c54909150611e4d90600160a060020a031682612fcf565b611e6c6064610b94601554611e60610a84565b9063ffffffff612bd716565b6016556004601055600d546012547f1f7eb45fe73d0921317be27e3eae38ad1d302ebc1b8908a1a589cc91fb46c8f8914291611ea6610a84565b604080519485526020850193909352838301919091526060830152519081900360800190a150565b60008060105460061480611ee457506010546002145b80611ef157506010546007145b1515611efc57600080fd5b600b54600160a060020a0316331480611f1f5750600c54600160a060020a031633145b1515611f2a57600080fd5b611f326132e0565b9150611f3d82611c8c565b6008546040805160e060020a6370a082310281523060048201529051610100909204600160a060020a0316916370a08231916024808201926020929091908290030181600087803b158015611f9157600080fd5b505af1158015611fa5573d6000803e3d6000fd5b505050506040513d6020811015611fbb57600080fd5b505190506000811115611fde57600c54611fde90600160a060020a031682612fcf565b5050565b60035460a860020a900460ff1681565b600354600090600160a060020a0316331461200c57600080fd5b600160a060020a03821660009081526004602052604090205460ff16151561203357600080fd5b50600160a060020a03166000908152600460205260409020805460ff19169055600190565b600b54600160a060020a031633148061207b5750600c54600160a060020a031633145b151561208657600080fd5b600854600a54604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290516101009093049091169163095ea7b39160448082019260009290919082900301818387803b1580156120fd57600080fd5b505af1158015612111573d6000803e3d6000fd5b5050600a54604080517fa0712d68000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a03909216935063a0712d6892506024808201926020929091908290030181600087803b15801561217c57600080fd5b505af1158015612190573d6000803e3d6000fd5b505050506040513d60208110156121a657600080fd5b5051156121af57fe5b6040805182815290517f6e6829e03e5d1ef4c462cc1165a57ca946b47bb550e2d2810e23add06f3b1c5c9181900360200190a150565b600354600160a060020a031633146121fc57600080fd5b60035460a060020a900460ff161561221357600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a179055565b600c54600160a060020a031681565b336000908152600260209081526040808320600160a060020a038616845290915281205461227c908363ffffffff612c1516565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600354600090600160a060020a031633146122fb57600080fd5b600160a060020a03821660009081526004602052604090205460ff161561232157600080fd5b50600160a060020a03166000908152600460205260409020805460ff1916600190811790915590565b600354600090600160a060020a0316331461236457600080fd5b600160a060020a03821660009081526005602052604090205460ff161561238a57600080fd5b50600160a060020a03166000908152600560205260409020805460ff1916600190811790915590565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600f5481565b60105481565b600c54600160a060020a0316331461240157600080fd5b600160a060020a0381161515612487576040805160e560020a62461bcd02815260206004820152602a60248201527f4e65772042696e63656e74697665436f6c6420616464726573732063616e206e60448201527f6f74206265207a65726f00000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c8054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f53103ab2a8020cc559e4dec2798ff675ca4057e38292d1ded6d12780605fae9e9181900360200190a150565b600354600160a060020a031633146124ff57600080fd5b60035460a860020a900460ff161561251657600080fd5b6003805475ff000000000000000000000000000000000000000000191660a860020a179055565b600354600160a060020a0316331461255457600080fd5b60035460a060020a900460ff16151561256c57600080fd5b6003805474ff000000000000000000000000000000000000000019169055565b600080600080600080600080600060105460041415156125ab57600080fd5b600b54600160a060020a03163314806125ce5750600c54600160a060020a031633145b15156125d957600080fd5b60008a11612657576040805160e560020a62461bcd02815260206004820152602a60248201527f57697468647261776e20616d6f756e74206d757374206265206772656174657260448201527f207468616e207a65726f00000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038b166000908152602081905260409020548a11156126c7576040805160e560020a62461bcd02815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e20746f2062652077697468647261776e604482015290519081900360640190fd5b6016546126d68b610aa0610a84565b1015612778576040805160e560020a62461bcd02815260206004820152604e60248201527f416d6f756e74206f662066756e64206c65667420776f756c64206265206c657360448201527f73207468616e206d696e696d756d2066756e64207468726573686f6c6420616660648201527f746572207769746864726177616c000000000000000000000000000000000000608482015290519081900360a40190fd5b600160a060020a038b16600090815260208190526040902054985061279d8b8b612c22565b600160a060020a03808c1660009081526011602090815260408083205460095482517f2c46b2050000000000000000000000000000000000000000000000000000000081529251919d5090941693632c46b20593600480840194938390030190829087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b505050506040513d602081101561283857600080fd5b505160065490975061285490610b948c8a63ffffffff612bd716565b935061286a89610b948a8d63ffffffff612bd716565b955061287c848763ffffffff612a5b16565b94506128b461289286600263ffffffff612c0016565b6128a86064610b948a606363ffffffff612bd716565b9063ffffffff612c1516565b92506128c6848463ffffffff612a5b16565b915060175482101561297d576017546128e5908363ffffffff612a5b16565b905082811115612965576040805160e560020a62461bcd02815260206004820152603660248201527f576974686472617720616d6f756e74206973206e6f7420656e6f75676820746f60448201527f20636f766572206d696e696d756d2070656e616c747900000000000000000000606482015290519081900360840190fd5b612975838263ffffffff612a5b16565b925060175491505b600160a060020a038b166000908152601160205260409020546129a6908763ffffffff612a5b16565b600160a060020a038c166000908152601160205260409020556129c98b84612fcf565b600c546129df90600160a060020a031683612fcf565b604080518b8152602081018590528082018490529051600160a060020a038d16917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a2601654612a36610a84565b1415612a425760076010555b5050505050505050505050565b60155481565b60125481565b600082821115612a6757fe5b50900390565b60035460009060a060020a900460ff1615612b1a57600160a060020a03841660009081526004602052604090205460ff161515612b1a576040805160e560020a62461bcd02815260206004820152602a60248201527f6f6e6c792077686974654c6973742073656e646572732063616e207472616e7360448201527f66657220746f6b656e7300000000000000000000000000000000000000000000606482015290519081900360840190fd5b60035460a860020a900460ff1615612bc457600160a060020a03831660009081526005602052604090205460ff161515612bc4576040805160e560020a62461bcd02815260206004820152602b60248201527f6f6e6c792077686974654c697374207265636569766572732063616e2072656360448201527f6569766520746f6b656e73000000000000000000000000000000000000000000606482015290519081900360840190fd5b612bcf848484613360565b949350505050565b6000821515612be857506000610a54565b50818102818382811515612bf857fe5b0414610a5457fe5b60008183811515612c0d57fe5b049392505050565b81810182811015610a5457fe5b600160a060020a0382161515612ca8576040805160e560020a62461bcd02815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600154612cbb908263ffffffff612a5b16565b600155600160a060020a038216600090815260208190526040902054612ce7908263ffffffff612a5b16565b600160a060020a038316600081815260208181526040808320949094558351858152935191936000805160206135b5833981519152929081900390910190a35050565b6008546040805160e060020a6370a08231028152600160a060020a0385811660048301529151600093849361010090910416916370a0823191602480830192602092919082900301818787803b158015612d8357600080fd5b505af1158015612d97573d6000803e3d6000fd5b505050506040513d6020811015612dad57600080fd5b5051600854604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152888116602483015260448201889052915193955061010090920416916323b872dd9160648082019260009290919082900301818387803b158015612e2c57600080fd5b505af1158015612e40573d6000803e3d6000fd5b50506008546040805160e060020a6370a08231028152600160a060020a038981166004830152915161010090930490911693506370a0823192506024808201926020929091908290030181600087803b158015612e9c57600080fd5b505af1158015612eb0573d6000803e3d6000fd5b505050506040513d6020811015612ec657600080fd5b50519050612eda828463ffffffff612c1516565b8114612ee557600080fd5b5050505050565b600160a060020a0382161515612f4c576040805160e560020a62461bcd02815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600154612f5f908263ffffffff612c1516565b600155600160a060020a038216600090815260208190526040902054612f8b908263ffffffff612c1516565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391926000805160206135b58339815191529281900390910190a35050565b6008546040805160e060020a6370a08231028152600160a060020a0385811660048301529151600093849361010090910416916370a0823191602480830192602092919082900301818787803b15801561302857600080fd5b505af115801561303c573d6000803e3d6000fd5b505050506040513d602081101561305257600080fd5b5051600854604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152602482018890529151939550610100909204169163a9059cbb9160448082019260009290919082900301818387803b1580156130c957600080fd5b505af11580156130dd573d6000803e3d6000fd5b50506008546040805160e060020a6370a08231028152600160a060020a038981166004830152915161010090930490911693506370a0823192506024808201926020929091908290030181600087803b15801561313957600080fd5b505af115801561314d573d6000803e3d6000fd5b505050506040513d602081101561316357600080fd5b50519050613177828463ffffffff612c1516565b811461318257600080fd5b50505050565b60035460009060a060020a900460ff161561322c573360009081526004602052604090205460ff16151561322c576040805160e560020a62461bcd02815260206004820152602a60248201527f6f6e6c792077686974656c6973742073656e646572732063616e207472616e7360448201527f66657220746f6b656e7300000000000000000000000000000000000000000000606482015290519081900360840190fd5b60035460a860020a900460ff16156132d657600160a060020a03831660009081526005602052604090205460ff1615156132d6576040805160e560020a62461bcd02815260206004820152602b60248201527f6f6e6c792077686974654c697374207265636569766572732063616e2072656360448201527f6569766520746f6b656e73000000000000000000000000000000000000000000606482015290519081900360840190fd5b610df483836134c5565b600a546040805160e060020a6370a082310281523060048201529051600092600160a060020a0316916370a0823191602480830192602092919082900301818787803b15801561332f57600080fd5b505af1158015613343573d6000803e3d6000fd5b505050506040513d602081101561335957600080fd5b5051905090565b6000600160a060020a038316151561337757600080fd5b600160a060020a03841660009081526020819052604090205482111561339c57600080fd5b600160a060020a03841660009081526002602090815260408083203384529091529020548211156133cc57600080fd5b600160a060020a0384166000908152602081905260409020546133f5908363ffffffff612a5b16565b600160a060020a03808616600090815260208190526040808220939093559085168152205461342a908363ffffffff612c1516565b600160a060020a0380851660009081526020818152604080832094909455918716815260028252828120338252909152205461346c908363ffffffff612a5b16565b600160a060020a03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206135b5833981519152929181900390910190a35060019392505050565b6000600160a060020a03831615156134dc57600080fd5b336000908152602081905260409020548211156134f857600080fd5b33600090815260208190526040902054613518908363ffffffff612a5b16565b3360009081526020819052604080822092909255600160a060020a0385168152205461354a908363ffffffff612c1516565b600160a060020a038416600081815260208181526040918290209390935580518581529051919233926000805160206135b58339815191529281900390910190a3506001929150505600d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820cc776b8e55d6996f6aea8961634de74e7567c5b1d94774b6f374520f10f9249a0029
Deployed Bytecode Sourcemap
14445:18125:0:-;;;;;;;;;-1:-1:-1;;;14445:18125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8117:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8117:49:0;-1:-1:-1;;;;;8117:49:0;;;;;;;;;;;;;;;;;;;;;;;14570:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14570:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14570:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4651:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4651:206:0;-1:-1:-1;;;;;4651:206:0;;;;;;;14876:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14876:28:0;;;;;;;;-1:-1:-1;;;;;14876:28:0;;;;;;;;;;;;;;16050:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16050:25:0;;;;;;;;;;;;;;;;;;;;8171:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8171:48:0;-1:-1:-1;;;;;8171:48:0;;;;;1850:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1850:85:0;;;;15747:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15747:37:0;;;;22400:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22400:115:0;;;;26913:853;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26913:853:0;-1:-1:-1;;;;;26913:853:0;;;;;;;;;;;;10248:229;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10248:229:0;-1:-1:-1;;;;;10248:229:0;;;;;14667:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14667:21:0;;;;;;;;;;;;;;;;;;;;;;;9495:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9495:124:0;;;;;;14971:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14971:26:0;;;;;7573:75;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7573:75:0;;;;;15438:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15438:60:0;-1:-1:-1;;;;;15438:60:0;;;;;14725:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14725:31:0;;;;19152:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19152:205:0;-1:-1:-1;;;;;19152:205:0;;;;;8044:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8044:32:0;;;;6682:496;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6682:496:0;-1:-1:-1;;;;;6682:496:0;;;;;;;15960:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15960:26:0;;;;27774:1050;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27774:1050:0;-1:-1:-1;;;;;27774:1050:0;;;;;;;;;;14833:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14833:20:0;;;;2634:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2634:101:0;-1:-1:-1;;;;;2634:101:0;;;;;8010:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8010:29:0;;;;20270:1408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20270:1408:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20270:1408:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20270:1408:0;;-1:-1:-1;20270:1408:0;;-1:-1:-1;;;;;;;20270:1408:0;29236:1483;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29236:1483:0;;;;;15638:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15638:35:0;;;;14763:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14763:41:0;;;;25324:416;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25324:416:0;;;;;14620:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14620:40:0;;;;15004:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15004:48:0;-1:-1:-1;;;;;15004:48:0;;;;;25903:843;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25903:843:0;-1:-1:-1;;;;;25903:843:0;;;;;;;14539:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14539:24:0;;;;22523:444;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22523:444:0;-1:-1:-1;;;;;22523:444:0;;;;;;;19865:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19865:204:0;;;;;21919:473;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21919:473:0;;;;30727:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30727:449:0;;;;8081:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8081:31:0;;;;9767:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9767:232:0;-1:-1:-1;;;;;9767:232:0;;;;;19622:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19622:235:0;;;;;9352:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9352:137:0;;;;14935:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14935:29:0;;;;5859:343;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5859:343:0;-1:-1:-1;;;;;5859:343:0;;;;;;;10005:237;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10005:237:0;-1:-1:-1;;;;;10005:237:0;;;;;10483:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10483:234:0;-1:-1:-1;;;;;10483:234:0;;;;;5193:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5193:191:0;-1:-1:-1;;;;;5193:191:0;;;;;;;;;;15061:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15061:41:0;;;;15390:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15390:25:0;;;;31184:296;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31184:296:0;-1:-1:-1;;;;;31184:296:0;;;;;9625:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9625:134:0;;;;9219:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9219:127:0;;;;22975:2275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22975:2275:0;-1:-1:-1;;;;;22975:2275:0;;;;;;;15848:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15848:36:0;;;;15537;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15537:36:0;;;;8117:49;;;;;;;;;;;;;;;:::o;14570:43::-;;;;;;;;;;;;;;;-1:-1:-1;;14570:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4651:206::-;4743:10;4718:4;4735:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;4735:29:0;;;;;;;;;;;:38;;;4789;;;;;;;4718:4;;4735:29;;4743:10;;4789:38;;;;;;;;-1:-1:-1;4845:4:0;4651:206;;;;;:::o;14876:28::-;;;-1:-1:-1;;;;;14876:28:0;;:::o;16050:25::-;;;;:::o;8171:48::-;;;;;;;;;;;;;;;:::o;1850:85::-;1917:12;;1850:85;:::o;15747:37::-;;;;:::o;22400:115::-;22450:7;22477:30;22495:11;;22477:13;:11;:13::i;:::-;:17;:30;:17;:30;:::i;:::-;22470:37;;22400:115;:::o;26913:853::-;-1:-1:-1;;;;;27048:15:0;;26995:4;27048:15;;;;;;;;;;;26995:4;;27089:38;27057:5;27115:3;27120:6;27089:18;:38::i;:::-;27074:53;-1:-1:-1;27154:4:0;27143:15;;;;27140:594;;;-1:-1:-1;;;;;27178:21:0;;;;;;:16;:21;;;;;;;;:30;;27175:136;;27229:9;27:10:-1;;39:1;23:18;;;45:23;;;-1:-1;;;;;;;;;;;27229:19:0;;;-1:-1:-1;;27229:19:0;-1:-1:-1;;;;;27229:19:0;;;;;;;;-1:-1:-1;27267:21:0;;;:16;27229:19;27267:21;;;;:28;;-1:-1:-1;;27267:28:0;;;;;;27175:136;-1:-1:-1;;;;;27434:32:0;;;;;;:25;:32;;;;;;:76;;27483:26;;27434:44;;27471:6;27434:44;:36;:44;:::i;:::-;:48;:76;:48;:76;:::i;:::-;-1:-1:-1;;;;;27560:32:0;;;;;;:25;:32;;;;;;27403:107;;-1:-1:-1;27560:58:0;;27403:107;27560:58;:36;:58;:::i;:::-;-1:-1:-1;;;;;27525:32:0;;;;;;;:25;:32;;;;;;:93;;;;27666:30;;;;;;;:56;;27701:20;27666:56;:34;:56;:::i;:::-;-1:-1:-1;;;;;27633:30:0;;;;;;:25;:30;;;;;:89;27140:594;-1:-1:-1;27751:7:0;26913:853;-1:-1:-1;;;;;26913:853:0:o;10248:229::-;8397:14;;10346:4;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;-1:-1:-1;;;;;10367:35:0;;;;;;:16;:35;;;;;;;;10359:44;;;;;;;;-1:-1:-1;;;;;;10410:35:0;10448:5;10410:35;;;:16;:35;;;;;:43;;-1:-1:-1;;10410:43:0;;;-1:-1:-1;;10248:229:0:o;14667:21::-;;;;;;:::o;9495:124::-;8397:14;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;9559:19;;-1:-1:-1;;;9559:19:0;;;;9551:28;;;;;;;;9586:19;:27;;-1:-1:-1;;9586:27:0;;;9495:124::o;14971:26::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14971:26:0;;-1:-1:-1;14971:26:0;:::o;7573:75::-;7617:25;7623:10;7635:6;7617:5;:25::i;:::-;7573:75;:::o;15438:60::-;;;;;;;;;;;;;:::o;14725:31::-;;;;;;-1:-1:-1;;;;;14725:31:0;;:::o;19152:205::-;19215:7;19235:24;19262:6;;;;;;;;;-1:-1:-1;;;;;19262:6:0;-1:-1:-1;;;;;19262:12:0;;:14;;;;;-1:-1:-1;;;19262:14:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19262:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19262:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19262:14:0;19339:9;;-1:-1:-1;;;;;19294:18:0;;:8;:18;;;19262:14;19294:18;;;;;;;19262:14;;-1:-1:-1;19294:55:0;;:40;;19262:14;19294:40;:22;:40;:::i;:55::-;19287:62;19152:205;-1:-1:-1;;;19152:205:0:o;8044:32::-;;;-1:-1:-1;;;8044:32:0;;;;;:::o;6682:496::-;6860:10;6811:4;6852:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6852:29:0;;;;;;;;;;6896:27;;;6892:180;;;6944:10;6968:1;6936:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6936:29:0;;;;;;;;;:33;6892:180;;;7030:30;:8;7043:16;7030:30;:12;:30;:::i;:::-;7006:10;6998:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6998:29:0;;;;;;;;;:62;6892:180;7096:10;7118:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7087:61:0;;7118:29;;;;;;;;;;;7087:61;;;;;;;;;7096:10;7087:61;;;;;;;;;;;-1:-1:-1;7166:4:0;;6682:496;-1:-1:-1;;;6682:496:0:o;15960:26::-;;;;:::o;27774:1050::-;17980:14;;28095:15;;;;-1:-1:-1;;;;;17980:14:0;17966:10;:28;17958:37;;;;;;27903:13;;-1:-1:-1;;;;;27887:29:0;;;27903:13;;27887:29;;;;27886:67;;-1:-1:-1;27938:14:0;;-1:-1:-1;;;;;27922:30:0;;;27938:14;;27922:30;;27886:67;27878:119;;;;;;;-1:-1:-1;;;;;27878:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28016:30:0;;;;;;:16;:30;;;;;;;;:38;;:30;:38;28008:74;;;;;-1:-1:-1;;;;;28008:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28113:22:0;;:8;:22;;;;;;;;;;;;-1:-1:-1;28171:35:0;28113:22;;28171:35;:26;:35;:::i;:::-;-1:-1:-1;;;;;28146:22:0;;;:8;:22;;;;;;;;;;;:60;;;;28242:22;;;;;;;:35;;28269:7;28242:35;:26;:35;:::i;:::-;-1:-1:-1;;;;;28217:22:0;;;:8;:22;;;;;;;;;;;;:60;;;;28293:45;;;;;;;28217:22;;28293:45;;;;-1:-1:-1;;;;;;;;;;;28293:45:0;;;;;;;;-1:-1:-1;;;;;28352:30:0;;;;;;:16;:30;;;;;;;;:39;;28349:151;;28408:9;27:10:-1;;39:1;23:18;;;45:23;;;-1:-1;;;;;;;;;;;28408:28:0;;;-1:-1:-1;;28408:28:0;-1:-1:-1;;;;;28408:28:0;;;;;;;;-1:-1:-1;28451:30:0;;;:16;28408:28;28451:30;;;;:37;;-1:-1:-1;;28451:37:0;;;;;;28349:151;-1:-1:-1;;;;;;28541:39:0;;;;;;:25;:39;;;;;;28633:65;28541:39;;28633:65;:43;:65;:::i;:::-;-1:-1:-1;;;;;28591:39:0;;;;;;;:25;:39;;;;;;:107;;;;28751:39;;;;;;;:65;;28795:20;28751:65;:43;:65;:::i;:::-;-1:-1:-1;;;;;28709:39:0;;;;;;;:25;:39;;;;;:107;;;;-1:-1:-1;;;27774:1050:0:o;14833:20::-;;;-1:-1:-1;;;;;14833:20:0;;:::o;2634:101::-;-1:-1:-1;;;;;2713:16:0;2690:7;2713:16;;;;;;;;;;;;2634:101::o;8010:29::-;;;-1:-1:-1;;;;;8010:29:0;;:::o;20270:1408::-;21294:24;21398:25;17013:10;;17027:1;17013:15;17005:24;;;;;;;;20411:20;;20405:3;:26;20397:55;;;;;-1:-1:-1;;;;;20397:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20484:13;;-1:-1:-1;;;;;20472:25:0;;;20484:13;;20472:25;;;;20471:59;;-1:-1:-1;20515:14:0;;-1:-1:-1;;;;;20503:26:0;;;20515:14;;20503:26;;20471:59;20463:111;;;;;;;-1:-1:-1;;;;;20463:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20613:1;20593:21;;20585:91;;;;;-1:-1:-1;;;;;20585:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20740:70;20765:10;20785:4;20792:17;20740:24;:70::i;:::-;-1:-1:-1;;;;;20904:26:0;;;;;;:16;:26;;;;;;;;:35;;20901:139;;20956:9;27:10:-1;;39:1;23:18;;;45:23;;;-1:-1;;;;;;;;;;;20956:24:0;;;-1:-1:-1;;20956:24:0;-1:-1:-1;;;;;20956:24:0;;;;;;;;-1:-1:-1;20995:26:0;;;:16;20956:24;20995:26;;;;:33;;-1:-1:-1;;20995:33:0;;;;;;20901:139;21074:21;;:44;;21100:17;21074:44;:25;:44;:::i;:::-;21050:21;:68;-1:-1:-1;;;;;21167:35:0;;;;;;:25;:35;;;;;;:58;;21207:17;21167:58;:39;:58;:::i;:::-;-1:-1:-1;;;;;21129:35:0;;;;;;;:25;:35;;;;;;;;:96;;;;21321:6;;:14;;;;;;;:6;;;:12;;:14;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;21321:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21321:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21321:14:0;21476:9;;21321:14;;-1:-1:-1;21454:54:0;;21321:14;;21454:32;;:17;;:32;:21;:32;:::i;:54::-;21434:74;;21519:34;21525:8;21535:17;21519:5;:34::i;:::-;21571:55;;;;;;;;;;;;;;-1:-1:-1;;;;;21571:55:0;;;;;;;;;;;21642:28;;;;;;;;;;;;;;;21651:4;;21642:28;;21657:12;;21642:28;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;21642:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20270:1408;;;;;;:::o;29236:1483::-;29552:24;29606:35;29652:16;29679:23;29766:6;17403:10;;17417:1;17403:15;17402:38;;;;17424:10;;17438:1;17424:15;17402:38;17394:47;;;;;;;;17832:13;;-1:-1:-1;;;;;17832:13:0;17818:10;:27;;17817:63;;-1:-1:-1;17865:14:0;;-1:-1:-1;;;;;17865:14:0;17851:10;:28;17817:63;17795:96;;;;;;;;29411:9;:16;29351:26;;:56;;29382:24;29351:56;:30;:56;:::i;:::-;:76;;29343:140;;;;;-1:-1:-1;;;;;29343:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29579:6;;;;;;;;;-1:-1:-1;;;;;29579:6:0;-1:-1:-1;;;;;29579:12:0;;:14;;;;;-1:-1:-1;;;29579:14:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29579:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29579:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29579:14:0;29775:26;;29579:14;;-1:-1:-1;29775:26:0;-1:-1:-1;29762:570:0;29808:26;;:56;;29839:24;29808:56;:30;:56;:::i;:::-;29803:1;:62;29762:570;;;29898:9;:12;;29908:1;;29898:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29898:12:0;29943:18;;;;;;;;;;;;29898:12;;-1:-1:-1;29943:18:0;-1:-1:-1;29979:20:0;;29976:33;;;30001:8;;29976:33;30024:32;30030:8;30040:15;30024:5;:32::i;:::-;30145:9;;30103:52;;:37;:15;30123:16;30103:37;:19;:37;:::i;:52::-;30073:82;;30170:59;30191:8;30201:27;30170:20;:59::i;:::-;30251:69;;;;;;;;;;;;;;-1:-1:-1;;;;;30251:69:0;;;;;;;;;;;29762:570;29867:3;;29762:570;;;30373:26;;:56;;30404:24;30373:56;:30;:56;:::i;:::-;30344:26;:85;;;30542:9;:16;-1:-1:-1;30509:203:0;;30599:1;30575:21;:25;30669:10;;30683:1;30669:15;30666:34;;;30699:1;30686:10;:14;30666:34;29236:1483;;;;;;:::o;15638:35::-;;;;:::o;14763:41::-;;;-1:-1:-1;;;;;14763:41:0;;:::o;25324:416::-;17287:10;;17301:1;17287:15;17286:38;;;;17308:10;;17322:1;17308:15;17286:38;17278:47;;;;;;;;17980:14;;-1:-1:-1;;;;;17980:14:0;17966:10;:28;17958:37;;;;;;25522:14;;25497:74;;-1:-1:-1;;;;;25522:14:0;25546:4;25553:17;25497:24;:74::i;:::-;25589:28;;;;;;;;;;;;;;;;;25701:10;;25715:1;25701:15;25698:34;;;25731:1;25718:10;:14;25324:416;:::o;14620:40::-;;;;;;;;;;;;;;;;;;;:::o;15004:48::-;;;;;;;;;;;;;;;:::o;25903:843::-;26028:10;25966:4;26019:20;;;;;;;;;;;25966:4;;26065:27;26080:3;26085:6;26065:14;:27::i;:::-;26050:42;-1:-1:-1;26119:4:0;26108:15;;;;26105:609;;;-1:-1:-1;;;;;26143:21:0;;;;;;:16;:21;;;;;;;;:30;;26140:136;;26194:9;27:10:-1;;39:1;23:18;;;45:23;;;-1:-1;;;;;;;;;;;26194:19:0;;;-1:-1:-1;;26194:19:0;-1:-1:-1;;;;;26194:19:0;;;;;;;;-1:-1:-1;26232:21:0;;;:16;26194:19;26232:21;;;;:28;;-1:-1:-1;;26232:28:0;;;;;;26140:136;26425:10;26399:37;;;;:25;:37;;;;;;:81;;26453:26;;26399:49;;26441:6;26399:49;:41;:49;:::i;:81::-;26561:10;26535:37;;;;:25;:37;;;;;;26368:112;;-1:-1:-1;26535:63:0;;26368:112;26535:63;:41;:63;:::i;:::-;26521:10;26495:37;;;;:25;:37;;;;;;:103;;;;-1:-1:-1;;;;;26646:30:0;;;;;;:56;;26681:20;26646:56;:34;:56;:::i;:::-;-1:-1:-1;;;;;26613:30:0;;;;;;:25;:30;;;;;:89;26105:609;-1:-1:-1;26731:7:0;25903:843;-1:-1:-1;;;;25903:843:0:o;14539:24::-;;;;:::o;22523:444::-;22612:4;22637:15;;;22629:70;;;;;-1:-1:-1;;;;;22629:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22718:18:0;;:8;:18;;;;;;;;;;;:33;-1:-1:-1;22718:33:0;22710:78;;;;;-1:-1:-1;;;;;22710:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22841:11;;22807:30;22825:11;22807:13;:11;:13::i;:30::-;:45;;22799:136;;;;;-1:-1:-1;;;;;22799:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22955:4:0;22523:444;;;;:::o;19865:204::-;17832:13;;-1:-1:-1;;;;;17832:13:0;17818:10;:27;;17817:63;;-1:-1:-1;17865:14:0;;-1:-1:-1;;;;;17865:14:0;17851:10;:28;17817:63;17795:96;;;;;;;;19951:6;;:32;;;;;;;;;;;;;;-1:-1:-1;;;;;19951:6:0;;;;:13;;:32;;;;;;;;;;;;;;;:6;;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;19951:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19951:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19951:32:0;:37;19943:70;;;;;-1:-1:-1;;;;;19943:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20031:30;;;;;;;;;;;;;;;;;19865:204;:::o;21919:473::-;17013:10;;22014:25;;17027:1;17013:15;17005:24;;;;;;17832:13;;-1:-1:-1;;;;;17832:13:0;17818:10;:27;;17817:63;;-1:-1:-1;17865:14:0;;-1:-1:-1;;;;;17865:14:0;17851:10;:28;17817:63;17795:96;;;;;;;;22042:58;22096:3;22042:49;22068:22;;22042:21;;:25;;:49;;;;:::i;:58::-;22132:14;;22014:86;;-1:-1:-1;22111:55:0;;-1:-1:-1;;;;;22132:14:0;22014:86;22111:20;:55::i;:::-;22193:49;22238:3;22193:40;22211:21;;22193:13;:11;:13::i;:::-;:17;:40;:17;:40;:::i;:49::-;22179:11;:63;22297:1;22284:10;:14;22329:9;:16;22347:21;;22314:70;;22324:3;;22370:13;:11;:13::i;:::-;22314:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21919:473;:::o;30727:449::-;30870:24;30995:22;17673:10;;17687:1;17673:15;17672:38;;;;17694:10;;17708:1;17694:15;17672:38;:59;;;;17715:10;;17729:1;17715:15;17672:59;17664:68;;;;;;;;17832:13;;-1:-1:-1;;;;;17832:13:0;17818:10;:27;;17817:63;;-1:-1:-1;17865:14:0;;-1:-1:-1;;;;;17865:14:0;17851:10;:28;17817:63;17795:96;;;;;;;;30924:18;:16;:18::i;:::-;30905:37;;30953:29;30965:16;30953:11;:29::i;:::-;31020:11;;:36;;;-1:-1:-1;;;;;31020:36:0;;31050:4;31020:36;;;;;;:11;;;;-1:-1:-1;;;;;31020:11:0;;:21;;:36;;;;;;;;;;;;;;;-1:-1:-1;31020:11:0;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;31020:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31020:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31020:36:0;;-1:-1:-1;31087:1:0;31070:18;;31067:102;;;31126:14;;31105:52;;-1:-1:-1;;;;;31126:14:0;31142;31105:20;:52::i;:::-;30727:449;;:::o;8081:31::-;;;-1:-1:-1;;;8081:31:0;;;;;:::o;9767:232::-;8397:14;;9866:4;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;-1:-1:-1;;;;;9887:36:0;;;;;;:17;:36;;;;;;;;9879:45;;;;;;;;-1:-1:-1;;;;;;9931:36:0;9970:5;9931:36;;;:17;:36;;;;;:44;;-1:-1:-1;;9931:44:0;;;-1:-1:-1;;9767:232:0:o;19622:235::-;17832:13;;-1:-1:-1;;;;;17832:13:0;17818:10;:27;;17817:63;;-1:-1:-1;17865:14:0;;-1:-1:-1;;;;;17865:14:0;17851:10;:28;17817:63;17795:96;;;;;;;;19691:11;;19719:6;;19691:48;;;;;;-1:-1:-1;;;;;19719:6:0;;;19691:48;;;;;;;;;;;;:11;;;;;;;;:19;;:48;;;;;-1:-1:-1;;19691:48:0;;;;;;;;-1:-1:-1;19691:11:0;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;19691:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19781:6:0;;:23;;;;;;;;;;;;;;-1:-1:-1;;;;;19781:6:0;;;;-1:-1:-1;19781:11:0;;-1:-1:-1;19781:23:0;;;;;;;;;;;;;;;:6;;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;19781:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19781:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19781:23:0;:28;19774:36;;;;19828:21;;;;;;;;;;;;;;;;;19622:235;:::o;9352:137::-;8397:14;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;9419:20;;-1:-1:-1;;;9419:20:0;;;;:29;9411:38;;;;;;9456:20;:27;;-1:-1:-1;;9456:27:0;-1:-1:-1;;;9456:27:0;;;9352:137::o;14935:29::-;;;-1:-1:-1;;;;;14935:29:0;;:::o;5859:343::-;6056:10;5983:4;6048:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6048:29:0;;;;;;;;;;:46;;6082:11;6048:46;:33;:46;:::i;:::-;6013:10;6005:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6005:29:0;;;;;;;;;;;;:90;;;6111:61;;;;;;6005:29;;6111:61;;;;;;;;;;;-1:-1:-1;6190:4:0;5859:343;;;;:::o;10005:237::-;8397:14;;10101:4;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;-1:-1:-1;;;;;10122:36:0;;;;;;:17;:36;;;;;;;;:45;10114:54;;;;;;-1:-1:-1;;;;;;10175:36:0;;;;;:17;:36;;;;;:43;;-1:-1:-1;;10175:43:0;10214:4;10175:43;;;;;;10214:4;10005:237::o;10483:234::-;8397:14;;10578:4;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;-1:-1:-1;;;;;10599:35:0;;;;;;:16;:35;;;;;;;;:44;10591:53;;;;;;-1:-1:-1;;;;;;10651:35:0;;;;;:16;:35;;;;;:42;;-1:-1:-1;;10651:42:0;10689:4;10651:42;;;;;;10689:4;10483:234::o;5193:191::-;-1:-1:-1;;;;;5351:15:0;;;5319:7;5351:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;5193:191::o;15061:41::-;;;;:::o;15390:25::-;;;;:::o;31184:296::-;17980:14;;-1:-1:-1;;;;;17980:14:0;17966:10;:28;17958:37;;;;;;-1:-1:-1;;;;;31292:32:0;;;;31284:87;;;;;-1:-1:-1;;;;;31284:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31384:14;:35;;-1:-1:-1;;;;;31384:35:0;;-1:-1:-1;;31384:35:0;;;;;;;;31435:37;;;;;;;;;;;;;;;;31184:296;:::o;9625:134::-;8397:14;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;9691:19;;-1:-1:-1;;;9691:19:0;;;;:28;9683:37;;;;;;9727:19;:26;;-1:-1:-1;;9727:26:0;-1:-1:-1;;;9727:26:0;;;9625:134::o;9219:127::-;8397:14;;-1:-1:-1;;;;;8397:14:0;8383:10;:28;8375:37;;;;;;9284:20;;-1:-1:-1;;;9284:20:0;;;;9276:29;;;;;;;;9312:20;:28;;-1:-1:-1;;9312:28:0;;;9219:127::o;22975:2275::-;23390:37;23565:25;23697:24;23749:17;23777:16;23804:28;23843:29;23883:34;24453:11;17193:10;;17207:1;17193:15;17185:24;;;;;;;;17832:13;;-1:-1:-1;;;;;17832:13:0;17818:10;:27;;17817:63;;-1:-1:-1;17865:14:0;;-1:-1:-1;;;;;17865:14:0;17851:10;:28;17817:63;17795:96;;;;;;;;23093:1;23079:15;;23071:70;;;;;-1:-1:-1;;;;;23071:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23160:18:0;;:8;:18;;;;;;;;;;;:33;-1:-1:-1;23160:33:0;23152:78;;;;;-1:-1:-1;;;;;23152:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23283:11;;23249:30;23267:11;23249:13;:11;:13::i;:30::-;:45;;23241:136;;;;;-1:-1:-1;;;;;23241:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23430:18:0;;:8;:18;;;;;;;;;;;;-1:-1:-1;23524:28:0;23439:8;23540:11;23524:5;:28::i;:::-;-1:-1:-1;;;;;23593:35:0;;;;;;;:25;:35;;;;;;;;;23724:6;;:14;;;;;;;23593:35;;-1:-1:-1;23724:6:0;;;;:12;;:14;;;;;23593:35;23724:14;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;23724:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23724:14:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23724:14:0;23991:9;;23724:14;;-1:-1:-1;23953:48:0;;:33;:11;23724:14;23953:33;:15;:33;:::i;:48::-;23930:71;-1:-1:-1;24024:69:0;24063:29;24024:34;:17;24046:11;24024:34;:21;:34;:::i;:69::-;24012:81;-1:-1:-1;24115:35:0;:20;24012:81;24115:35;:24;:35;:::i;:::-;24104:46;-1:-1:-1;24185:47:0;24216:15;24104:46;24229:1;24216:15;:12;:15;:::i;:::-;24185:26;24207:3;24185:17;:9;24199:2;24185:17;:13;:17;:::i;:26::-;:30;:47;:30;:47;:::i;:::-;24161:71;-1:-1:-1;24272:47:0;:20;24161:71;24272:47;:24;:47;:::i;:::-;24243:76;;24426:10;;24397:26;:39;24393:361;;;24467:10;;:42;;24482:26;24467:42;:14;:42;:::i;:::-;24453:56;-1:-1:-1;24532:28:0;;;;24524:95;;;;;-1:-1:-1;;;;;24524:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24658:30;:21;24684:3;24658:30;:25;:30;:::i;:::-;24634:54;;24732:10;;24703:39;;24393:361;-1:-1:-1;;;;;24804:35:0;;;;;;:25;:35;;;;;;:50;;24844:9;24804:50;:39;:50;:::i;:::-;-1:-1:-1;;;;;24766:35:0;;;;;;:25;:35;;;;;:88;24867:53;24792:8;24898:21;24867:20;:53::i;:::-;24952:14;;24931:64;;-1:-1:-1;;;;;24952:14:0;24968:26;24931:20;:64::i;:::-;25013:82;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25013:82:0;;;;;;;;;;;;;25189:11;;25172:13;:11;:13::i;:::-;:28;25169:74;;;25230:1;25217:10;:14;25169:74;22975:2275;;;;;;;;;;;:::o;15848:36::-;;;;:::o;15537:::-;;;;:::o;11776:113::-;11834:7;11857:6;;;;11850:14;;;;-1:-1:-1;11878:5:0;;;11776:113::o;8815:398::-;8913:20;;8897:4;;-1:-1:-1;;;8913:20:0;;;;8909:122;;;-1:-1:-1;;;;;8952:24:0;;;;;;:17;:24;;;;;;;;8944:79;;;;;;;-1:-1:-1;;;;;8944:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9041:19;;-1:-1:-1;;;9041:19:0;;;;9037:119;;;-1:-1:-1;;;;;9079:21:0;;;;;;:16;:21;;;;;;;;9071:77;;;;;;;-1:-1:-1;;;;;9071:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9169:38;9188:5;9195:3;9200:6;9169:18;:38::i;:::-;9162:45;8815:398;-1:-1:-1;;;;8815:398:0:o;10911:384::-;10969:9;11199:6;;11195:37;;;-1:-1:-1;11223:1:0;11216:8;;11195:37;-1:-1:-1;11244:5:0;;;11248:1;11244;:5;11263;;;;;;;;:10;11256:18;;;11382:277;11440:7;11652:1;11648;:5;;;;;;;;;11382:277;-1:-1:-1;;;11382:277:0:o;11956:127::-;12036:5;;;12055:6;;;;12048:14;;;7654:288;-1:-1:-1;;;;;7726:21:0;;;;7718:67;;;;;-1:-1:-1;;;;;7718:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7807:12;;:24;;7824:6;7807:24;:16;:24;:::i;:::-;7792:12;:39;-1:-1:-1;;;;;7858:17:0;;:8;:17;;;;;;;;;;;:29;;7880:6;7858:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;7838:17:0;;:8;:17;;;;;;;;;;;:49;;;;7899:37;;;;;;;7838:8;;-1:-1:-1;;;;;;;;;;;7899:37:0;;;;;;;;;;7654:288;;:::o;18658:389::-;18786:11;;:25;;;-1:-1:-1;;;;;18786:25:0;;-1:-1:-1;;;;;18786:25:0;;;;;;;;;18754:29;;;;18786:11;;;;;;:21;;:25;;;;;;;;;;;;;;18754:29;18786:11;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;18786:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18786:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18786:25:0;18861:11;;:42;;;;;;-1:-1:-1;;;;;18861:42:0;;;;;;;;;;;;;;;;;;;;;;18786:25;;-1:-1:-1;18861:11:0;;;;;;:24;;:42;;;;;-1:-1:-1;;18861:42:0;;;;;;;;-1:-1:-1;18861:11:0;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;18861:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18937:11:0;;:25;;;-1:-1:-1;;;;;18937:25:0;;-1:-1:-1;;;;;18937:25:0;;;;;;;;;:11;;;;;;;;-1:-1:-1;18937:21:0;;-1:-1:-1;18937:25:0;;;;;;;;;;;;;;;-1:-1:-1;18937:11:0;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;18937:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18937:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18937:25:0;;-1:-1:-1;19005:33:0;:21;19031:6;19005:33;:25;:33;:::i;:::-;18981:57;;18973:66;;;;;;18658:389;;;;;:::o;7281:286::-;-1:-1:-1;;;;;7353:21:0;;;;7345:65;;;;;-1:-1:-1;;;;;7345:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7432:12;;:24;;7449:6;7432:24;:16;:24;:::i;:::-;7417:12;:39;-1:-1:-1;;;;;7483:17:0;;:8;:17;;;;;;;;;;;:29;;7505:6;7483:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;7463:17:0;;:8;:17;;;;;;;;;;;:49;;;;7524:37;;;;;;;7463:17;;:8;;-1:-1:-1;;;;;;;;;;;7524:37:0;;;;;;;;;7281:286;;:::o;18289:361::-;18399:11;;:25;;;-1:-1:-1;;;;;18399:25:0;;-1:-1:-1;;;;;18399:25:0;;;;;;;;;18367:29;;;;18399:11;;;;;;:21;;:25;;;;;;;;;;;;;;18367:29;18399:11;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;18399:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18399:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18399:25:0;18474:11;;:32;;;;;;-1:-1:-1;;;;;18474:32:0;;;;;;;;;;;;;;;18399:25;;-1:-1:-1;18474:11:0;;;;;;:20;;:32;;;;;-1:-1:-1;;18474:32:0;;;;;;;;-1:-1:-1;18474:11:0;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;18474:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18540:11:0;;:25;;;-1:-1:-1;;;;;18540:25:0;;-1:-1:-1;;;;;18540:25:0;;;;;;;;;:11;;;;;;;;-1:-1:-1;18540:21:0;;-1:-1:-1;18540:25:0;;;;;;;;;;;;;;;-1:-1:-1;18540:11:0;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;18540:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18540:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18540:25:0;;-1:-1:-1;18608:33:0;:21;18634:6;18608:33;:25;:33;:::i;:::-;18584:57;;18576:66;;;;;;18289:361;;;;:::o;8434:373::-;8513:20;;8497:4;;-1:-1:-1;;;8513:20:0;;;;8509:127;;;8570:10;8552:29;;;;:17;:29;;;;;;;;8544:84;;;;;;;-1:-1:-1;;;;;8544:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8646:19;;-1:-1:-1;;;8646:19:0;;;;8642:119;;;-1:-1:-1;;;;;8684:21:0;;;;;;:16;:21;;;;;;;;8676:77;;;;;;;-1:-1:-1;;;;;8676:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8774:27;8789:3;8794:6;8774:14;:27::i;19390:111::-;19462:6;;:31;;;-1:-1:-1;;;;;19462:31:0;;19487:4;19462:31;;;;;;19435:7;;-1:-1:-1;;;;;19462:6:0;;:16;;:31;;;;;;;;;;;;;;19435:7;19462:6;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;19462:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19462:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19462:31:0;;-1:-1:-1;19390:111:0;:::o;3465:545::-;3599:4;-1:-1:-1;;;;;3629:17:0;;;;3621:26;;;;;;-1:-1:-1;;;;;3676:15:0;;:8;:15;;;;;;;;;;;3666:25;;;3658:34;;;;;;-1:-1:-1;;;;;3721:14:0;;;;;;:7;:14;;;;;;;;3736:10;3721:26;;;;;;;;3711:36;;;3703:45;;;;;;-1:-1:-1;;;;;3779:15:0;;:8;:15;;;;;;;;;;;:27;;3799:6;3779:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;3761:15:0;;;:8;:15;;;;;;;;;;;:45;;;;3833:13;;;;;;;:25;;3851:6;3833:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;3817:13:0;;;:8;:13;;;;;;;;;;;:41;;;;3898:14;;;;;:7;:14;;;;;3913:10;3898:26;;;;;;;:38;;3929:6;3898:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;3869:14:0;;;;;;;:7;:14;;;;;;;;3884:10;3869:26;;;;;;;;:67;;;;3952:28;;;;;;;;;;;3869:14;;-1:-1:-1;;;;;;;;;;;3952:28:0;;;;;;;;;;-1:-1:-1;3998:4:0;3465:545;;;;;:::o;2096:329::-;2159:4;-1:-1:-1;;;;;2180:17:0;;;;2172:26;;;;;;2232:10;2223:8;:20;;;;;;;;;;;2213:30;;;2205:39;;;;;;2285:10;2276:8;:20;;;;;;;;;;;:32;;2301:6;2276:32;:24;:32;:::i;:::-;2262:10;2253:8;:20;;;;;;;;;;;:55;;;;-1:-1:-1;;;;;2331:13:0;;;;;;:25;;2349:6;2331:25;:17;:25;:::i;:::-;-1:-1:-1;;;;;2315:13:0;;:8;:13;;;;;;;;;;;;:41;;;;2368:33;;;;;;;2315:13;;2377:10;;-1:-1:-1;;;;;;;;;;;2368:33:0;;;;;;;;;-1:-1:-1;2415:4:0;2096:329;;;;:::o
Swarm Source
bzzr://cc776b8e55d6996f6aea8961634de74e7567c5b1d94774b6f374520f10f9249a
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.