More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 27,807 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 40808522 | 454 days ago | IN | 0 AVAX | 0.00077133 | ||||
Pause | 27512868 | 769 days ago | IN | 0 AVAX | 0.00118593 | ||||
Token To Bnb Swa... | 27512858 | 769 days ago | IN | 0 AVAX | 0.00309771 | ||||
Unpause | 27512830 | 769 days ago | IN | 0 AVAX | 0.00074074 | ||||
Pause | 27512640 | 769 days ago | IN | 0 AVAX | 0.00118593 | ||||
Token To Bnb Swa... | 27512583 | 769 days ago | IN | 0 AVAX | 0.00309584 | ||||
Token To Bnb Swa... | 27512483 | 769 days ago | IN | 0 AVAX | 0.00309522 | ||||
Unpause | 27512337 | 769 days ago | IN | 0 AVAX | 0.00074074 | ||||
Pause | 27512263 | 769 days ago | IN | 0 AVAX | 0.00118593 | ||||
Unpause | 27512202 | 769 days ago | IN | 0 AVAX | 0.00074074 | ||||
Pause | 27512133 | 769 days ago | IN | 0 AVAX | 0.00118593 | ||||
Bnb To Token Swa... | 27512122 | 769 days ago | IN | 1 AVAX | 0.0027055 | ||||
Unpause | 27512110 | 769 days ago | IN | 0 AVAX | 0.00074074 | ||||
Remove Liquidity | 27509802 | 769 days ago | IN | 0 AVAX | 0.0026177 | ||||
Remove Liquidity | 27509373 | 769 days ago | IN | 0 AVAX | 0.00261957 | ||||
Remove Liquidity | 27509330 | 769 days ago | IN | 0 AVAX | 0.00261864 | ||||
Remove Liquidity | 27509221 | 769 days ago | IN | 0 AVAX | 0.00261489 | ||||
Remove Liquidity | 27509177 | 769 days ago | IN | 0 AVAX | 0.00261396 | ||||
Remove Liquidity | 27509146 | 769 days ago | IN | 0 AVAX | 0.00261396 | ||||
Remove Liquidity | 27508370 | 769 days ago | IN | 0 AVAX | 0.00261396 | ||||
Remove Liquidity | 27508229 | 769 days ago | IN | 0 AVAX | 0.00261396 | ||||
Approve | 26828446 | 785 days ago | IN | 0 AVAX | 0.00078588 | ||||
Transfer | 13509146 | 1102 days ago | IN | 2 AVAX | 0.0078068 | ||||
Pause | 13460363 | 1103 days ago | IN | 0 AVAX | 0.00274502 | ||||
Token To Bnb Swa... | 13460363 | 1103 days ago | IN | 0 AVAX | 0.00697762 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
27512858 | 769 days ago | 5.64911794 AVAX | ||||
27512583 | 769 days ago | 53.49029282 AVAX | ||||
27512483 | 769 days ago | 0.0020332 AVAX | ||||
27509802 | 769 days ago | 0.01323758 AVAX | ||||
27509373 | 769 days ago | 0.00490189 AVAX | ||||
27509330 | 769 days ago | 0.00245094 AVAX | ||||
27509221 | 769 days ago | 0 AVAX | ||||
27509177 | 769 days ago | 49 wei | ||||
27509146 | 769 days ago | 4 wei | ||||
27508370 | 769 days ago | 284 wei | ||||
27508229 | 769 days ago | 4 wei | ||||
13460363 | 1103 days ago | 27.34957068 AVAX | ||||
13460268 | 1103 days ago | 48.33172036 AVAX | ||||
13460234 | 1103 days ago | 183.6813175 AVAX | ||||
13460094 | 1103 days ago | 402.27198784 AVAX | ||||
13450800 | 1104 days ago | 534.48509991 AVAX | ||||
13449641 | 1104 days ago | 1,185.86800606 AVAX | ||||
13417129 | 1104 days ago | 0.50005137 AVAX | ||||
13416030 | 1104 days ago | 1,027.43585545 AVAX | ||||
13415990 | 1104 days ago | 1,027.43585545 AVAX | ||||
13415950 | 1104 days ago | 1,027.43585545 AVAX | ||||
13415883 | 1104 days ago | 2,054.8717109 AVAX | ||||
13415832 | 1104 days ago | 2,054.8717109 AVAX | ||||
13415740 | 1104 days ago | 0 AVAX | ||||
13000100 | 1114 days ago | 0 AVAX |
Loading...
Loading
Contract Name:
TheWell
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2022-03-10 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.12; // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner,"you are not the owner"); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0),"newowner not 0 address"); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: openzeppelin-solidity/contracts/ownership/Whitelist.sol /** * @title Whitelist * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions. * @dev This simplifies the implementation of "user permissions". */ contract Whitelist is Ownable { mapping(address => bool) public whitelist; event WhitelistedAddressAdded(address addr); event WhitelistedAddressRemoved(address addr); /** * @dev Throws if called by any account that's not whitelisted. */ modifier onlyWhitelisted() { require(whitelist[msg.sender], 'no whitelist'); _; } /** * @dev add an address to the whitelist * @param addr address */ function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) { if (!whitelist[addr]) { whitelist[addr] = true; emit WhitelistedAddressAdded(addr); success = true; } } /** * @dev add addresses to the whitelist * @param addrs addresses */ function addAddressesToWhitelist(address[] memory addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (addAddressToWhitelist(addrs[i])) { success = true; } } return success; } /** * @dev remove an address from the whitelist * @param addr address */ function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) { if (whitelist[addr]) { whitelist[addr] = false; emit WhitelistedAddressRemoved(addr); success = true; } return success; } /** * @dev remove addresses from the whitelist * @param addrs addresses */ function removeAddressesFromWhitelist(address[] memory addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (removeAddressFromWhitelist(addrs[i])) { success = true; } } return success; } } /** * @title Standard BEP20 token * * @dev Implementation of the basic standard token. * https://eips.ethereum.org/EIPS/eip-20 * Originally based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for * all accounts just by listening to said events. Note that this isn't required by the specification, and other * compliant implementations may not do it. */ contract BEP20 { using SafeMath for uint256; mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) internal _allowed; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); uint256 internal _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return A uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @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 Transfer token to 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) { _transfer(msg.sender, 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) { _approve(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @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) { _transfer(from, to, value); _approve(from, msg.sender, _allowed[from][msg.sender].sub(value)); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when _allowed[msg.sender][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 * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].add(addedValue)); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when _allowed[msg.sender][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 * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowed[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(to != address(0),"to address will not be 0"); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0),"2"); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0),"3"); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Approve an address to spend another addresses' tokens. * @param owner The address that owns the tokens. * @param spender The address that will spend the tokens. * @param value The number of tokens that can be spent. */ function _approve(address owner, address spender, uint256 value) internal { require(spender != address(0),"4"); require(owner != address(0),"5"); _allowed[owner][spender] = value; emit Approval(owner, spender, value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _burn(account, value); _approve(account, msg.sender, _allowed[account][msg.sender].sub(value)); } } /** * @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) { 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 Subtracts two numbers, else returns zero */ function safeSub(uint a, uint b) internal pure returns (uint) { if (b > a) { return 0; } else { 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; } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } interface IToken { function calculateTransferTaxes(address _from, uint256 _value) external view returns (uint256 adjustedValue, uint256 taxAmount); function transferFrom(address from, address to, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function balanceOf(address who) external view returns (uint256); function burn(uint256 _value) external; } contract TheWell is BEP20, Whitelist { string public constant name = "Splash Liquidity Token"; string public constant symbol = "DROPS"; uint8 public constant decimals = 18; /***********************************| | Variables && Events | |__________________________________*/ // Variables IToken internal token; // address of the BEP20 token traded on this contract uint256 public totalTxs; uint256 internal lastBalance_; uint256 internal trackingInterval_ = 1 minutes; uint256 public providers; mapping (address => bool) internal _providers; mapping (address => uint256) internal _txs; bool public isPaused = true; // Events event onTokenPurchase(address indexed buyer, uint256 indexed bnb_amount, uint256 indexed token_amount); event onBnbPurchase(address indexed buyer, uint256 indexed token_amount, uint256 indexed bnb_amount); event onAddLiquidity(address indexed provider, uint256 indexed bnb_amount, uint256 indexed token_amount); event onRemoveLiquidity(address indexed provider, uint256 indexed bnb_amount, uint256 indexed token_amount); event onLiquidity(address indexed provider, uint256 indexed amount); event onContractBalance(uint256 balance); event onPrice(uint256 price); event onSummary(uint256 liquidity, uint256 price); /***********************************| | Constructor | |__________________________________*/ constructor (address token_addr) Ownable() public { token = IToken(token_addr); lastBalance_= now; } function unpause() public onlyOwner { isPaused = false; } function pause() public onlyOwner { isPaused = true; } modifier isNotPaused() { require(!isPaused, "Swaps currently paused"); _; } /***********************************| | Exchange Functions | |__________________________________*/ /** * @notice Convert BNB to Tokens. * @dev User specifies exact input (msg.value). */ receive() external payable { bnbToTokenInput(msg.value, 1, msg.sender, msg.sender); } /** * @dev Pricing function for converting between BNB && Tokens. * @param input_amount Amount of BNB or Tokens being sold. * @param input_reserve Amount of BNB or Tokens (input type) in exchange reserves. * @param output_reserve Amount of BNB or Tokens (output type) in exchange reserves. * @return Amount of BNB or Tokens bought. */ function getInputPrice(uint256 input_amount, uint256 input_reserve, uint256 output_reserve) public view returns (uint256) { require(input_reserve > 0 && output_reserve > 0, "INVALID_VALUE"); uint256 input_amount_with_fee = input_amount.mul(990); uint256 numerator = input_amount_with_fee.mul(output_reserve); uint256 denominator = input_reserve.mul(1000).add(input_amount_with_fee); return numerator / denominator; } /** * @dev Pricing function for converting between BNB && Tokens. * @param output_amount Amount of BNB or Tokens being bought. * @param input_reserve Amount of BNB or Tokens (input type) in exchange reserves. * @param output_reserve Amount of BNB or Tokens (output type) in exchange reserves. * @return Amount of BNB or Tokens sold. */ function getOutputPrice(uint256 output_amount, uint256 input_reserve, uint256 output_reserve) public view returns (uint256) { require(input_reserve > 0 && output_reserve > 0,"input_reserve & output reserve must >0"); uint256 numerator = input_reserve.mul(output_amount).mul(1000); uint256 denominator = (output_reserve.sub(output_amount)).mul(990); return (numerator / denominator).add(1); } function bnbToTokenInput(uint256 bnb_sold, uint256 min_tokens, address buyer, address recipient) private returns (uint256) { require(bnb_sold > 0 && min_tokens > 0, "sold and min 0"); uint256 token_reserve = token.balanceOf(address(this)); uint256 tokens_bought = getInputPrice(bnb_sold, address(this).balance.sub(bnb_sold), token_reserve); require(tokens_bought >= min_tokens, "tokens_bought >= min_tokens"); require(token.transfer(recipient, tokens_bought), "transfer err"); emit onTokenPurchase(buyer, bnb_sold, tokens_bought); emit onContractBalance(bnbBalance()); trackGlobalStats(); return tokens_bought; } /** * @notice Convert BNB to Tokens. * @dev User specifies exact input (msg.value) && minimum output. * @param min_tokens Minimum Tokens bought. * @return Amount of Tokens bought. */ function bnbToTokenSwapInput(uint256 min_tokens) public payable isNotPaused returns (uint256) { return bnbToTokenInput(msg.value, min_tokens,msg.sender, msg.sender); } function bnbToTokenOutput(uint256 tokens_bought, uint256 max_bnb, address buyer, address recipient) private returns (uint256) { require(tokens_bought > 0 && max_bnb > 0,"tokens_bought > 0 && max_bnb >"); uint256 token_reserve = token.balanceOf(address(this)); uint256 bnb_sold = getOutputPrice(tokens_bought, address(this).balance.sub(max_bnb), token_reserve); // Throws if bnb_sold > max_bnb uint256 bnb_refund = max_bnb.sub(bnb_sold); if (bnb_refund > 0) { payable(buyer).transfer(bnb_refund); } require(token.transfer(recipient, tokens_bought),"error"); emit onTokenPurchase(buyer, bnb_sold, tokens_bought); trackGlobalStats(); return bnb_sold; } /** * @notice Convert BNB to Tokens. * @dev User specifies maximum input (msg.value) && exact output. * @param tokens_bought Amount of tokens bought. * @return Amount of BNB sold. */ function bnbToTokenSwapOutput(uint256 tokens_bought) public payable isNotPaused returns (uint256) { return bnbToTokenOutput(tokens_bought, msg.value, msg.sender, msg.sender); } function tokenToBnbInput(uint256 tokens_sold, uint256 min_bnb, address buyer, address recipient) private returns (uint256) { require(tokens_sold > 0 && min_bnb > 0,"tokens_sold > 0 && min_bnb > 0"); uint256 token_reserve = token.balanceOf(address(this)); (uint256 realized_sold, uint256 taxAmount) = token.calculateTransferTaxes(buyer, tokens_sold); uint256 bnb_bought = getInputPrice(realized_sold, token_reserve, address(this).balance); require(bnb_bought >= min_bnb,"bnb_bought >= min_bnb"); payable(recipient).transfer(bnb_bought); require(token.transferFrom(buyer, address(this), tokens_sold),"transforfrom error"); emit onBnbPurchase(buyer, tokens_sold, bnb_bought); trackGlobalStats(); return bnb_bought; } /** * @notice Convert Tokens to BNB. * @dev User specifies exact input && minimum output. * @param tokens_sold Amount of Tokens sold. * @param min_bnb Minimum BNB purchased. * @return Amount of BNB bought. */ function tokenToBnbSwapInput(uint256 tokens_sold, uint256 min_bnb) public isNotPaused returns (uint256) { return tokenToBnbInput(tokens_sold, min_bnb, msg.sender, msg.sender); } function tokenToBnbOutput(uint256 bnb_bought, uint256 max_tokens, address buyer, address recipient) private returns (uint256) { require(bnb_bought > 0,"bnb_bought > 0"); uint256 token_reserve = token.balanceOf(address(this)); uint256 tokens_sold = getOutputPrice(bnb_bought, token_reserve, address(this).balance); (uint256 realized_sold, uint256 taxAmount) = token.calculateTransferTaxes(buyer, tokens_sold); tokens_sold += taxAmount; // tokens sold is always > 0 require(max_tokens >= tokens_sold, 'max tokens exceeded'); payable(recipient).transfer(bnb_bought); require(token.transferFrom(buyer, address(this), tokens_sold),"transorfroom error"); emit onBnbPurchase(buyer, tokens_sold, bnb_bought); trackGlobalStats(); return tokens_sold; } /** * @notice Convert Tokens to BNB. * @dev User specifies maximum input && exact output. * @param bnb_bought Amount of BNB purchased. * @param max_tokens Maximum Tokens sold. * @return Amount of Tokens sold. */ function tokenToBnbSwapOutput(uint256 bnb_bought, uint256 max_tokens) public isNotPaused returns (uint256) { return tokenToBnbOutput(bnb_bought, max_tokens, msg.sender, msg.sender); } function trackGlobalStats() private { uint256 price = getBnbToTokenOutputPrice(1e18); uint256 balance = bnbBalance(); if (now.safeSub(lastBalance_) > trackingInterval_) { emit onSummary(balance * 2, price); lastBalance_ = now; } emit onContractBalance(balance); emit onPrice(price); totalTxs += 1; _txs[msg.sender] += 1; } /***********************************| | Getter Functions | |__________________________________*/ /** * @notice Public price function for BNB to Token trades with an exact input. * @param bnb_sold Amount of BNB sold. * @return Amount of Tokens that can be bought with input BNB. */ function getBnbToTokenInputPrice(uint256 bnb_sold) public view returns (uint256) { require(bnb_sold > 0,"bnb_sold > 0,,,1"); uint256 token_reserve = token.balanceOf(address(this)); return getInputPrice(bnb_sold, address(this).balance, token_reserve); } /** * @notice Public price function for BNB to Token trades with an exact output. * @param tokens_bought Amount of Tokens bought. * @return Amount of BNB needed to buy output Tokens. */ function getBnbToTokenOutputPrice(uint256 tokens_bought) public view returns (uint256) { require(tokens_bought > 0,"tokens_bought > 0,,,1"); uint256 token_reserve = token.balanceOf(address(this)); uint256 bnb_sold = getOutputPrice(tokens_bought, address(this).balance, token_reserve); return bnb_sold; } /** * @notice Public price function for Token to BNB trades with an exact input. * @param tokens_sold Amount of Tokens sold. * @return Amount of BNB that can be bought with input Tokens. */ function getTokenToBnbInputPrice(uint256 tokens_sold) public view returns (uint256) { require(tokens_sold > 0, "token sold < 0,,,,,2"); uint256 token_reserve = token.balanceOf(address(this)); uint256 bnb_bought = getInputPrice(tokens_sold, token_reserve, address(this).balance); return bnb_bought; } /** * @notice Public price function for Token to BNB trades with an exact output. * @param bnb_bought Amount of output BNB. * @return Amount of Tokens needed to buy output BNB. */ function getTokenToBnbOutputPrice(uint256 bnb_bought) public view returns (uint256) { require(bnb_bought > 0,"bnb_bought > 0,,,,2"); uint256 token_reserve = token.balanceOf(address(this)); return getOutputPrice(bnb_bought, token_reserve, address(this).balance); } /** * @return Address of Token that is sold on this exchange. */ function tokenAddress() public view returns (address) { return address(token); } function bnbBalance() public view returns (uint256) { return address(this).balance; } function tokenBalance() public view returns (uint256) { return token.balanceOf(address(this)); } function getBnbToLiquidityInputPrice(uint256 bnb_sold) public view returns (uint256){ require(bnb_sold > 0,"bnb_sold > 0,,,,,3"); uint256 token_amount = 0; uint256 total_liquidity = _totalSupply; uint256 bnb_reserve = address(this).balance; uint256 token_reserve = token.balanceOf(address(this)); token_amount = (bnb_sold.mul(token_reserve) / bnb_reserve).add(1); uint256 liquidity_minted = bnb_sold.mul(total_liquidity) / bnb_reserve; return liquidity_minted; } function getLiquidityToReserveInputPrice(uint amount) public view returns (uint256, uint256){ uint256 total_liquidity = _totalSupply; require(total_liquidity > 0,"total_liquidity > 0,,,,1"); uint256 token_reserve = token.balanceOf(address(this)); uint256 bnb_amount = amount.mul(address(this).balance) / total_liquidity; uint256 token_amount = amount.mul(token_reserve) / total_liquidity; return (bnb_amount, token_amount); } function txs(address owner) public view returns (uint256) { return _txs[owner]; } /***********************************| | Liquidity Functions | |__________________________________*/ /** * @notice Deposit BNB && Tokens (token) at current ratio to mint SWAP tokens. * @dev min_liquidity does nothing when total SWAP supply is 0. * @param min_liquidity Minimum number of DROPS sender will mint if total DROP supply is greater than 0. * @param max_tokens Maximum number of tokens deposited. Deposits max amount if total DROP supply is 0. * @return The amount of SWAP minted. */ function addLiquidity(uint256 min_liquidity, uint256 max_tokens) isNotPaused public payable returns (uint256) { require(max_tokens > 0 && msg.value > 0, "Swap#addLiquidity: INVALID_ARGUMENT"); uint256 total_liquidity = _totalSupply; uint256 token_amount = 0; if (_providers[msg.sender] == false){ _providers[msg.sender] = true; providers += 1; } if (total_liquidity > 0) { require(min_liquidity > 0,"min_liquidity > 0,,,,4"); uint256 bnb_reserve = address(this).balance.sub(msg.value); uint256 token_reserve = token.balanceOf(address(this)); token_amount = (msg.value.mul(token_reserve) / bnb_reserve).add(1); uint256 liquidity_minted = msg.value.mul(total_liquidity) / bnb_reserve; require(max_tokens >= token_amount && liquidity_minted >= min_liquidity,"max_tokens >= token_amount && liquidity_minted >= min_liquidity,,,,1"); _balances[msg.sender] = _balances[msg.sender].add(liquidity_minted); _totalSupply = total_liquidity.add(liquidity_minted); require(token.transferFrom(msg.sender, address(this), token_amount),"transfrom4 error"); emit onAddLiquidity(msg.sender, msg.value, token_amount); emit onLiquidity(msg.sender, _balances[msg.sender]); emit Transfer(address(0), msg.sender, liquidity_minted); return liquidity_minted; } else { require(msg.value >= 1e18, "INVALID_VALUE"); token_amount = max_tokens; uint256 initial_liquidity = address(this).balance; _totalSupply = initial_liquidity; _balances[msg.sender] = initial_liquidity; require(token.transferFrom(msg.sender, address(this), token_amount),"transforfrom 5 error"); emit onAddLiquidity(msg.sender, msg.value, token_amount); emit onLiquidity(msg.sender, _balances[msg.sender]); emit Transfer(address(0), msg.sender, initial_liquidity); return initial_liquidity; } } /** * @dev Burn SWAP tokens to withdraw BNB && Tokens at current ratio. * @param amount Amount of SWAP burned. * @param min_bnb Minimum BNB withdrawn. * @param min_tokens Minimum Tokens withdrawn. * @return The amount of BNB && Tokens withdrawn. */ function removeLiquidity(uint256 amount, uint256 min_bnb, uint256 min_tokens) onlyWhitelisted public returns (uint256, uint256) { require(amount > 0 && min_bnb > 0 && min_tokens > 0,"amount > 0 && min_bnb > 0 && min_tokens > 0,333"); uint256 total_liquidity = _totalSupply; require(total_liquidity > 0); uint256 token_reserve = token.balanceOf(address(this)); uint256 bnb_amount = amount.mul(address(this).balance) / total_liquidity; uint256 token_amount = amount.mul(token_reserve) / total_liquidity; require(bnb_amount >= min_bnb && token_amount >= min_tokens,"(bnb_amount >= min_bnb && token_amount >= min_tokens,33"); _balances[msg.sender] = _balances[msg.sender].sub(amount); _totalSupply = total_liquidity.sub(amount); msg.sender.transfer(bnb_amount); require(token.transfer(msg.sender, token_amount),"transfer error"); emit onRemoveLiquidity(msg.sender, bnb_amount, token_amount); emit onLiquidity(msg.sender, _balances[msg.sender]); emit Transfer(msg.sender, address(0), amount); return (bnb_amount, token_amount); } } //splash token 0x4ec58f9D205F9c919920313932cc71EC68d123C7
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"token_addr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":true,"internalType":"uint256","name":"bnb_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"token_amount","type":"uint256"}],"name":"onAddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"token_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"bnb_amount","type":"uint256"}],"name":"onBnbPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"onContractBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"onPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":true,"internalType":"uint256","name":"bnb_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"token_amount","type":"uint256"}],"name":"onRemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"onSummary","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"bnb_amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"token_amount","type":"uint256"}],"name":"onTokenPurchase","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"min_liquidity","type":"uint256"},{"internalType":"uint256","name":"max_tokens","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bnbBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"min_tokens","type":"uint256"}],"name":"bnbToTokenSwapInput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens_bought","type":"uint256"}],"name":"bnbToTokenSwapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bnb_sold","type":"uint256"}],"name":"getBnbToLiquidityInputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bnb_sold","type":"uint256"}],"name":"getBnbToTokenInputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens_bought","type":"uint256"}],"name":"getBnbToTokenOutputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"input_amount","type":"uint256"},{"internalType":"uint256","name":"input_reserve","type":"uint256"},{"internalType":"uint256","name":"output_reserve","type":"uint256"}],"name":"getInputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getLiquidityToReserveInputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"output_amount","type":"uint256"},{"internalType":"uint256","name":"input_reserve","type":"uint256"},{"internalType":"uint256","name":"output_reserve","type":"uint256"}],"name":"getOutputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens_sold","type":"uint256"}],"name":"getTokenToBnbInputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bnb_bought","type":"uint256"}],"name":"getTokenToBnbOutputPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"providers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"min_bnb","type":"uint256"},{"internalType":"uint256","name":"min_tokens","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens_sold","type":"uint256"},{"internalType":"uint256","name":"min_bnb","type":"uint256"}],"name":"tokenToBnbSwapInput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bnb_bought","type":"uint256"},{"internalType":"uint256","name":"max_tokens","type":"uint256"}],"name":"tokenToBnbSwapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"txs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052603c6008556001600c60006101000a81548160ff02191690831515021790555034801561003057600080fd5b50604051620055cd380380620055cd8339818101604052602081101561005557600080fd5b810190808051906020019092919050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600781905550506154cd80620001006000396000f3fe60806040526004361061024a5760003560e01c80637b9417c811610139578063a457c2d7116100b6578063dd62ed3e1161007a578063dd62ed3e14610e41578063e2ec6ec314610ec6578063f2fde38b14610fa1578063f8401fe614610ff2578063fb48d48a1461101d578063fd11c223146110765761025f565b8063a457c2d714610cc5578063a9059cbb14610d36578063b187bd2614610da7578063b569502614610dd4578063d013cbe214610e165761025f565b806395d89b41116100fd57806395d89b4114610b165780639b19251a14610ba65780639cd441da14610c0d5780639d76ea5814610c595780639e1a4d1914610c9a5761025f565b80637b9417c81461098a5780638456cb59146109f1578063857620e114610a0857806389f2a87114610a725780638da5cb5b14610ad55761025f565b80632f38c6e6116101c75780633f4ba83a1161018b5780633f4ba83a1461082f5780634eaa1b8714610846578063537a39bb146108ab5780635746402b146108d657806370a08231146109255761025f565b80632f38c6e61461069c578063313ce567146106eb57806338e700591461071957806339509351146107685780633da2ec9b146107d95761025f565b80631a42b7671161020e5780631a42b767146104385780631db7976f1461048757806323b872dd146104c957806324953eaa1461055a578063286dd3f5146106355761025f565b806306fdde0314610264578063095ea7b3146102f45780630e2508421461036557806318160ddd146103b45780631a12be0d146103df5761025f565b3661025f5761025c34600133336110d9565b50005b600080fd5b34801561027057600080fd5b50610279611493565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b957808201518184015260208101905061029e565b50505050905090810190601f1680156102e65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030057600080fd5b5061034d6004803603604081101561031757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114cc565b60405180821515815260200191505060405180910390f35b34801561037157600080fd5b5061039e6004803603602081101561038857600080fd5b81019080803590602001909291905050506114e3565b6040518082815260200191505060405180910390f35b3480156103c057600080fd5b506103c9611635565b6040518082815260200191505060405180910390f35b3480156103eb57600080fd5b506104226004803603604081101561040257600080fd5b81019080803590602001909291908035906020019092919050505061163f565b6040518082815260200191505060405180910390f35b34801561044457600080fd5b506104716004803603602081101561045b57600080fd5b81019080803590602001909291905050506116d8565b6040518082815260200191505060405180910390f35b6104b36004803603602081101561049d57600080fd5b8101908080359060200190929190505050611882565b6040518082815260200191505060405180910390f35b3480156104d557600080fd5b50610542600480360360608110156104ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061191a565b60405180821515815260200191505060405180910390f35b34801561056657600080fd5b5061061d6004803603602081101561057d57600080fd5b810190808035906020019064010000000081111561059a57600080fd5b8201836020820111156105ac57600080fd5b803590602001918460208302840111640100000000831117156105ce57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506119cb565b60405180821515815260200191505060405180910390f35b34801561064157600080fd5b506106846004803603602081101561065857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b60405180821515815260200191505060405180910390f35b3480156106a857600080fd5b506106d5600480360360208110156106bf57600080fd5b8101908080359060200190929190505050611c9b565b6040518082815260200191505060405180910390f35b3480156106f757600080fd5b50610700611ded565b604051808260ff16815260200191505060405180910390f35b34801561072557600080fd5b506107526004803603602081101561073c57600080fd5b8101908080359060200190929190505050611df2565b6040518082815260200191505060405180910390f35b34801561077457600080fd5b506107c16004803603604081101561078b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f4a565b60405180821515815260200191505060405180910390f35b3480156107e557600080fd5b50610812600480360360208110156107fc57600080fd5b8101908080359060200190929190505050611fef565b604051808381526020018281526020019250505060405180910390f35b34801561083b57600080fd5b50610844612186565b005b34801561085257600080fd5b506108956004803603602081101561086957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612266565b6040518082815260200191505060405180910390f35b3480156108b757600080fd5b506108c06122af565b6040518082815260200191505060405180910390f35b3480156108e257600080fd5b5061090f600480360360208110156108f957600080fd5b81019080803590602001909291905050506122b5565b6040518082815260200191505060405180910390f35b34801561093157600080fd5b506109746004803603602081101561094857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061240d565b6040518082815260200191505060405180910390f35b34801561099657600080fd5b506109d9600480360360208110156109ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612455565b60405180821515815260200191505060405180910390f35b3480156109fd57600080fd5b50610a0661261a565b005b348015610a1457600080fd5b50610a5560048036036060811015610a2b57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506126fa565b604051808381526020018281526020019250505060405180910390f35b348015610a7e57600080fd5b50610abf60048036036060811015610a9557600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612d20565b6040518082815260200191505060405180910390f35b348015610ae157600080fd5b50610aea612e14565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2257600080fd5b50610b2b612e3a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b6b578082015181840152602081019050610b50565b50505050905090810190601f168015610b985780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bb257600080fd5b50610bf560048036036020811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e73565b60405180821515815260200191505060405180910390f35b610c4360048036036040811015610c2357600080fd5b810190808035906020019092919080359060200190929190505050612e93565b6040518082815260200191505060405180910390f35b348015610c6557600080fd5b50610c6e613908565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ca657600080fd5b50610caf613932565b6040518082815260200191505060405180910390f35b348015610cd157600080fd5b50610d1e60048036036040811015610ce857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506139fd565b60405180821515815260200191505060405180910390f35b348015610d4257600080fd5b50610d8f60048036036040811015610d5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613aa2565b60405180821515815260200191505060405180910390f35b348015610db357600080fd5b50610dbc613ab9565b60405180821515815260200191505060405180910390f35b610e0060048036036020811015610dea57600080fd5b8101908080359060200190929190505050613acc565b6040518082815260200191505060405180910390f35b348015610e2257600080fd5b50610e2b613b64565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610eb060048036036040811015610e6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b6c565b6040518082815260200191505060405180910390f35b348015610ed257600080fd5b50610f8960048036036020811015610ee957600080fd5b8101908080359060200190640100000000811115610f0657600080fd5b820183602082011115610f1857600080fd5b80359060200191846020830284011164010000000083111715610f3a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050613bf3565b60405180821515815260200191505060405180910390f35b348015610fad57600080fd5b50610ff060048036036020811015610fc457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613cfd565b005b348015610ffe57600080fd5b50611007613f23565b6040518082815260200191505060405180910390f35b34801561102957600080fd5b506110606004803603604081101561104057600080fd5b810190808035906020019092919080359060200190929190505050613f29565b6040518082815260200191505060405180910390f35b34801561108257600080fd5b506110c36004803603606081101561109957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050613fc2565b6040518082815260200191505060405180910390f35b600080851180156110ea5750600084115b61115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f736f6c6420616e64206d696e203000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111e757600080fd5b505afa1580156111fb573d6000803e3d6000fd5b505050506040513d602081101561121157600080fd5b8101908080519060200190929190505050905060006112438761123d89476140a690919063ffffffff16565b84612d20565b9050858110156112bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6b656e735f626f75676874203e3d206d696e5f746f6b656e73000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561134e57600080fd5b505af1158015611362573d6000803e3d6000fd5b505050506040513d602081101561137857600080fd5b81019080805190602001909291905050506113fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f7472616e7366657220657272000000000000000000000000000000000000000081525060200191505060405180910390fd5b80878673ffffffffffffffffffffffffffffffffffffffff167f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae560405160405180910390a47f75f52e89b275bdaed7ceb1586a0c5ac0503a27a09ea92f74dd81db37fa840282611469613b64565b6040518082815260200191505060405180910390a16114866140bd565b8092505050949350505050565b6040518060400160405280601681526020017f53706c617368204c697175696469747920546f6b656e0000000000000000000081525081565b60006114d9338484614217565b6001905092915050565b600080821161155a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f626e625f736f6c64203e20302c2c2c310000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115e557600080fd5b505afa1580156115f9573d6000803e3d6000fd5b505050506040513d602081101561160f57600080fd5b8101908080519060200190929190505050905061162d834783612d20565b915050919050565b6000600254905090565b6000600c60009054906101000a900460ff16156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b6116d083833333614448565b905092915050565b600080821161174f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f626e625f736f6c64203e20302c2c2c2c2c33000000000000000000000000000081525060200191505060405180910390fd5b600080600254905060004790506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117e757600080fd5b505afa1580156117fb573d6000803e3d6000fd5b505050506040513d602081101561181157600080fd5b8101908080519060200190929190505050905061185360018361183d848a6148ee90919063ffffffff16565b8161184457fe5b0461491f90919063ffffffff16565b935060008261186b85896148ee90919063ffffffff16565b8161187257fe5b0490508095505050505050919050565b6000600c60009054906101000a900460ff1615611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b61191382343333614936565b9050919050565b6000611927848484614ca5565b6119c084336119bb85600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b614217565b600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60005b8251811015611acf57611ab8838281518110611aab57fe5b6020026020010151611ad5565b15611ac257600191505b8080600101915050611a93565b50919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c96576000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6000808211611d12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f626e625f626f75676874203e20302c2c2c2c320000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d9d57600080fd5b505afa158015611db1573d6000803e3d6000fd5b505050506040513d6020811015611dc757600080fd5b81019080805190602001909291905050509050611de5838247613fc2565b915050919050565b601281565b6000808211611e69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f746f6b656e735f626f75676874203e20302c2c2c31000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d6020811015611f1e57600080fd5b810190808051906020019092919050505090506000611f3e844784613fc2565b90508092505050919050565b6000611fe53384611fe085600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461491f90919063ffffffff16565b614217565b6001905092915050565b600080600060025490506000811161206f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f746f74616c5f6c6971756964697479203e20302c2c2c2c31000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120fa57600080fd5b505afa15801561210e573d6000803e3d6000fd5b505050506040513d602081101561212457600080fd5b8101908080519060200190929190505050905060008261214d47886148ee90919063ffffffff16565b8161215457fe5b04905060008361216d84896148ee90919063ffffffff16565b8161217457fe5b04905081819550955050505050915091565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b600080821161232c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f746f6b656e20736f6c64203c20302c2c2c2c2c3200000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123b757600080fd5b505afa1580156123cb573d6000803e3d6000fd5b505050506040513d60208110156123e157600080fd5b810190808051906020019092919050505090506000612401848347612d20565b90508092505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612615576001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f2077686974656c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000851180156127cc5750600084115b80156127d85750600083115b61282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806153ee602f913960400191505060405180910390fd5b600060025490506000811161284157600080fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d60208110156128f657600080fd5b8101908080519060200190929190505050905060008261291f478a6148ee90919063ffffffff16565b8161292657fe5b04905060008361293f848b6148ee90919063ffffffff16565b8161294657fe5b0490508782101580156129595750868110155b6129ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806154616037913960400191505060405180910390fd5b6129ff896000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a5489856140a690919063ffffffff16565b6002819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612aa0573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3457600080fd5b505af1158015612b48573d6000803e3d6000fd5b505050506040513d6020811015612b5e57600080fd5b8101908080519060200190929190505050612be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f7472616e73666572206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b80823373ffffffffffffffffffffffffffffffffffffffff167f9985886fa2f848be5f83e79df7592adebce0c554283252f12b1c6ca0c1e3509360405160405180910390a46000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff167f709a5b29491696d085fa151016fb243ea3cf977d385d7220302ec663ceb15d2860405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b6040518082815260200191505060405180910390a381819550955050505050935093915050565b60008083118015612d315750600082115b612da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f494e56414c49445f56414c55450000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612dba6103de866148ee90919063ffffffff16565b90506000612dd184836148ee90919063ffffffff16565b90506000612dfc83612dee6103e8896148ee90919063ffffffff16565b61491f90919063ffffffff16565b9050808281612e0757fe5b0493505050509392505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600581526020017f44524f505300000000000000000000000000000000000000000000000000000081525081565b60046020528060005260406000206000915054906101000a900460ff1681565b6000600c60009054906101000a900460ff1615612f18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b600082118015612f285750600034115b612f7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153cb6023913960400191505060405180910390fd5b600060025490506000801515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415613048576001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600082825401925050819055505b60008211156135a057600085116130c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d696e5f6c6971756964697479203e20302c2c2c2c340000000000000000000081525060200191505060405180910390fd5b60006130dc34476140a690919063ffffffff16565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561316957600080fd5b505afa15801561317d573d6000803e3d6000fd5b505050506040513d602081101561319357600080fd5b810190808051906020019092919050505090506131d56001836131bf84346148ee90919063ffffffff16565b816131c657fe5b0461491f90919063ffffffff16565b92506000826131ed86346148ee90919063ffffffff16565b816131f457fe5b0490508387101580156132075750878110155b61325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604481526020018061541d6044913960600191505060405180910390fd5b6132ad816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461491f90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613302818661491f90919063ffffffff16565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156133b957600080fd5b505af11580156133cd573d6000803e3d6000fd5b505050506040513d60208110156133e357600080fd5b8101908080519060200190929190505050613466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f7472616e7366726f6d34206572726f720000000000000000000000000000000081525060200191505060405180910390fd5b83343373ffffffffffffffffffffffffffffffffffffffff167f6059fee843ff0198392eef05d3fd97a79c42b66d197dbfc62ebdf25cf169844460405160405180910390a46000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff167f709a5b29491696d085fa151016fb243ea3cf977d385d7220302ec663ceb15d2860405160405180910390a33373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38095505050505050613902565b670de0b6b3a764000034101561361e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f494e56414c49445f56414c55450000000000000000000000000000000000000081525060200191505060405180910390fd5b839050600047905080600281905550806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561372157600080fd5b505af1158015613735573d6000803e3d6000fd5b505050506040513d602081101561374b57600080fd5b81019080805190602001909291905050506137ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f7472616e73666f7266726f6d2035206572726f7200000000000000000000000081525060200191505060405180910390fd5b81343373ffffffffffffffffffffffffffffffffffffffff167f6059fee843ff0198392eef05d3fd97a79c42b66d197dbfc62ebdf25cf169844460405160405180910390a46000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff167f709a5b29491696d085fa151016fb243ea3cf977d385d7220302ec663ceb15d2860405160405180910390a33373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38093505050505b92915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156139bd57600080fd5b505afa1580156139d1573d6000803e3d6000fd5b505050506040513d60208110156139e757600080fd5b8101908080519060200190929190505050905090565b6000613a983384613a9385600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b614217565b6001905092915050565b6000613aaf338484614ca5565b6001905092915050565b600c60009054906101000a900460ff1681565b6000600c60009054906101000a900460ff1615613b51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b613b5d348333336110d9565b9050919050565b600047905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60005b8251811015613cf757613ce0838281518110613cd357fe5b6020026020010151612455565b15613cea57600191505b8080600101915050613cbb565b50919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e65776f776e6572206e6f74203020616464726573730000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6000600c60009054906101000a900460ff1615613fae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b613fba83833333614ed8565b905092915050565b60008083118015613fd35750600082115b614028576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153a56026913960400191505060405180910390fd5b60006140516103e861404387876148ee90919063ffffffff16565b6148ee90919063ffffffff16565b9050600061407c6103de61406e88876140a690919063ffffffff16565b6148ee90919063ffffffff16565b905061409b600182848161408c57fe5b0461491f90919063ffffffff16565b925050509392505050565b6000828211156140b257fe5b818303905092915050565b60006140d0670de0b6b3a7640000611df2565b905060006140dc613b64565b90506008546140f66007544261538590919063ffffffff16565b1115614146577faffebbdd31c6253ae2ea132d4a132d79b3ad07ed2720b51749aa97330a7bdb136002820283604051808381526020018281526020019250505060405180910390a1426007819055505b7f75f52e89b275bdaed7ceb1586a0c5ac0503a27a09ea92f74dd81db37fa840282816040518082815260200191505060405180910390a17f26632edb369f47eb451a281fad73ca0a52cfa3109e457a64524535839486ac6d826040518082815260200191505060405180910390a160016006600082825401925050819055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156142ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f340000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561435d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f350000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008085116144bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f626e625f626f75676874203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561454a57600080fd5b505afa15801561455e573d6000803e3d6000fd5b505050506040513d602081101561457457600080fd5b810190808051906020019092919050505090506000614594878347613fc2565b9050600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a5b22788856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b15801561462957600080fd5b505afa15801561463d573d6000803e3d6000fd5b505050506040513d604081101561465357600080fd5b810190808051906020019092919080519060200190929190505050915091508083019250828810156146ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6d617820746f6b656e732065786365656465640000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc8a9081150290604051600060405180830381858888f19350505050158015614733573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8830866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156147e557600080fd5b505af11580156147f9573d6000803e3d6000fd5b505050506040513d602081101561480f57600080fd5b8101908080519060200190929190505050614892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f7472616e736f7266726f6f6d206572726f72000000000000000000000000000081525060200191505060405180910390fd5b88838873ffffffffffffffffffffffffffffffffffffffff167f3cc32b807e0e6ade29defe751a1339a43c1e45d7d18eca93a916ca060ebe89ea60405160405180910390a46148df6140bd565b82945050505050949350505050565b6000808314156149015760009050614919565b81830290508183828161491057fe5b041461491857fe5b5b92915050565b600081830190508281101561493057fe5b92915050565b600080851180156149475750600084115b6149b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746f6b656e735f626f75676874203e2030202626206d61785f626e62203e000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614a4457600080fd5b505afa158015614a58573d6000803e3d6000fd5b505050506040513d6020811015614a6e57600080fd5b810190808051906020019092919050505090506000614aa087614a9a88476140a690919063ffffffff16565b84613fc2565b90506000614ab782886140a690919063ffffffff16565b90506000811115614b0a578573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614b08573d6000803e3d6000fd5b505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb868a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614b9d57600080fd5b505af1158015614bb1573d6000803e3d6000fd5b505050506040513d6020811015614bc757600080fd5b8101908080519060200190929190505050614c4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f6572726f7200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b87828773ffffffffffffffffffffffffffffffffffffffff167f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae560405160405180910390a4614c976140bd565b819350505050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614d48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f746f20616464726573732077696c6c206e6f742062652030000000000000000081525060200191505060405180910390fd5b614d99816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e2c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461491f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008085118015614ee95750600084115b614f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746f6b656e735f736f6c64203e2030202626206d696e5f626e62203e2030000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614fe657600080fd5b505afa158015614ffa573d6000803e3d6000fd5b505050506040513d602081101561501057600080fd5b81019080805190602001909291905050509050600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a5b227878a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b1580156150b657600080fd5b505afa1580156150ca573d6000803e3d6000fd5b505050506040513d60408110156150e057600080fd5b81019080805190602001909291908051906020019092919050505091509150600061510c838547612d20565b905087811015615184576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f626e625f626f75676874203e3d206d696e5f626e62000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156151ca573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd88308c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561527c57600080fd5b505af1158015615290573d6000803e3d6000fd5b505050506040513d60208110156152a657600080fd5b8101908080519060200190929190505050615329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f7472616e73666f7266726f6d206572726f72000000000000000000000000000081525060200191505060405180910390fd5b80898873ffffffffffffffffffffffffffffffffffffffff167f3cc32b807e0e6ade29defe751a1339a43c1e45d7d18eca93a916ca060ebe89ea60405160405180910390a46153766140bd565b80945050505050949350505050565b600082821115615398576000905061539e565b81830390505b9291505056fe696e7075745f726573657276652026206f75747075742072657365727665206d757374203e3053776170236164644c69717569646974793a20494e56414c49445f415247554d454e54616d6f756e74203e2030202626206d696e5f626e62203e2030202626206d696e5f746f6b656e73203e20302c3333336d61785f746f6b656e73203e3d20746f6b656e5f616d6f756e74202626206c69717569646974795f6d696e746564203e3d206d696e5f6c69717569646974792c2c2c2c3128626e625f616d6f756e74203e3d206d696e5f626e6220262620746f6b656e5f616d6f756e74203e3d206d696e5f746f6b656e732c3333a2646970667358221220bcc20c51ed608ee6e53f0e63b5c270e4a115ac015d72121a18abf877854ff10364736f6c634300060c00330000000000000000000000004ec58f9d205f9c919920313932cc71ec68d123c7
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80637b9417c811610139578063a457c2d7116100b6578063dd62ed3e1161007a578063dd62ed3e14610e41578063e2ec6ec314610ec6578063f2fde38b14610fa1578063f8401fe614610ff2578063fb48d48a1461101d578063fd11c223146110765761025f565b8063a457c2d714610cc5578063a9059cbb14610d36578063b187bd2614610da7578063b569502614610dd4578063d013cbe214610e165761025f565b806395d89b41116100fd57806395d89b4114610b165780639b19251a14610ba65780639cd441da14610c0d5780639d76ea5814610c595780639e1a4d1914610c9a5761025f565b80637b9417c81461098a5780638456cb59146109f1578063857620e114610a0857806389f2a87114610a725780638da5cb5b14610ad55761025f565b80632f38c6e6116101c75780633f4ba83a1161018b5780633f4ba83a1461082f5780634eaa1b8714610846578063537a39bb146108ab5780635746402b146108d657806370a08231146109255761025f565b80632f38c6e61461069c578063313ce567146106eb57806338e700591461071957806339509351146107685780633da2ec9b146107d95761025f565b80631a42b7671161020e5780631a42b767146104385780631db7976f1461048757806323b872dd146104c957806324953eaa1461055a578063286dd3f5146106355761025f565b806306fdde0314610264578063095ea7b3146102f45780630e2508421461036557806318160ddd146103b45780631a12be0d146103df5761025f565b3661025f5761025c34600133336110d9565b50005b600080fd5b34801561027057600080fd5b50610279611493565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b957808201518184015260208101905061029e565b50505050905090810190601f1680156102e65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030057600080fd5b5061034d6004803603604081101561031757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114cc565b60405180821515815260200191505060405180910390f35b34801561037157600080fd5b5061039e6004803603602081101561038857600080fd5b81019080803590602001909291905050506114e3565b6040518082815260200191505060405180910390f35b3480156103c057600080fd5b506103c9611635565b6040518082815260200191505060405180910390f35b3480156103eb57600080fd5b506104226004803603604081101561040257600080fd5b81019080803590602001909291908035906020019092919050505061163f565b6040518082815260200191505060405180910390f35b34801561044457600080fd5b506104716004803603602081101561045b57600080fd5b81019080803590602001909291905050506116d8565b6040518082815260200191505060405180910390f35b6104b36004803603602081101561049d57600080fd5b8101908080359060200190929190505050611882565b6040518082815260200191505060405180910390f35b3480156104d557600080fd5b50610542600480360360608110156104ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061191a565b60405180821515815260200191505060405180910390f35b34801561056657600080fd5b5061061d6004803603602081101561057d57600080fd5b810190808035906020019064010000000081111561059a57600080fd5b8201836020820111156105ac57600080fd5b803590602001918460208302840111640100000000831117156105ce57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506119cb565b60405180821515815260200191505060405180910390f35b34801561064157600080fd5b506106846004803603602081101561065857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b60405180821515815260200191505060405180910390f35b3480156106a857600080fd5b506106d5600480360360208110156106bf57600080fd5b8101908080359060200190929190505050611c9b565b6040518082815260200191505060405180910390f35b3480156106f757600080fd5b50610700611ded565b604051808260ff16815260200191505060405180910390f35b34801561072557600080fd5b506107526004803603602081101561073c57600080fd5b8101908080359060200190929190505050611df2565b6040518082815260200191505060405180910390f35b34801561077457600080fd5b506107c16004803603604081101561078b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f4a565b60405180821515815260200191505060405180910390f35b3480156107e557600080fd5b50610812600480360360208110156107fc57600080fd5b8101908080359060200190929190505050611fef565b604051808381526020018281526020019250505060405180910390f35b34801561083b57600080fd5b50610844612186565b005b34801561085257600080fd5b506108956004803603602081101561086957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612266565b6040518082815260200191505060405180910390f35b3480156108b757600080fd5b506108c06122af565b6040518082815260200191505060405180910390f35b3480156108e257600080fd5b5061090f600480360360208110156108f957600080fd5b81019080803590602001909291905050506122b5565b6040518082815260200191505060405180910390f35b34801561093157600080fd5b506109746004803603602081101561094857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061240d565b6040518082815260200191505060405180910390f35b34801561099657600080fd5b506109d9600480360360208110156109ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612455565b60405180821515815260200191505060405180910390f35b3480156109fd57600080fd5b50610a0661261a565b005b348015610a1457600080fd5b50610a5560048036036060811015610a2b57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506126fa565b604051808381526020018281526020019250505060405180910390f35b348015610a7e57600080fd5b50610abf60048036036060811015610a9557600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612d20565b6040518082815260200191505060405180910390f35b348015610ae157600080fd5b50610aea612e14565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2257600080fd5b50610b2b612e3a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b6b578082015181840152602081019050610b50565b50505050905090810190601f168015610b985780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bb257600080fd5b50610bf560048036036020811015610bc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e73565b60405180821515815260200191505060405180910390f35b610c4360048036036040811015610c2357600080fd5b810190808035906020019092919080359060200190929190505050612e93565b6040518082815260200191505060405180910390f35b348015610c6557600080fd5b50610c6e613908565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ca657600080fd5b50610caf613932565b6040518082815260200191505060405180910390f35b348015610cd157600080fd5b50610d1e60048036036040811015610ce857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506139fd565b60405180821515815260200191505060405180910390f35b348015610d4257600080fd5b50610d8f60048036036040811015610d5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613aa2565b60405180821515815260200191505060405180910390f35b348015610db357600080fd5b50610dbc613ab9565b60405180821515815260200191505060405180910390f35b610e0060048036036020811015610dea57600080fd5b8101908080359060200190929190505050613acc565b6040518082815260200191505060405180910390f35b348015610e2257600080fd5b50610e2b613b64565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610eb060048036036040811015610e6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b6c565b6040518082815260200191505060405180910390f35b348015610ed257600080fd5b50610f8960048036036020811015610ee957600080fd5b8101908080359060200190640100000000811115610f0657600080fd5b820183602082011115610f1857600080fd5b80359060200191846020830284011164010000000083111715610f3a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050613bf3565b60405180821515815260200191505060405180910390f35b348015610fad57600080fd5b50610ff060048036036020811015610fc457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613cfd565b005b348015610ffe57600080fd5b50611007613f23565b6040518082815260200191505060405180910390f35b34801561102957600080fd5b506110606004803603604081101561104057600080fd5b810190808035906020019092919080359060200190929190505050613f29565b6040518082815260200191505060405180910390f35b34801561108257600080fd5b506110c36004803603606081101561109957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050613fc2565b6040518082815260200191505060405180910390f35b600080851180156110ea5750600084115b61115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f736f6c6420616e64206d696e203000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111e757600080fd5b505afa1580156111fb573d6000803e3d6000fd5b505050506040513d602081101561121157600080fd5b8101908080519060200190929190505050905060006112438761123d89476140a690919063ffffffff16565b84612d20565b9050858110156112bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6b656e735f626f75676874203e3d206d696e5f746f6b656e73000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561134e57600080fd5b505af1158015611362573d6000803e3d6000fd5b505050506040513d602081101561137857600080fd5b81019080805190602001909291905050506113fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f7472616e7366657220657272000000000000000000000000000000000000000081525060200191505060405180910390fd5b80878673ffffffffffffffffffffffffffffffffffffffff167f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae560405160405180910390a47f75f52e89b275bdaed7ceb1586a0c5ac0503a27a09ea92f74dd81db37fa840282611469613b64565b6040518082815260200191505060405180910390a16114866140bd565b8092505050949350505050565b6040518060400160405280601681526020017f53706c617368204c697175696469747920546f6b656e0000000000000000000081525081565b60006114d9338484614217565b6001905092915050565b600080821161155a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f626e625f736f6c64203e20302c2c2c310000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115e557600080fd5b505afa1580156115f9573d6000803e3d6000fd5b505050506040513d602081101561160f57600080fd5b8101908080519060200190929190505050905061162d834783612d20565b915050919050565b6000600254905090565b6000600c60009054906101000a900460ff16156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b6116d083833333614448565b905092915050565b600080821161174f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f626e625f736f6c64203e20302c2c2c2c2c33000000000000000000000000000081525060200191505060405180910390fd5b600080600254905060004790506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117e757600080fd5b505afa1580156117fb573d6000803e3d6000fd5b505050506040513d602081101561181157600080fd5b8101908080519060200190929190505050905061185360018361183d848a6148ee90919063ffffffff16565b8161184457fe5b0461491f90919063ffffffff16565b935060008261186b85896148ee90919063ffffffff16565b8161187257fe5b0490508095505050505050919050565b6000600c60009054906101000a900460ff1615611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b61191382343333614936565b9050919050565b6000611927848484614ca5565b6119c084336119bb85600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b614217565b600190509392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60005b8251811015611acf57611ab8838281518110611aab57fe5b6020026020010151611ad5565b15611ac257600191505b8080600101915050611a93565b50919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c96576000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6000808211611d12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f626e625f626f75676874203e20302c2c2c2c320000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d9d57600080fd5b505afa158015611db1573d6000803e3d6000fd5b505050506040513d6020811015611dc757600080fd5b81019080805190602001909291905050509050611de5838247613fc2565b915050919050565b601281565b6000808211611e69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f746f6b656e735f626f75676874203e20302c2c2c31000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d6020811015611f1e57600080fd5b810190808051906020019092919050505090506000611f3e844784613fc2565b90508092505050919050565b6000611fe53384611fe085600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461491f90919063ffffffff16565b614217565b6001905092915050565b600080600060025490506000811161206f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f746f74616c5f6c6971756964697479203e20302c2c2c2c31000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156120fa57600080fd5b505afa15801561210e573d6000803e3d6000fd5b505050506040513d602081101561212457600080fd5b8101908080519060200190929190505050905060008261214d47886148ee90919063ffffffff16565b8161215457fe5b04905060008361216d84896148ee90919063ffffffff16565b8161217457fe5b04905081819550955050505050915091565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b600080821161232c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f746f6b656e20736f6c64203c20302c2c2c2c2c3200000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123b757600080fd5b505afa1580156123cb573d6000803e3d6000fd5b505050506040513d60208110156123e157600080fd5b810190808051906020019092919050505090506000612401848347612d20565b90508092505050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612615576001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f2077686974656c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000851180156127cc5750600084115b80156127d85750600083115b61282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806153ee602f913960400191505060405180910390fd5b600060025490506000811161284157600080fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d60208110156128f657600080fd5b8101908080519060200190929190505050905060008261291f478a6148ee90919063ffffffff16565b8161292657fe5b04905060008361293f848b6148ee90919063ffffffff16565b8161294657fe5b0490508782101580156129595750868110155b6129ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806154616037913960400191505060405180910390fd5b6129ff896000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a5489856140a690919063ffffffff16565b6002819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612aa0573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3457600080fd5b505af1158015612b48573d6000803e3d6000fd5b505050506040513d6020811015612b5e57600080fd5b8101908080519060200190929190505050612be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f7472616e73666572206572726f7200000000000000000000000000000000000081525060200191505060405180910390fd5b80823373ffffffffffffffffffffffffffffffffffffffff167f9985886fa2f848be5f83e79df7592adebce0c554283252f12b1c6ca0c1e3509360405160405180910390a46000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff167f709a5b29491696d085fa151016fb243ea3cf977d385d7220302ec663ceb15d2860405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b6040518082815260200191505060405180910390a381819550955050505050935093915050565b60008083118015612d315750600082115b612da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f494e56414c49445f56414c55450000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612dba6103de866148ee90919063ffffffff16565b90506000612dd184836148ee90919063ffffffff16565b90506000612dfc83612dee6103e8896148ee90919063ffffffff16565b61491f90919063ffffffff16565b9050808281612e0757fe5b0493505050509392505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600581526020017f44524f505300000000000000000000000000000000000000000000000000000081525081565b60046020528060005260406000206000915054906101000a900460ff1681565b6000600c60009054906101000a900460ff1615612f18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b600082118015612f285750600034115b612f7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153cb6023913960400191505060405180910390fd5b600060025490506000801515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415613048576001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600082825401925050819055505b60008211156135a057600085116130c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d696e5f6c6971756964697479203e20302c2c2c2c340000000000000000000081525060200191505060405180910390fd5b60006130dc34476140a690919063ffffffff16565b90506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561316957600080fd5b505afa15801561317d573d6000803e3d6000fd5b505050506040513d602081101561319357600080fd5b810190808051906020019092919050505090506131d56001836131bf84346148ee90919063ffffffff16565b816131c657fe5b0461491f90919063ffffffff16565b92506000826131ed86346148ee90919063ffffffff16565b816131f457fe5b0490508387101580156132075750878110155b61325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604481526020018061541d6044913960600191505060405180910390fd5b6132ad816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461491f90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613302818661491f90919063ffffffff16565b600281905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156133b957600080fd5b505af11580156133cd573d6000803e3d6000fd5b505050506040513d60208110156133e357600080fd5b8101908080519060200190929190505050613466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f7472616e7366726f6d34206572726f720000000000000000000000000000000081525060200191505060405180910390fd5b83343373ffffffffffffffffffffffffffffffffffffffff167f6059fee843ff0198392eef05d3fd97a79c42b66d197dbfc62ebdf25cf169844460405160405180910390a46000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff167f709a5b29491696d085fa151016fb243ea3cf977d385d7220302ec663ceb15d2860405160405180910390a33373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38095505050505050613902565b670de0b6b3a764000034101561361e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f494e56414c49445f56414c55450000000000000000000000000000000000000081525060200191505060405180910390fd5b839050600047905080600281905550806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561372157600080fd5b505af1158015613735573d6000803e3d6000fd5b505050506040513d602081101561374b57600080fd5b81019080805190602001909291905050506137ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f7472616e73666f7266726f6d2035206572726f7200000000000000000000000081525060200191505060405180910390fd5b81343373ffffffffffffffffffffffffffffffffffffffff167f6059fee843ff0198392eef05d3fd97a79c42b66d197dbfc62ebdf25cf169844460405160405180910390a46000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff167f709a5b29491696d085fa151016fb243ea3cf977d385d7220302ec663ceb15d2860405160405180910390a33373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a38093505050505b92915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156139bd57600080fd5b505afa1580156139d1573d6000803e3d6000fd5b505050506040513d60208110156139e757600080fd5b8101908080519060200190929190505050905090565b6000613a983384613a9385600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b614217565b6001905092915050565b6000613aaf338484614ca5565b6001905092915050565b600c60009054906101000a900460ff1681565b6000600c60009054906101000a900460ff1615613b51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b613b5d348333336110d9565b9050919050565b600047905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60005b8251811015613cf757613ce0838281518110613cd357fe5b6020026020010151612455565b15613cea57600191505b8080600101915050613cbb565b50919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e65776f776e6572206e6f74203020616464726573730000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6000600c60009054906101000a900460ff1615613fae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53776170732063757272656e746c79207061757365640000000000000000000081525060200191505060405180910390fd5b613fba83833333614ed8565b905092915050565b60008083118015613fd35750600082115b614028576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153a56026913960400191505060405180910390fd5b60006140516103e861404387876148ee90919063ffffffff16565b6148ee90919063ffffffff16565b9050600061407c6103de61406e88876140a690919063ffffffff16565b6148ee90919063ffffffff16565b905061409b600182848161408c57fe5b0461491f90919063ffffffff16565b925050509392505050565b6000828211156140b257fe5b818303905092915050565b60006140d0670de0b6b3a7640000611df2565b905060006140dc613b64565b90506008546140f66007544261538590919063ffffffff16565b1115614146577faffebbdd31c6253ae2ea132d4a132d79b3ad07ed2720b51749aa97330a7bdb136002820283604051808381526020018281526020019250505060405180910390a1426007819055505b7f75f52e89b275bdaed7ceb1586a0c5ac0503a27a09ea92f74dd81db37fa840282816040518082815260200191505060405180910390a17f26632edb369f47eb451a281fad73ca0a52cfa3109e457a64524535839486ac6d826040518082815260200191505060405180910390a160016006600082825401925050819055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156142ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f340000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561435d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260018152602001807f350000000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008085116144bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f626e625f626f75676874203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561454a57600080fd5b505afa15801561455e573d6000803e3d6000fd5b505050506040513d602081101561457457600080fd5b810190808051906020019092919050505090506000614594878347613fc2565b9050600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a5b22788856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b15801561462957600080fd5b505afa15801561463d573d6000803e3d6000fd5b505050506040513d604081101561465357600080fd5b810190808051906020019092919080519060200190929190505050915091508083019250828810156146ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6d617820746f6b656e732065786365656465640000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc8a9081150290604051600060405180830381858888f19350505050158015614733573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8830866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156147e557600080fd5b505af11580156147f9573d6000803e3d6000fd5b505050506040513d602081101561480f57600080fd5b8101908080519060200190929190505050614892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f7472616e736f7266726f6f6d206572726f72000000000000000000000000000081525060200191505060405180910390fd5b88838873ffffffffffffffffffffffffffffffffffffffff167f3cc32b807e0e6ade29defe751a1339a43c1e45d7d18eca93a916ca060ebe89ea60405160405180910390a46148df6140bd565b82945050505050949350505050565b6000808314156149015760009050614919565b81830290508183828161491057fe5b041461491857fe5b5b92915050565b600081830190508281101561493057fe5b92915050565b600080851180156149475750600084115b6149b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746f6b656e735f626f75676874203e2030202626206d61785f626e62203e000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614a4457600080fd5b505afa158015614a58573d6000803e3d6000fd5b505050506040513d6020811015614a6e57600080fd5b810190808051906020019092919050505090506000614aa087614a9a88476140a690919063ffffffff16565b84613fc2565b90506000614ab782886140a690919063ffffffff16565b90506000811115614b0a578573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614b08573d6000803e3d6000fd5b505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb868a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614b9d57600080fd5b505af1158015614bb1573d6000803e3d6000fd5b505050506040513d6020811015614bc757600080fd5b8101908080519060200190929190505050614c4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f6572726f7200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b87828773ffffffffffffffffffffffffffffffffffffffff167f7f743fb741e07b0c4daeb2af54fb3ebfa2bdb31d9913a0e555661c870411aae560405160405180910390a4614c976140bd565b819350505050949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614d48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f746f20616464726573732077696c6c206e6f742062652030000000000000000081525060200191505060405180910390fd5b614d99816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140a690919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e2c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461491f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008085118015614ee95750600084115b614f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746f6b656e735f736f6c64203e2030202626206d696e5f626e62203e2030000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614fe657600080fd5b505afa158015614ffa573d6000803e3d6000fd5b505050506040513d602081101561501057600080fd5b81019080805190602001909291905050509050600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a5b227878a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b1580156150b657600080fd5b505afa1580156150ca573d6000803e3d6000fd5b505050506040513d60408110156150e057600080fd5b81019080805190602001909291908051906020019092919050505091509150600061510c838547612d20565b905087811015615184576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f626e625f626f75676874203e3d206d696e5f626e62000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156151ca573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd88308c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561527c57600080fd5b505af1158015615290573d6000803e3d6000fd5b505050506040513d60208110156152a657600080fd5b8101908080519060200190929190505050615329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f7472616e73666f7266726f6d206572726f72000000000000000000000000000081525060200191505060405180910390fd5b80898873ffffffffffffffffffffffffffffffffffffffff167f3cc32b807e0e6ade29defe751a1339a43c1e45d7d18eca93a916ca060ebe89ea60405160405180910390a46153766140bd565b80945050505050949350505050565b600082821115615398576000905061539e565b81830390505b9291505056fe696e7075745f726573657276652026206f75747075742072657365727665206d757374203e3053776170236164644c69717569646974793a20494e56414c49445f415247554d454e54616d6f756e74203e2030202626206d696e5f626e62203e2030202626206d696e5f746f6b656e73203e20302c3333336d61785f746f6b656e73203e3d20746f6b656e5f616d6f756e74202626206c69717569646974795f6d696e746564203e3d206d696e5f6c69717569646974792c2c2c2c3128626e625f616d6f756e74203e3d206d696e5f626e6220262620746f6b656e5f616d6f756e74203e3d206d696e5f746f6b656e732c3333a2646970667358221220bcc20c51ed608ee6e53f0e63b5c270e4a115ac015d72121a18abf877854ff10364736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004ec58f9d205f9c919920313932cc71ec68d123c7
-----Decoded View---------------
Arg [0] : token_addr (address): 0x4ec58f9D205F9c919920313932cc71EC68d123C7
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004ec58f9d205f9c919920313932cc71ec68d123c7
Deployed Bytecode Sourcemap
13671:17318:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15868:53;15884:9;15895:1;15898:10;15910;15868:15;:53::i;:::-;;13671:17318;;;;;13717:54;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6352:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23316:284;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4484:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22322:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25663:541;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19733:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6980:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3157:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2768:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24951:295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13824:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23823:344;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7743:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26212:484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15324:71;;;;;;;;;;;;;:::i;:::-;;26704:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14099:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24394:340;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4798:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2018:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15403:68;;;;;;;;;;;;;:::i;:::-;;29818:1168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;16319:467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;346:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13778:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1574:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27371:2149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25336:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25545:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8486:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5557:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14356:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18552:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25438:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5248:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2370:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1031:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14220:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21001:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17177:433;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17618:708;17732:7;17771:1;17760:8;:12;:30;;;;;17789:1;17776:10;:14;17760:30;17752:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17822:21;17846:5;;;;;;;;;;;:15;;;17870:4;17846:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17822:54;;17887:21;17911:75;17925:8;17935:35;17961:8;17935:21;:25;;:35;;;;:::i;:::-;17972:13;17911;:75::i;:::-;17887:99;;18024:10;18007:13;:27;;17999:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18085:5;;;;;;;;;;;:14;;;18100:9;18111:13;18085:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18077:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18193:13;18183:8;18176:5;18160:47;;;;;;;;;;;;18223:31;18241:12;:10;:12::i;:::-;18223:31;;;;;;;;;;;;;;;;;;18267:18;:16;:18::i;:::-;18305:13;18298:20;;;;17618:708;;;;;;:::o;13717:54::-;;;;;;;;;;;;;;;;;;;:::o;6352:148::-;6417:4;6434:36;6443:10;6455:7;6464:5;6434:8;:36::i;:::-;6488:4;6481:11;;6352:148;;;;:::o;23316:284::-;23388:7;23427:1;23416:8;:12;23408:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23459:21;23483:5;;;;;;;;;;;:15;;;23507:4;23483:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23459:54;;23531:61;23545:8;23555:21;23578:13;23531;:61::i;:::-;23524:68;;;23316:284;;;:::o;4484:91::-;4528:7;4555:12;;4548:19;;4484:91;:::o;22322:197::-;22420:7;15522:8;;;;;;;;;;;15521:9;15513:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22447:64:::1;22464:10;22476;22488;22500;22447:16;:64::i;:::-;22440:71;;22322:197:::0;;;;:::o;25663:541::-;25739:7;25777:1;25766:8;:12;25758:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25811:20;25846:23;25872:12;;25846:38;;25895:19;25917:21;25895:43;;25949:21;25973:5;;;;;;;;;;;:15;;;25997:4;25973:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25949:54;;26029:50;26077:1;26060:11;26030:27;26043:13;26030:8;:12;;:27;;;;:::i;:::-;:41;;;;;;26029:47;;:50;;;;:::i;:::-;26014:65;;26090:24;26149:11;26117:29;26130:15;26117:8;:12;;:29;;;;:::i;:::-;:43;;;;;;26090:70;;26180:16;26173:23;;;;;;;25663:541;;;:::o;19733:190::-;19822:7;15522:8;;;;;;;;;;;15521:9;15513:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19849:66:::1;19866:13;19881:9;19892:10;19904;19849:16;:66::i;:::-;19842:73;;19733:190:::0;;;:::o;6980:228::-;7059:4;7076:26;7086:4;7092:2;7096:5;7076:9;:26::i;:::-;7113:65;7122:4;7128:10;7140:37;7171:5;7140:8;:14;7149:4;7140:14;;;;;;;;;;;;;;;:26;7155:10;7140:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;7113:8;:65::i;:::-;7196:4;7189:11;;6980:228;;;;;:::o;3157:304::-;3244:12;804:5;;;;;;;;;;;790:19;;:10;:19;;;782:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3274:9:::1;3269:160;3293:5;:12;3289:1;:16;3269:160;;;3331:36;3358:5;3364:1;3358:8;;;;;;;;;;;;;;3331:26;:36::i;:::-;3327:91;;;3398:4;3388:14;;3327:91;3307:3;;;;;;;3269:160;;;;3157:304:::0;;;:::o;2768:283::-;2843:12;804:5;;;;;;;;;;;790:19;;:10;:19;;;782:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2872:9:::1;:15;2882:4;2872:15;;;;;;;;;;;;;;;;;;;;;;;;;2868:151;;;2922:5;2904:9;:15;2914:4;2904:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;2947:31;2973:4;2947:31;;;;;;;;;;;;;;;;;;;;3003:4;2993:14;;2868:151;2768:283:::0;;;:::o;24951:295::-;25026:7;25067:1;25054:10;:14;25046:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25102:21;25126:5;;;;;;;;;;;:15;;;25150:4;25126:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25102:54;;25174:64;25189:10;25201:13;25216:21;25174:14;:64::i;:::-;25167:71;;;24951:295;;;:::o;13824:35::-;13857:2;13824:35;:::o;23823:344::-;23901:7;23945:1;23929:13;:17;23921:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23982:21;24006:5;;;;;;;;;;;:15;;;24030:4;24006:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23982:54;;24047:16;24066:67;24081:13;24096:21;24119:13;24066:14;:67::i;:::-;24047:86;;24151:8;24144:15;;;;23823:344;;;:::o;7743:203::-;7823:4;7840:76;7849:10;7861:7;7870:45;7904:10;7870:8;:20;7879:10;7870:20;;;;;;;;;;;;;;;:29;7891:7;7870:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;7840:8;:76::i;:::-;7934:4;7927:11;;7743:203;;;;:::o;26212:484::-;26287:7;26296;26315:23;26341:12;;26315:38;;26390:1;26372:15;:19;26364:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26430:21;26454:5;;;;;;;;;;;:15;;;26478:4;26454:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26430:54;;26495:18;26552:15;26516:33;26527:21;26516:6;:10;;:33;;;;:::i;:::-;:51;;;;;;26495:72;;26578:20;26629:15;26601:25;26612:13;26601:6;:10;;:25;;;;:::i;:::-;:43;;;;;;26578:66;;26663:10;26675:12;26655:33;;;;;;;;26212:484;;;:::o;15324:71::-;804:5;;;;;;;;;;;790:19;;:10;:19;;;782:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15382:5:::1;15371:8;;:16;;;;;;;;;;;;;;;;;;15324:71::o:0;26704:95::-;26753:7;26780:4;:11;26785:5;26780:11;;;;;;;;;;;;;;;;26773:18;;26704:95;;;:::o;14099:23::-;;;;:::o;24394:340::-;24469:7;24511:1;24497:11;:15;24489:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24548:21;24572:5;;;;;;;;;;;:15;;;24596:4;24572:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24548:54;;24613:18;24634:64;24648:11;24661:13;24676:21;24634:13;:64::i;:::-;24613:85;;24716:10;24709:17;;;;24394:340;;;:::o;4798:106::-;4853:7;4880:9;:16;4890:5;4880:16;;;;;;;;;;;;;;;;4873:23;;4798:106;;;:::o;2018:251::-;2088:12;804:5;;;;;;;;;;;790:19;;:10;:19;;;782:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2118:9:::1;:15;2128:4;2118:15;;;;;;;;;;;;;;;;;;;;;;;;;2113:149;;2168:4;2150:9;:15;2160:4;2150:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;2192:29;2216:4;2192:29;;;;;;;;;;;;;;;;;;;;2246:4;2236:14;;2113:149;2018:251:::0;;;:::o;15403:68::-;804:5;;;;;;;;;;;790:19;;:10;:19;;;782:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15459:4:::1;15448:8;;:15;;;;;;;;;;;;;;;;;;15403:68::o:0;29818:1168::-;29928:7;29937;1861:9;:21;1871:10;1861:21;;;;;;;;;;;;;;;;;;;;;;;;;1853:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29974:1:::1;29965:6;:10;:25;;;;;29989:1;29979:7;:11;29965:25;:43;;;;;30007:1;29994:10;:14;29965:43;29957:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30070:23;30096:12;;30070:38;;30145:1;30127:15;:19;30119:28;;;::::0;::::1;;30158:21;30182:5;;;;;;;;;;;:15;;;30206:4;30182:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;30158:54;;30223:18;30280:15;30244:33;30255:21;30244:6;:10;;:33;;;;:::i;:::-;:51;;;;;;30223:72;;30308:20;30359:15;30331:25;30342:13;30331:6;:10;;:25;;;;:::i;:::-;:43;;;;;;30308:66;;30407:7;30393:10;:21;;:51;;;;;30434:10;30418:12;:26;;30393:51;30385:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30540:33;30566:6;30540:9;:21:::0;30550:10:::1;30540:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;30516:9;:21:::0;30526:10:::1;30516:21;;;;;;;;;;;;;;;:57;;;;30599:27;30619:6;30599:15;:19;;:27;;;;:::i;:::-;30584:12;:42;;;;30637:10;:19;;:31;30657:10;30637:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30687:5;;;;;;;;;;;:14;;;30702:10;30714:12;30687:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;30679:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30803:12;30791:10;30779;30761:55;;;;;;;;;;;;30856:9;:21:::0;30866:10:::1;30856:21;;;;;;;;;;;;;;;;30844:10;30832:46;;;;;;;;;;;;30923:1;30894:40;;30903:10;30894:40;;;30927:6;30894:40;;;;;;;;;;;;;;;;;;30953:10;30965:12;30945:33;;;;;;;;29818:1168:::0;;;;;;:::o;16319:467::-;16433:7;16477:1;16461:13;:17;:39;;;;;16499:1;16482:14;:18;16461:39;16453:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16529:29;16561:21;16578:3;16561:12;:16;;:21;;;;:::i;:::-;16529:53;;16593:17;16613:41;16639:14;16613:21;:25;;:41;;;;:::i;:::-;16593:61;;16665:19;16687:50;16715:21;16687:23;16705:4;16687:13;:17;;:23;;;;:::i;:::-;:27;;:50;;;;:::i;:::-;16665:72;;16767:11;16755:9;:23;;;;;;16748:30;;;;;16319:467;;;;;:::o;346:20::-;;;;;;;;;;;;;:::o;13778:39::-;;;;;;;;;;;;;;;;;;;:::o;1574:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;27371:2149::-;27472:7;15522:8;;;;;;;;;;;15521:9;15513:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27513:1:::1;27500:10;:14;:31;;;;;27530:1;27518:9;:13;27500:31;27492:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27582:23;27608:12;;27582:38;;27633:20;27700:5:::0;27674:31:::1;;:10;:22;27685:10;27674:22;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;27670:121;;;27746:4;27721:10;:22;27732:10;27721:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27778:1;27765:9;;:14;;;;;;;;;;;27670:121;27825:1;27807:15;:19;27803:1710;;;27867:1;27851:13;:17;27843:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27909:19;27931:36;27957:9;27931:21;:25;;:36;;;;:::i;:::-;27909:58;;27982:21;28006:5;;;;;;;;;;;:15;;;28030:4;28006:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27982:54;;28066:51;28115:1;28098:11;28067:28;28081:13;28067:9;:13;;:28;;;;:::i;:::-;:42;;;;;;28066:48;;:51;;;;:::i;:::-;28051:66;;28132:24;28192:11;28159:30;28173:15;28159:9;:13;;:30;;;;:::i;:::-;:44;;;;;;28132:71;;28242:12;28228:10;:26;;:63;;;;;28278:13;28258:16;:33;;28228:63;28220:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28402:43;28428:16;28402:9;:21:::0;28412:10:::1;28402:21;;;;;;;;;;;;;;;;:25;;:43;;;;:::i;:::-;28378:9;:21:::0;28388:10:::1;28378:21;;;;;;;;;;;;;;;:67;;;;28475:37;28495:16;28475:15;:19;;:37;;;;:::i;:::-;28460:12;:52;;;;28535:5;;;;;;;;;;;:18;;;28554:10;28574:4;28581:12;28535:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;28527:87;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28674:12;28663:9;28651:10;28636:51;;;;;;;;;;;;28731:9;:21:::0;28741:10:::1;28731:21;;;;;;;;;;;;;;;;28719:10;28707:46;;;;;;;;;;;;28794:10;28773:50;;28790:1;28773:50;;;28806:16;28773:50;;;;;;;;;;;;;;;;;;28845:16;28838:23;;;;;;;;;27803:1710;28917:4;28904:9;:17;;28896:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28969:10;28954:25;;28994;29022:21;28994:49;;29073:17;29058:12;:32;;;;29129:17;29105:9;:21:::0;29115:10:::1;29105:21;;;;;;;;;;;;;;;:41;;;;29169:5;;;;;;;;;;;:18;;;29188:10;29208:4;29215:12;29169:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;29161:91;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29312:12;29301:9;29289:10;29274:51;;;;;;;;;;;;29369:9;:21:::0;29379:10:::1;29369:21;;;;;;;;;;;;;;;;29357:10;29345:46;;;;;;;;;;;;29432:10;29411:51;;29428:1;29411:51;;;29444:17;29411:51;;;;;;;;;;;;;;;;;;29484:17;29477:24;;;;;15568:1;27371:2149:::0;;;;:::o;25336:94::-;25381:7;25416:5;;;;;;;;;;;25401:21;;25336:94;:::o;25545:110::-;25590:7;25617:5;;;;;;;;;;;:15;;;25641:4;25617:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25610:37;;25545:110;:::o;8486:213::-;8571:4;8588:81;8597:10;8609:7;8618:50;8652:15;8618:8;:20;8627:10;8618:20;;;;;;;;;;;;;;;:29;8639:7;8618:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;8588:8;:81::i;:::-;8687:4;8680:11;;8486:213;;;;:::o;5557:140::-;5618:4;5635:32;5645:10;5657:2;5661:5;5635:9;:32::i;:::-;5685:4;5678:11;;5557:140;;;;:::o;14356:27::-;;;;;;;;;;;;;:::o;18552:181::-;18637:7;15522:8;;;;;;;;;;;15521:9;15513:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18664:61:::1;18680:9;18691:10;18702;18714;18664:15;:61::i;:::-;18657:68;;18552:181:::0;;;:::o;25438:99::-;25481:7;25508:21;25501:28;;25438:99;:::o;5248:131::-;5320:7;5347:8;:15;5356:5;5347:15;;;;;;;;;;;;;;;:24;5363:7;5347:24;;;;;;;;;;;;;;;;5340:31;;5248:131;;;;:::o;2370:294::-;2452:12;804:5;;;;;;;;;;;790:19;;:10;:19;;;782:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2482:9:::1;2477:155;2501:5;:12;2497:1;:16;2477:155;;;2539:31;2561:5;2567:1;2561:8;;;;;;;;;;;;;;2539:21;:31::i;:::-;2535:86;;;2601:4;2591:14;;2535:86;2515:3;;;;;;;2477:155;;;;2370:294:::0;;;:::o;1031:217::-;804:5;;;;;;;;;;;790:19;;:10;:19;;;782:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1132:1:::1;1112:22;;:8;:22;;;;1104:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1204:8;1176:37;;1197:5;;;;;;;;;;;1176:37;;;;;;;;;;;;1232:8;1224:5;;:16;;;;;;;;;;;;;;;;;;1031:217:::0;:::o;14220:24::-;;;;:::o;21001:191::-;21096:7;15522:8;;;;;;;;;;;15521:9;15513:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21123:61:::1;21139:11;21152:7;21161:10;21173;21123:15;:61::i;:::-;21116:68;;21001:191:::0;;;;:::o;17177:433::-;17293:7;17337:1;17321:13;:17;:39;;;;;17359:1;17342:14;:18;17321:39;17313:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17413:17;17433:42;17470:4;17433:32;17451:13;17433;:17;;:32;;;;:::i;:::-;:36;;:42;;;;:::i;:::-;17413:62;;17486:19;17508:44;17548:3;17509:33;17528:13;17509:14;:18;;:33;;;;:::i;:::-;17508:39;;:44;;;;:::i;:::-;17486:66;;17570:32;17600:1;17583:11;17571:9;:23;;;;;;17570:29;;:32;;;;:::i;:::-;17563:39;;;;17177:433;;;;;:::o;12410:123::-;12468:7;12500:1;12495;:6;;12488:14;;;;12524:1;12520;:5;12513:12;;12410:123;;;;:::o;22527:435::-;22576:13;22592:30;22617:4;22592:24;:30::i;:::-;22576:46;;22633:15;22651:12;:10;:12::i;:::-;22633:30;;22708:17;;22680:25;22692:12;;22680:3;:11;;:25;;;;:::i;:::-;:45;22676:147;;;22749:29;22769:1;22759:7;:11;22772:5;22749:29;;;;;;;;;;;;;;;;;;;;;;;;22808:3;22793:12;:18;;;;22676:147;22840:26;22858:7;22840:26;;;;;;;;;;;;;;;;;;22882:14;22890:5;22882:14;;;;;;;;;;;;;;;;;;22921:1;22909:8;;:13;;;;;;;;;;;22953:1;22933:4;:16;22938:10;22933:16;;;;;;;;;;;;;;;;:21;;;;;;;;;;;22527:435;;:::o;10641:262::-;10753:1;10734:21;;:7;:21;;;;10726:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10796:1;10779:19;;:5;:19;;;;10771:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10843:5;10816:8;:15;10825:5;10816:15;;;;;;;;;;;;;;;:24;10832:7;10816:24;;;;;;;;;;;;;;;:32;;;;10880:7;10864:31;;10873:5;10864:31;;;10889:5;10864:31;;;;;;;;;;;;;;;;;;10641:262;;;:::o;21200:861::-;21317:7;21358:1;21345:10;:14;21337:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21388:21;21412:5;;;;;;;;;;;:15;;;21436:4;21412:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21388:54;;21453:19;21475:64;21490:10;21502:13;21517:21;21475:14;:64::i;:::-;21453:86;;21553:21;21576:17;21597:5;;;;;;;;;;;:28;;;21626:5;21633:11;21597:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21552:93;;;;21671:9;21656:24;;;;21753:11;21739:10;:25;;21731:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21807:9;21799:27;;:39;21827:10;21799:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21857:5;;;;;;;;;;;:18;;;21876:5;21891:4;21898:11;21857:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21849:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21982:10;21969:11;21962:5;21948:45;;;;;;;;;;;;22004:18;:16;:18::i;:::-;22042:11;22035:18;;;;;;21200:861;;;;;;:::o;11693:202::-;11751:9;11782:1;11777;:6;11773:47;;;11807:1;11800:8;;;;11773:47;11838:1;11834;:5;11830:9;;11866:1;11861;11857;:5;;;;;;:10;11850:18;;;;11693:202;;;;;:::o;12844:141::-;12902:9;12932:1;12928;:5;12924:9;;12956:1;12951;:6;;12944:14;;;;12844:141;;;;:::o;18741:766::-;18858:7;18902:1;18886:13;:17;:32;;;;;18917:1;18907:7;:11;18886:32;18878:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18963:21;18987:5;;;;;;;;;;;:15;;;19011:4;18987:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18963:54;;19028:16;19047:80;19062:13;19077:34;19103:7;19077:21;:25;;:34;;;;:::i;:::-;19113:13;19047:14;:80::i;:::-;19028:99;;19179:18;19200:21;19212:8;19200:7;:11;;:21;;;;:::i;:::-;19179:42;;19249:1;19236:10;:14;19232:82;;;19275:5;19267:23;;:35;19291:10;19267:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19232:82;19332:5;;;;;;;;;;;:14;;;19347:9;19358:13;19332:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19324:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19430:13;19420:8;19413:5;19397:47;;;;;;;;;;;;19455:18;:16;:18::i;:::-;19491:8;19484:15;;;;;18741:766;;;;;;:::o;8931:289::-;9033:1;9019:16;;:2;:16;;;;9011:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9094:26;9114:5;9094:9;:15;9104:4;9094:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;9076:9;:15;9086:4;9076:15;;;;;;;;;;;;;;;:44;;;;9147:24;9165:5;9147:9;:13;9157:2;9147:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;9131:9;:13;9141:2;9131:13;;;;;;;;;;;;;;;:40;;;;9202:2;9187:25;;9196:4;9187:25;;;9206:5;9187:25;;;;;;;;;;;;;;;;;;8931:289;;;:::o;19931:812::-;20045:7;20087:1;20073:11;:15;:30;;;;;20102:1;20092:7;:11;20073:30;20065:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20148:21;20172:5;;;;;;;;;;;:15;;;20196:4;20172:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20148:54;;20216:21;20239:17;20260:5;;;;;;;;;;;:28;;;20289:5;20296:11;20260:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20215:93;;;;20321:18;20342:66;20356:13;20371;20386:21;20342:13;:66::i;:::-;20321:87;;20441:7;20427:10;:21;;20419:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20492:9;20484:27;;:39;20512:10;20484:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20542:5;;;;;;;;;;;:18;;;20561:5;20576:4;20583:11;20542:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20534:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20667:10;20654:11;20647:5;20633:45;;;;;;;;;;;;20689:18;:16;:18::i;:::-;20725:10;20718:17;;;;;;19931:812;;;;;;:::o;12598:171::-;12654:4;12679:1;12675;:5;12671:91;;;12704:1;12697:8;;;;12671:91;12749:1;12745;:5;12738:12;;12598:171;;;;;:::o
Swarm Source
ipfs://bcc20c51ed608ee6e53f0e63b5c270e4a115ac015d72121a18abf877854ff103
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
AVAX | 100.00% | $22.22 | 0.00000174 | $0.000039 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.