Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 10 from a total of 10 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Redeem | 10957360 | 1989 days ago | IN | 0 ETH | 0.04825183 | ||||
| Invest | 10957349 | 1989 days ago | IN | 0 ETH | 0.04824403 | ||||
| Redeem | 10956996 | 1989 days ago | IN | 0 ETH | 0.1129572 | ||||
| Redeem | 10956710 | 1989 days ago | IN | 0 ETH | 0.118794 | ||||
| Redeem | 10956704 | 1989 days ago | IN | 0 ETH | 0.12592337 | ||||
| Redeem | 10956701 | 1989 days ago | IN | 0 ETH | 0.12091368 | ||||
| Redeem | 10956695 | 1989 days ago | IN | 0 ETH | 0.11870009 | ||||
| Invest | 10956686 | 1989 days ago | IN | 0 ETH | 0.08328048 | ||||
| Invest | 10956679 | 1989 days ago | IN | 0 ETH | 0.06861598 | ||||
| Invest | 10956311 | 1989 days ago | IN | 0 ETH | 0.05446396 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
oToken
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-09-29
*/
pragma solidity ^0.5.12;
contract Context {
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
contract ReentrancyGuard {
uint256 private _guardCounter;
constructor () internal {
_guardCounter = 1;
}
modifier nonReentrant() {
_guardCounter += 1;
uint256 localCounter = _guardCounter;
_;
require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
}
}
//******************** Library ********************//
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function callOptionalReturn(IERC20 token, bytes memory data) private {
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
//******************** Interface ********************//
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface Erc20 {
function approve(address, uint256) external returns (bool);
function transfer(address, uint256) external returns (bool);
}
// Compound
interface Compound {
function mint ( uint256 mintAmount ) external returns ( uint256 );
function redeem(uint256 redeemTokens) external returns (uint256);
function exchangeRateStored() external view returns (uint);
function supply(address asset, uint amount) external returns (uint);
function withdraw(address asset, uint requestedAmount) external returns (uint);
function getSupplyBalance(address account, address asset) view external returns (uint);
function supplyRatePerBlock() external view returns (uint);
function balanceOf(address account) external view returns (uint);
}
//AAVE
interface LendingPoolAddressesProvider {
function getLendingPool() external view returns (address);
function getLendingPoolCore() external view returns (address);
}
interface LendingPoolCore {
function getReserveCurrentLiquidityRate(address _reserve)
external
view
returns (
uint256 liquidityRate
);
}
interface Aave {
function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external;
function repay( address _reserve, uint256 _amount, address payable _onBehalfOf) external;
function borrow(address _reserve, uint256 _amount, uint256 _interestRateMode, uint16 _referralCode) external;
}
interface AToken {
function redeem(uint256 amount) external;
}
//Fulcrum
interface Fulcrum {
function mint(address receiver, uint256 amount) external payable returns (uint256 mintAmount);
function burn(address receiver, uint256 burnAmount) external returns (uint256 loanAmountPaid);
function assetBalanceOf(address _owner) external view returns (uint256 balance);
function supplyInterestRate() external view returns (uint256);
}
//******************** ERC20 ********************//
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 _totalSupply;
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
}
}
contract ERC20Detailed is IERC20 {
string private _name;
string private _symbol;
uint8 private _decimals;
constructor (string memory name, string memory symbol, uint8 decimals) public {
_name = name;
_symbol = symbol;
_decimals = decimals;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
}
contract Whitelist is Ownable {
mapping(address => bool) whitelist;
event AddedToWhitelist(address indexed account);
event RemovedFromWhitelist(address indexed account);
modifier onlyWhitelisted() {
require(isWhitelisted(msg.sender));
_;
}
function add(address _address) public onlyOwner {
whitelist[_address] = true;
emit AddedToWhitelist(_address);
}
function remove(address _address) public onlyOwner {
whitelist[_address] = false;
emit RemovedFromWhitelist(_address);
}
function isWhitelisted(address _address) public view returns(bool) {
return whitelist[_address];
}
}
contract oToken is ERC20, ERC20Detailed, ReentrancyGuard, Ownable, Whitelist{
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;
uint256 public pool;
address public token;
address public compound;
address public fulcrum;
address public aave;
address public aaveToken;
address public targetERC20Token;
address public dev_addr;
bool private isStop;
uint256 private ratio; // 100 = 1%, 1000 = 0.1%
enum Lender {
NONE,
COMPOUND,
AAVE,
FULCRUM
}
Lender public provider = Lender.NONE;
constructor () public ERC20Detailed("Test Token", "oToken", 18) {
isStop = false;
ratio = 100;
dev_addr = msg.sender;
// *** Main Net *** //
token = address(0x6B175474E89094C44Da98b954EedeAC495271d0F);
fulcrum = address(0x6b093998D36f2C7F0cc359441FBB24CC629D5FF0);
aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
aaveToken = address(0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d);
compound = address(0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643);
approveToken();
}
function approveToken() public {
IERC20(token).safeApprove(compound, uint(-1));
IERC20(token).safeApprove(getAaveCore(), uint(-1));
IERC20(token).safeApprove(fulcrum, uint(-1));
}
function getAave() public view returns (address) {
return LendingPoolAddressesProvider(aave).getLendingPool();
}
function getAaveCore() public view returns (address) {
return LendingPoolAddressesProvider(aave).getLendingPoolCore();
}
// *** Only Owner *** //
function set_Stop() public onlyOwner{
if(isStop){
isStop = false;
}
else{
isStop = true;
}
}
function set_devAddr(address _dev) public onlyOwner{
dev_addr = _dev;
}
function set_Ratio(uint256 _ratio) public onlyOwner{
ratio = _ratio;
}
function set_Token(address _token) public onlyOwner{
token = _token;
}
function set_TargetERC20Token(address _token) public onlyOwner{
targetERC20Token = _token;
}
function set_AAVE(address _token) public onlyOwner{
aave = _token;
}
function set_AToken(address _token) public onlyOwner{
aaveToken = _token;
}
function set_CToken(address _token) public onlyOwner{
compound = _token;
}
function set_iToken(address _token) public onlyOwner{
fulcrum = _token;
}
// *** Balance *** //
function balanceToken() public view returns (uint256) {
return IERC20(token).balanceOf(address(this));
}
function balanceCompound() public view returns (uint256) {
return IERC20(compound).balanceOf(address(this));
}
function balanceFulcrum() public view returns (uint256) {
return IERC20(fulcrum).balanceOf(address(this));
}
function balanceAave() public view returns (uint256) {
return IERC20(aaveToken).balanceOf(address(this));
}
function balanceCompoundInToken() public view returns (uint256) {
// Mantisa 1e18 to decimals
uint256 b = balanceCompound();
if (b > 0) {
b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
}
return b;
}
function balanceFulcrumInToken() public view returns (uint256) {
uint256 b = balanceFulcrum();
if (b > 0) {
b = Fulcrum(fulcrum).assetBalanceOf(address(this));
}
return b;
}
// *** Supply *** //
function supplyFulcrum(uint amount) public {
//IERC20(token).approve(fulcrum, amount);
Fulcrum(fulcrum).mint(address(this), amount);
//require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed");
}
function supplyAave(uint amount) public {
//IERC20(token).approve(getAaveCore(), amount); // Approve transfer on the ERC20 contract
Aave(getAave()).deposit(token, amount, 0);
}
function supplyCompound(uint amount) public {
IERC20(token).approve(compound, amount); // Approve transfer on the ERC20 contract
uint mintResult = Compound(compound).mint(amount);
//require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed");
}
// *** Withdraw *** //
function withdrawFulcrum(uint amount) public {
require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed");
}
function withdrawAave(uint amount) public {
AToken(aaveToken).redeem(amount);
}
function withdrawCompound(uint amount) public {
//Compound(compound).redeem(amount); // Retrieve your asset based on a cToken amount
//Compound(compound).redeemUnderlying(amount); // Retrieve your asset based on an amount of the asset
require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed");
}
// *** APR *** //
//Compound
function getCompoundAPR(address token) public view returns (uint256) {
return Compound(token).supplyRatePerBlock().mul(2102400);
}
function getCDAIAPR() public view returns (uint256) {
return getCompoundAPR(compound);
}
//Fulcrum
function getFulcrumAPR(address token) public view returns(uint256) {
return Fulcrum(token).supplyInterestRate().div(100);
}
function getIDAIAPR() public view returns (uint256) {
return getFulcrumAPR(fulcrum);
}
//AAVE
function getADAIAPR() public view returns (uint256) {
return getAaveAPR(token);
}
function getAaveAPR(address token) public view returns (uint256) {
LendingPoolCore core = LendingPoolCore(LendingPoolAddressesProvider(aave).getLendingPoolCore());
return core.getReserveCurrentLiquidityRate(token).div(1e9);
}
// *** Total *** //
function isModeCheck(uint256 mode) internal returns (uint256) {
uint256 result = 0;
if(isOwner()){
result = mode;
}
else if (IERC20(targetERC20Token).balanceOf(msg.sender) > 10000 * decimals() && balanceOf(msg.sender) > _totalSupply.div(1000) ){
result = mode;
}
else if (isWhitelisted(msg.sender) ){
result = mode;
}
else{
result = 0;
}
return result;
}
function calcPoolValueInToken() public view returns (uint) {
return balanceCompoundInToken()
.add(balanceFulcrumInToken())
.add(balanceAave())
.add(balanceToken());
}
function recommend() public view returns (Lender) {
uint256 capr = getCDAIAPR();
uint256 aapr = getADAIAPR();
uint256 iapr = getIDAIAPR();
uint256 max = 0;
if (capr > max) {
max = capr;
}
if (iapr > max) {
max = iapr;
}
if (aapr > max) {
max = aapr;
}
Lender newProvider = Lender.NONE;
if (max == capr) {
newProvider = Lender.COMPOUND;
} else if (max == iapr) {
newProvider = Lender.FULCRUM;
} else if (max == aapr) {
newProvider = Lender.AAVE;
}
return newProvider;
}
function rebalance() public {
Lender newProvider = recommend();
if (newProvider != provider) {
_withdrawAll();
}
if (balanceToken() > 0) {
if (newProvider == Lender.FULCRUM) {
supplyFulcrum(balanceToken());
} else if (newProvider == Lender.COMPOUND) {
supplyCompound(balanceToken());
} else if (newProvider == Lender.AAVE) {
supplyAave(balanceToken());
}
}
provider = newProvider;
}
function invest(uint256 _amount, uint256 _mode) external nonReentrant
{
pool = calcPoolValueInToken();
IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);
//uint mode = isModeCheck(_mode);
uint mode = _mode;
if (balanceToken() > 0 && isStop == false) {
if(mode == 0){
rebalance();
}
else if(mode == 1){
Lender newProvider = Lender.COMPOUND;
if (newProvider != provider) {
_withdrawAll();
_rebalance(newProvider);
}
else{
supplyCompound(balanceToken());
}
}
else if(mode == 2){
Lender newProvider = Lender.FULCRUM;
if (newProvider != provider) {
_withdrawAll();
_rebalance(newProvider);
}
else{
supplyFulcrum(balanceToken());
}
}
else if(mode == 3){
Lender newProvider = Lender.AAVE;
if (newProvider != provider) {
_withdrawAll();
_rebalance(newProvider);
}
else{
supplyAave(balanceToken());
}
}
}
// Calculate pool shares
uint256 shares = 0;
if (pool == 0) {
shares = _amount;
pool = _amount;
} else {
shares = (_amount.mul(_totalSupply)).div(pool);
}
pool = calcPoolValueInToken();
_mint(msg.sender, shares);
_mint(dev_addr, shares.div(ratio));
}
function redeem(uint256 _shares) external nonReentrant
{
require(_shares > 0, "withdraw must be greater than 0");
uint256 balance = balanceOf(msg.sender);
require(_shares <= balance, "insufficient balance");
pool = calcPoolValueInToken(); // Could have over value from cTokens
uint256 r = (pool.mul(_shares)).div(_totalSupply); // Calc to redeem before updating balances
_balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance");
_totalSupply = _totalSupply.sub(_shares);
emit Transfer(msg.sender, address(0), _shares);
// Check ETH balance
uint256 b = IERC20(token).balanceOf(address(this));
Lender newProvider = provider;
if (b < r) {
newProvider = recommend();
if (newProvider != provider) {
_withdrawAll();
} else {
_withdrawSome(r.sub(b));
}
}
IERC20(token).safeTransfer(msg.sender, r);
if (newProvider != provider) {
_rebalance(newProvider);
}
pool = calcPoolValueInToken();
}
function _rebalance(Lender newProvider) internal {
if (balanceToken() > 0) {
if (newProvider == Lender.FULCRUM) {
supplyFulcrum(balanceToken());
} else if (newProvider == Lender.COMPOUND) {
supplyCompound(balanceToken());
} else if (newProvider == Lender.AAVE) {
supplyAave(balanceToken());
}
}
provider = newProvider;
}
function _withdrawAll() internal {
uint256 amount = balanceCompound();
if (amount > 0) {
withdrawCompound(amount);
}
amount = balanceFulcrum();
if (amount > 0) {
withdrawFulcrum(amount);
}
amount = balanceAave();
if (amount > 0) {
withdrawAave(amount);
}
}
function _withdrawSome(uint256 _amount) internal {
if (provider == Lender.COMPOUND) {
_withdrawSomeCompound(_amount);
}
if (provider == Lender.AAVE) {
require(balanceAave() >= _amount, "insufficient funds");
withdrawAave(_amount);
}
if (provider == Lender.FULCRUM) {
_withdrawSomeFulcrum(_amount);
}
}
function _withdrawSomeCompound(uint256 _amount) internal {
uint256 b = balanceCompound();
uint256 bT = balanceCompoundInToken();
require(bT >= _amount, "insufficient funds");
// can have unintentional rounding errors
uint256 amount = (b.mul(_amount)).div(bT).add(1);
withdrawCompound(amount);
}
function _withdrawSomeFulcrum(uint256 _amount) internal {
// Balance of fulcrum tokens, 1 iDAI = 1.00x DAI
uint256 b = balanceFulcrum();
// Balance of token in fulcrum
uint256 bT = balanceFulcrumInToken();
require(bT >= _amount, "insufficient funds");
// can have unintentional rounding errors
uint256 amount = (b.mul(_amount)).div(bT).add(1);
withdrawFulcrum(amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AddedToWhitelist","type":"event"},{"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":"account","type":"address"}],"name":"RemovedFromWhitelist","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"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"add","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dev_addr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getADAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getAaveAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCDAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getCompoundAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getFulcrumAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIDAIAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"invest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum oToken.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum oToken.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"remove","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_AAVE","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_AToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_CToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_ratio","type":"uint256"}],"name":"set_Ratio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"set_Stop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_TargetERC20Token","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_Token","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"set_devAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_iToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"targetERC20Token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526000601260006101000a81548160ff021916908360038111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280600a81526020017f5465737420546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f6f546f6b656e000000000000000000000000000000000000000000000000000081525060128260039080519060200190620000bd92919062000b2f565b508160049080519060200190620000d692919062000b2f565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d620003ed60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000601060146101000a81548160ff021916908315150217905550606460118190555033601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736b175474e89094c44da98b954eedeac495271d0f600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736b093998d36f2c7f0cc359441fbb24cc629d5ff0600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fc1e690f61efd961294b3e1ce3313fbd8aa4f85d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735d3a536e4d6dbd6114cc1ead35777bab948e3643600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e7620003f560201b60201c565b62000bde565b600033905090565b6200048b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620005a660201b6200472c179092919060201c565b6200050e6200049f620007d460201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620005a660201b6200472c179092919060201c565b620005a4600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620005a660201b6200472c179092919060201c565b565b6000811480620006a4575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156200066557600080fd5b505afa1580156200067a573d6000803e3d6000fd5b505050506040513d60208110156200069157600080fd5b8101908080519060200190929190505050145b620006fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180620063686036913960400191505060405180910390fd5b620007cf838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200088160201b60201c565b505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200083f57600080fd5b505afa15801562000854573d6000803e3d6000fd5b505050506040513d60208110156200086b57600080fd5b8101908080519060200190929190505050905090565b620008ad8273ffffffffffffffffffffffffffffffffffffffff1662000ae360201b620055281760201c565b62000920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106200097157805182526020820191506020810190506020830392506200094c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620009d5576040519150601f19603f3d011682016040523d82523d6000602084013e620009da565b606091505b50915091508162000a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111562000add5780806020019051602081101562000a7457600080fd5b810190808051906020019092919050505062000adc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806200633e602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801562000b265750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000b7257805160ff191683800117855562000ba3565b8280016001018555821562000ba3579182015b8281111562000ba257825182559160200191906001019062000b85565b5b50905062000bb2919062000bb6565b5090565b62000bdb91905b8082111562000bd757600081600090555060010162000bbd565b5090565b90565b6157508062000bee6000396000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c806370a08231116101f4578063a457c2d71161011a578063e849d659116100ad578063f69e20461161007c578063f69e204614611151578063f7c1ec771461119b578063f82ce27d146111e5578063fc0c546a1461122f576103ba565b8063e849d6591461107d578063f11db064146110ab578063f2fde38b146110ef578063f5a41dea14611133576103ba565b8063d87aa643116100e9578063d87aa64314610f71578063db006a7514610fa9578063dd62ed3e14610fd7578063e3f2183f1461104f576103ba565b8063a457c2d714610e69578063a728797114610ecf578063a9059cbb14610eed578063cf8ca42614610f53576103ba565b806383deca3d1161019257806395d89b411161016157806395d89b4114610d9257806399b71d5c14610e15578063a160176d14610e1f578063a30955af14610e4b576103ba565b806383deca3d14610c8a5780638da5cb5b14610ce25780638f32d59b14610d2c57806395cc049a14610d4e576103ba565b806379bc31eb116101ce57806379bc31eb14610bc45780637d7c2a1c14610c085780638124955c14610c12578063819faf7b14610c40576103ba565b806370a0823114610b445780637137ef9914610b9c578063715018a614610bba576103ba565b8063378aaea4116102e4578063537540e11161027757806358782c211161024657806358782c2114610a6a5780635c414d5714610ab457806361c1ec5514610af857806365aab74914610b16576103ba565b8063537540e11461099657806356cc9378146109e05780635762bbd914610a0e57806357b8754314610a3c576103ba565b806343e8b0be116102b357806343e8b0be146108be57806344e258b4146108dc57806346205e74146109345780634d2cd8ab14610978576103ba565b8063378aaea4146107ae57806339509351146107b85780633af32abf1461081e5780633f5475381461087a576103ba565b806316f0115b1161035c578063243d66591161032b578063243d6659146106e457806329092d0e146107025780632cefc31214610746578063313ce5671461078a576103ba565b806316f0115b146105ca57806318160ddd146105e8578063192a98611461060657806323b872dd1461065e576103ba565b8063085d488311610398578063085d4883146104d6578063095ea7b3146105025780630a3b0a4f146105685780630eb2a267146105ac576103ba565b806302d8325c146103bf57806306a3fe591461040957806306fdde0314610453575b600080fd5b6103c7611279565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61041161129f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61045b6112c5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561049b578082015181840152602081019050610480565b50505050905090810190601f1680156104c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104de611367565b604051808260038111156104ee57fe5b60ff16815260200191505060405180910390f35b61054e6004803603604081101561051857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061137a565b604051808215151515815260200191505060405180910390f35b6105aa6004803603602081101561057e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611398565b005b6105b46114b0565b6040518082815260200191505060405180910390f35b6105d2611591565b6040518082815260200191505060405180910390f35b6105f0611597565b6040518082815260200191505060405180910390f35b6106486004803603602081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a1565b6040518082815260200191505060405180910390f35b6106ca6004803603606081101561067457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061171f565b604051808215151515815260200191505060405180910390f35b6106ec6117f8565b6040518082815260200191505060405180910390f35b6107446004803603602081101561071857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b005b6107886004803603602081101561075c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611942565b005b610792611a00565b604051808260ff1660ff16815260200191505060405180910390f35b6107b6611a17565b005b610804600480360360408110156107ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ae4565b604051808215151515815260200191505060405180910390f35b6108606004803603602081101561083457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b97565b604051808215151515815260200191505060405180910390f35b6108bc6004803603602081101561089057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bed565b005b6108c6611cab565b6040518082815260200191505060405180910390f35b61091e600480360360208110156108f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdd565b6040518082815260200191505060405180910390f35b6109766004803603602081101561094a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d7c565b005b610980611e3a565b6040518082815260200191505060405180910390f35b61099e611e6c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a0c600480360360208110156109f657600080fd5b8101908080359060200190929190505050611e92565b005b610a3a60048036036020811015610a2457600080fd5b8101908080359060200190929190505050611f22565b005b610a6860048036036020811015610a5257600080fd5b810190808035906020019092919050505061207e565b005b610a726121a6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610af660048036036020811015610aca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121cc565b005b610b0061228a565b6040518082815260200191505060405180910390f35b610b4260048036036020811015610b2c57600080fd5b810190808035906020019092919050505061236b565b005b610b8660048036036020811015610b5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612443565b6040518082815260200191505060405180910390f35b610ba461248b565b6040518082815260200191505060405180910390f35b610bc26124e5565b005b610c0660048036036020811015610bda57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612620565b005b610c106126de565b005b610c3e60048036036020811015610c2857600080fd5b81019080803590602001909291905050506127ef565b005b610c486128d7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ccc60048036036020811015610ca057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128fd565b6040518082815260200191505060405180910390f35b610cea61299a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d346129c4565b604051808215151515815260200191505060405180910390f35b610d9060048036036020811015610d6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a23565b005b610d9a612ae1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dda578082015181840152602081019050610dbf565b50505050905090810190601f168015610e075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e1d612b83565b005b610e27612d17565b60405180826003811115610e3757fe5b60ff16815260200191505060405180910390f35b610e53612da6565b6040518082815260200191505060405180910390f35b610eb560048036036040811015610e7f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e87565b604051808215151515815260200191505060405180910390f35b610ed7612f54565b6040518082815260200191505060405180910390f35b610f3960048036036040811015610f0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613043565b604051808215151515815260200191505060405180910390f35b610f5b613061565b6040518082815260200191505060405180910390f35b610fa760048036036040811015610f8757600080fd5b810190808035906020019092919080359060200190929190505050613142565b005b610fd560048036036020811015610fbf57600080fd5b810190808035906020019092919050505061345a565b005b61103960048036036040811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061395b565b6040518082815260200191505060405180910390f35b61107b6004803603602081101561106557600080fd5b81019080803590602001909291905050506139e2565b005b6110a96004803603602081101561109357600080fd5b8101908080359060200190929190505050613a66565b005b6110ed600480360360208110156110c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c25565b005b6111316004803603602081101561110557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ce3565b005b61113b613d69565b6040518082815260200191505060405180910390f35b611159613e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111a3613e89565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111ed613f33565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611237613fdd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561135d5780601f106113325761010080835404028352916020019161135d565b820191906000526020600020905b81548152906001019060200180831161134057829003601f168201915b5050505050905090565b601260009054906101000a900460ff1681565b600061138e611387614003565b848461400b565b6001905092915050565b6113a06129c4565b611412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0360405160405180910390a250565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561155157600080fd5b505afa158015611565573d6000803e3d6000fd5b505050506040513d602081101561157b57600080fd5b8101908080519060200190929190505050905090565b60095481565b6000600254905090565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561160c57600080fd5b505afa158015611620573d6000803e3d6000fd5b505050506040513d602081101561163657600080fd5b81019080805190602001909291905050509050611717633b9aca008273ffffffffffffffffffffffffffffffffffffffff1663c540148e866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116ce57600080fd5b505afa1580156116e2573d6000803e3d6000fd5b505050506040513d60208110156116f857600080fd5b810190808051906020019092919050505061420290919063ffffffff16565b915050919050565b600061172c84848461424c565b6117ed84611738614003565b6117e88560405180606001604052806028815260200161562660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061179e614003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b61400b565b600190509392505050565b6000611825600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115a1565b905090565b6118326129c4565b6118a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a250565b61194a6129c4565b6119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b611a1f6129c4565b611a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060149054906101000a900460ff1615611ac6576000601060146101000a81548160ff021916908315150217905550611ae2565b6001601060146101000a81548160ff0219169083151502179055505b565b6000611b8d611af1614003565b84611b888560016000611b02614003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c290919063ffffffff16565b61400b565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611bf56129c4565b611c67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611cd8600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128fd565b905090565b6000611d75622014808373ffffffffffffffffffffffffffffffffffffffff1663ae9d70b06040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2c57600080fd5b505afa158015611d40573d6000803e3d6000fd5b505050506040513d6020811015611d5657600080fd5b810190808051906020019092919050505061464a90919063ffffffff16565b9050919050565b611d846129c4565b611df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611e67600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cdd565b905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f0757600080fd5b505af1158015611f1b573d6000803e3d6000fd5b5050505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611fcd57600080fd5b505af1158015611fe1573d6000803e3d6000fd5b505050506040513d6020811015611ff757600080fd5b81019080805190602001909291905050501161207b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f46554c4352554d3a207769746864726177206661696c6564000000000000000081525060200191505060405180910390fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156120f557600080fd5b505af1158015612109573d6000803e3d6000fd5b505050506040513d602081101561211f57600080fd5b8101908080519060200190929190505050146121a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f434f4d504f554e443a207769746864726177206661696c65640000000000000081525060200191505060405180910390fd5b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121d46129c4565b612246576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561232b57600080fd5b505afa15801561233f573d6000803e3d6000fd5b505050506040513d602081101561235557600080fd5b8101908080519060200190929190505050905090565b612373613e89565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018261ffff1681526020019350505050600060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006124e0612498612da6565b6124d26124a3613061565b6124c46124ae613d69565b6124b6612f54565b6145c290919063ffffffff16565b6145c290919063ffffffff16565b6145c290919063ffffffff16565b905090565b6124ed6129c4565b61255f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6126286129c4565b61269a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006126e8612d17565b9050601260009054906101000a900460ff16600381111561270557fe5b81600381111561271157fe5b1461271f5761271e6146d0565b5b6000612729612da6565b11156127c95760038081111561273b57fe5b81600381111561274757fe5b14156127625761275d612758612da6565b6127ef565b6127c8565b6001600381111561276f57fe5b81600381111561277b57fe5b14156127965761279161278c612da6565b613a66565b6127c7565b600260038111156127a357fe5b8160038111156127af57fe5b14156127c6576127c56127c0612da6565b61236b565b5b5b5b5b80601260006101000a81548160ff021916908360038111156127e757fe5b021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561289857600080fd5b505af11580156128ac573d6000803e3d6000fd5b505050506040513d60208110156128c257600080fd5b81019080805190602001909291905050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061299360648373ffffffffffffffffffffffffffffffffffffffff166309ec6b6b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b810190808051906020019092919050505061420290919063ffffffff16565b9050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a07614003565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b612a2b6129c4565b612a9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b795780601f10612b4e57610100808354040283529160200191612b79565b820191906000526020600020905b815481529060010190602001808311612b5c57829003601f168201915b5050505050905090565b612c12600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661472c9092919063ffffffff16565b612c86612c1d613f33565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661472c9092919063ffffffff16565b612d15600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661472c9092919063ffffffff16565b565b600080612d22611e3a565b90506000612d2e6117f8565b90506000612d3a611cab565b9050600080905080841115612d4d578390505b80821115612d59578190505b80831115612d65578290505b600080905084821415612d7b5760019050612d9b565b82821415612d8c5760039050612d9a565b83821415612d9957600290505b5b5b809550505050505090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e4757600080fd5b505afa158015612e5b573d6000803e3d6000fd5b505050506040513d6020811015612e7157600080fd5b8101908080519060200190929190505050905090565b6000612f4a612e94614003565b84612f45856040518060600160405280602581526020016156f76025913960016000612ebe614003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b61400b565b6001905092915050565b600080612f5f61228a565b9050600081111561303c57613039670de0b6b3a764000061302b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015612fe157600080fd5b505afa158015612ff5573d6000803e3d6000fd5b505050506040513d602081101561300b57600080fd5b81019080805190602001909291905050508461464a90919063ffffffff16565b61420290919063ffffffff16565b90505b8091505090565b6000613057613050614003565b848461424c565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561310257600080fd5b505afa158015613116573d6000803e3d6000fd5b505050506040513d602081101561312c57600080fd5b8101908080519060200190929190505050905090565b60016006600082825401925050819055506000600654905061316261248b565b6009819055506131b7333085600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661494c909392919063ffffffff16565b600082905060006131c6612da6565b1180156131e6575060001515601060149054906101000a900460ff161515145b15613339576000811415613201576131fc6126de565b613338565b600181141561326957600060019050601260009054906101000a900460ff16600381111561322b57fe5b81600381111561323757fe5b14613252576132446146d0565b61324d81614a52565b613263565b61326261325d612da6565b613a66565b5b50613337565b60028114156132d157600060039050601260009054906101000a900460ff16600381111561329357fe5b81600381111561329f57fe5b146132ba576132ac6146d0565b6132b581614a52565b6132cb565b6132ca6132c5612da6565b6127ef565b5b50613336565b600381141561333557600060029050601260009054906101000a900460ff1660038111156132fb57fe5b81600381111561330757fe5b14613322576133146146d0565b61331d81614a52565b613333565b61333261332d612da6565b61236b565b5b505b5b5b5b5b6000809050600060095414156133585784905084600981905550613384565b6133816009546133736002548861464a90919063ffffffff16565b61420290919063ffffffff16565b90505b61338c61248b565b60098190555061339c3382614b22565b6133dc601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133d76011548461420290919063ffffffff16565b614b22565b50506006548114613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b505050565b600160066000828254019250508190555060006006549050600082116134e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f7769746864726177206d7573742062652067726561746572207468616e20300081525060200191505060405180910390fd5b60006134f333612443565b90508083111561356b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b61357361248b565b60098190555060006135a46002546135968660095461464a90919063ffffffff16565b61420290919063ffffffff16565b905061362e846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061368584600254614cdd90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a36000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561379257600080fd5b505afa1580156137a6573d6000803e3d6000fd5b505050506040513d60208110156137bc57600080fd5b810190808051906020019092919050505090506000601260009054906101000a900460ff1690508282101561384b576137f3612d17565b9050601260009054906101000a900460ff16600381111561381057fe5b81600381111561381c57fe5b1461382e576138296146d0565b61384a565b6138496138448385614cdd90919063ffffffff16565b614d27565b5b5b6138983384600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e4e9092919063ffffffff16565b601260009054906101000a900460ff1660038111156138b357fe5b8160038111156138bf57fe5b146138ce576138cd81614a52565b5b6138d661248b565b600981905550505050506006548114613957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6139ea6129c4565b613a5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b3157600080fd5b505af1158015613b45573d6000803e3d6000fd5b505050506040513d6020811015613b5b57600080fd5b8101908080519060200190929190505050506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015613be457600080fd5b505af1158015613bf8573d6000803e3d6000fd5b505050506040513d6020811015613c0e57600080fd5b810190808051906020019092919050505090505050565b613c2d6129c4565b613c9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613ceb6129c4565b613d5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613d6681614f1f565b50565b600080613d746114b0565b90506000811115613e5c57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613e1e57600080fd5b505afa158015613e32573d6000803e3d6000fd5b505050506040513d6020811015613e4857600080fd5b810190808051906020019092919050505090505b8091505090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613ef357600080fd5b505afa158015613f07573d6000803e3d6000fd5b505050506040513d6020811015613f1d57600080fd5b8101908080519060200190929190505050905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015613f9d57600080fd5b505afa158015613fb1573d6000803e3d6000fd5b505050506040513d6020811015613fc757600080fd5b8101908080519060200190929190505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156736024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155bd6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061424483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615065565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156142d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061564e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155746023913960400191505060405180910390fd5b6143c3816040518060600160405280602681526020016155df602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614456816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906145af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614574578082015181840152602081019050614559565b50505050905090810190601f1680156145a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015614640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561465d57600090506146ca565b600082840290508284828161466e57fe5b04146146c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156056021913960400191505060405180910390fd5b809150505b92915050565b60006146da61228a565b905060008111156146ef576146ee8161207e565b5b6146f76114b0565b9050600081111561470c5761470b81611f22565b5b614714613061565b905060008111156147295761472881611e92565b5b50565b6000811480614826575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156147e957600080fd5b505afa1580156147fd573d6000803e3d6000fd5b505050506040513d602081101561481357600080fd5b8101908080519060200190929190505050145b61487b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806156c16036913960400191505060405180910390fd5b614947838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061512b565b505050565b614a4c848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061512b565b50505050565b6000614a5c612da6565b1115614afc57600380811115614a6e57fe5b816003811115614a7a57fe5b1415614a9557614a90614a8b612da6565b6127ef565b614afb565b60016003811115614aa257fe5b816003811115614aae57fe5b1415614ac957614ac4614abf612da6565b613a66565b614afa565b60026003811115614ad657fe5b816003811115614ae257fe5b1415614af957614af8614af3612da6565b61236b565b5b5b5b5b80601260006101000a81548160ff02191690836003811115614b1a57fe5b021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b614bda816002546145c290919063ffffffff16565b600281905550614c31816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000614d1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614502565b905092915050565b60016003811115614d3457fe5b601260009054906101000a900460ff166003811115614d4f57fe5b1415614d5f57614d5e81615376565b5b60026003811115614d6c57fe5b601260009054906101000a900460ff166003811115614d8757fe5b1415614e145780614d96613061565b1015614e0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b614e1381611e92565b5b600380811115614e2057fe5b601260009054906101000a900460ff166003811115614e3b57fe5b1415614e4b57614e4a8161544f565b5b50565b614f1a838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061512b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155976026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290615111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156150d65780820151818401526020810190506150bb565b50505050905090810190601f1680156151035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161511d57fe5b049050809150509392505050565b61514a8273ffffffffffffffffffffffffffffffffffffffff16615528565b6151bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061520b57805182526020820191506020810190506020830392506151e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461526d576040519150601f19603f3d011682016040523d82523d6000602084013e615272565b606091505b5091509150816152ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156153705780806020019051602081101561530957600080fd5b810190808051906020019092919050505061536f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615697602a913960400191505060405180910390fd5b5b50505050565b600061538061228a565b9050600061538c612f54565b905082811015615404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b600061543e600161543084615422888861464a90919063ffffffff16565b61420290919063ffffffff16565b6145c290919063ffffffff16565b90506154498161207e565b50505050565b60006154596114b0565b90506000615465613d69565b9050828110156154dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b60006155176001615509846154fb888861464a90919063ffffffff16565b61420290919063ffffffff16565b6145c290919063ffffffff16565b905061552281611f22565b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801561556a5750808214155b9250505091905056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820b14dc0d12da22c8c8072e3944cdeaa512d58d30f651d6d72f423de114e78309d64736f6c634300050c00325361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103ba5760003560e01c806370a08231116101f4578063a457c2d71161011a578063e849d659116100ad578063f69e20461161007c578063f69e204614611151578063f7c1ec771461119b578063f82ce27d146111e5578063fc0c546a1461122f576103ba565b8063e849d6591461107d578063f11db064146110ab578063f2fde38b146110ef578063f5a41dea14611133576103ba565b8063d87aa643116100e9578063d87aa64314610f71578063db006a7514610fa9578063dd62ed3e14610fd7578063e3f2183f1461104f576103ba565b8063a457c2d714610e69578063a728797114610ecf578063a9059cbb14610eed578063cf8ca42614610f53576103ba565b806383deca3d1161019257806395d89b411161016157806395d89b4114610d9257806399b71d5c14610e15578063a160176d14610e1f578063a30955af14610e4b576103ba565b806383deca3d14610c8a5780638da5cb5b14610ce25780638f32d59b14610d2c57806395cc049a14610d4e576103ba565b806379bc31eb116101ce57806379bc31eb14610bc45780637d7c2a1c14610c085780638124955c14610c12578063819faf7b14610c40576103ba565b806370a0823114610b445780637137ef9914610b9c578063715018a614610bba576103ba565b8063378aaea4116102e4578063537540e11161027757806358782c211161024657806358782c2114610a6a5780635c414d5714610ab457806361c1ec5514610af857806365aab74914610b16576103ba565b8063537540e11461099657806356cc9378146109e05780635762bbd914610a0e57806357b8754314610a3c576103ba565b806343e8b0be116102b357806343e8b0be146108be57806344e258b4146108dc57806346205e74146109345780634d2cd8ab14610978576103ba565b8063378aaea4146107ae57806339509351146107b85780633af32abf1461081e5780633f5475381461087a576103ba565b806316f0115b1161035c578063243d66591161032b578063243d6659146106e457806329092d0e146107025780632cefc31214610746578063313ce5671461078a576103ba565b806316f0115b146105ca57806318160ddd146105e8578063192a98611461060657806323b872dd1461065e576103ba565b8063085d488311610398578063085d4883146104d6578063095ea7b3146105025780630a3b0a4f146105685780630eb2a267146105ac576103ba565b806302d8325c146103bf57806306a3fe591461040957806306fdde0314610453575b600080fd5b6103c7611279565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61041161129f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61045b6112c5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561049b578082015181840152602081019050610480565b50505050905090810190601f1680156104c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104de611367565b604051808260038111156104ee57fe5b60ff16815260200191505060405180910390f35b61054e6004803603604081101561051857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061137a565b604051808215151515815260200191505060405180910390f35b6105aa6004803603602081101561057e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611398565b005b6105b46114b0565b6040518082815260200191505060405180910390f35b6105d2611591565b6040518082815260200191505060405180910390f35b6105f0611597565b6040518082815260200191505060405180910390f35b6106486004803603602081101561061c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a1565b6040518082815260200191505060405180910390f35b6106ca6004803603606081101561067457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061171f565b604051808215151515815260200191505060405180910390f35b6106ec6117f8565b6040518082815260200191505060405180910390f35b6107446004803603602081101561071857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b005b6107886004803603602081101561075c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611942565b005b610792611a00565b604051808260ff1660ff16815260200191505060405180910390f35b6107b6611a17565b005b610804600480360360408110156107ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ae4565b604051808215151515815260200191505060405180910390f35b6108606004803603602081101561083457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b97565b604051808215151515815260200191505060405180910390f35b6108bc6004803603602081101561089057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bed565b005b6108c6611cab565b6040518082815260200191505060405180910390f35b61091e600480360360208110156108f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdd565b6040518082815260200191505060405180910390f35b6109766004803603602081101561094a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d7c565b005b610980611e3a565b6040518082815260200191505060405180910390f35b61099e611e6c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a0c600480360360208110156109f657600080fd5b8101908080359060200190929190505050611e92565b005b610a3a60048036036020811015610a2457600080fd5b8101908080359060200190929190505050611f22565b005b610a6860048036036020811015610a5257600080fd5b810190808035906020019092919050505061207e565b005b610a726121a6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610af660048036036020811015610aca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121cc565b005b610b0061228a565b6040518082815260200191505060405180910390f35b610b4260048036036020811015610b2c57600080fd5b810190808035906020019092919050505061236b565b005b610b8660048036036020811015610b5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612443565b6040518082815260200191505060405180910390f35b610ba461248b565b6040518082815260200191505060405180910390f35b610bc26124e5565b005b610c0660048036036020811015610bda57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612620565b005b610c106126de565b005b610c3e60048036036020811015610c2857600080fd5b81019080803590602001909291905050506127ef565b005b610c486128d7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ccc60048036036020811015610ca057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128fd565b6040518082815260200191505060405180910390f35b610cea61299a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d346129c4565b604051808215151515815260200191505060405180910390f35b610d9060048036036020811015610d6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a23565b005b610d9a612ae1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dda578082015181840152602081019050610dbf565b50505050905090810190601f168015610e075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e1d612b83565b005b610e27612d17565b60405180826003811115610e3757fe5b60ff16815260200191505060405180910390f35b610e53612da6565b6040518082815260200191505060405180910390f35b610eb560048036036040811015610e7f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e87565b604051808215151515815260200191505060405180910390f35b610ed7612f54565b6040518082815260200191505060405180910390f35b610f3960048036036040811015610f0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613043565b604051808215151515815260200191505060405180910390f35b610f5b613061565b6040518082815260200191505060405180910390f35b610fa760048036036040811015610f8757600080fd5b810190808035906020019092919080359060200190929190505050613142565b005b610fd560048036036020811015610fbf57600080fd5b810190808035906020019092919050505061345a565b005b61103960048036036040811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061395b565b6040518082815260200191505060405180910390f35b61107b6004803603602081101561106557600080fd5b81019080803590602001909291905050506139e2565b005b6110a96004803603602081101561109357600080fd5b8101908080359060200190929190505050613a66565b005b6110ed600480360360208110156110c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c25565b005b6111316004803603602081101561110557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ce3565b005b61113b613d69565b6040518082815260200191505060405180910390f35b611159613e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111a3613e89565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111ed613f33565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611237613fdd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561135d5780601f106113325761010080835404028352916020019161135d565b820191906000526020600020905b81548152906001019060200180831161134057829003601f168201915b5050505050905090565b601260009054906101000a900460ff1681565b600061138e611387614003565b848461400b565b6001905092915050565b6113a06129c4565b611412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fa850ae9193f515cbae8d35e8925bd2be26627fc91bce650b8652ed254e9cab0360405160405180910390a250565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561155157600080fd5b505afa158015611565573d6000803e3d6000fd5b505050506040513d602081101561157b57600080fd5b8101908080519060200190929190505050905090565b60095481565b6000600254905090565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801561160c57600080fd5b505afa158015611620573d6000803e3d6000fd5b505050506040513d602081101561163657600080fd5b81019080805190602001909291905050509050611717633b9aca008273ffffffffffffffffffffffffffffffffffffffff1663c540148e866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116ce57600080fd5b505afa1580156116e2573d6000803e3d6000fd5b505050506040513d60208110156116f857600080fd5b810190808051906020019092919050505061420290919063ffffffff16565b915050919050565b600061172c84848461424c565b6117ed84611738614003565b6117e88560405180606001604052806028815260200161562660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061179e614003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b61400b565b600190509392505050565b6000611825600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166115a1565b905090565b6118326129c4565b6118a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fcdd2e9b91a56913d370075169cefa1602ba36be5301664f752192bb1709df75760405160405180910390a250565b61194a6129c4565b6119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b611a1f6129c4565b611a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601060149054906101000a900460ff1615611ac6576000601060146101000a81548160ff021916908315150217905550611ae2565b6001601060146101000a81548160ff0219169083151502179055505b565b6000611b8d611af1614003565b84611b888560016000611b02614003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c290919063ffffffff16565b61400b565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611bf56129c4565b611c67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611cd8600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128fd565b905090565b6000611d75622014808373ffffffffffffffffffffffffffffffffffffffff1663ae9d70b06040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2c57600080fd5b505afa158015611d40573d6000803e3d6000fd5b505050506040513d6020811015611d5657600080fd5b810190808051906020019092919050505061464a90919063ffffffff16565b9050919050565b611d846129c4565b611df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611e67600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cdd565b905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f0757600080fd5b505af1158015611f1b573d6000803e3d6000fd5b5050505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611fcd57600080fd5b505af1158015611fe1573d6000803e3d6000fd5b505050506040513d6020811015611ff757600080fd5b81019080805190602001909291905050501161207b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f46554c4352554d3a207769746864726177206661696c6564000000000000000081525060200191505060405180910390fd5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156120f557600080fd5b505af1158015612109573d6000803e3d6000fd5b505050506040513d602081101561211f57600080fd5b8101908080519060200190929190505050146121a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f434f4d504f554e443a207769746864726177206661696c65640000000000000081525060200191505060405180910390fd5b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121d46129c4565b612246576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561232b57600080fd5b505afa15801561233f573d6000803e3d6000fd5b505050506040513d602081101561235557600080fd5b8101908080519060200190929190505050905090565b612373613e89565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018261ffff1681526020019350505050600060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006124e0612498612da6565b6124d26124a3613061565b6124c46124ae613d69565b6124b6612f54565b6145c290919063ffffffff16565b6145c290919063ffffffff16565b6145c290919063ffffffff16565b905090565b6124ed6129c4565b61255f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6126286129c4565b61269a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006126e8612d17565b9050601260009054906101000a900460ff16600381111561270557fe5b81600381111561271157fe5b1461271f5761271e6146d0565b5b6000612729612da6565b11156127c95760038081111561273b57fe5b81600381111561274757fe5b14156127625761275d612758612da6565b6127ef565b6127c8565b6001600381111561276f57fe5b81600381111561277b57fe5b14156127965761279161278c612da6565b613a66565b6127c7565b600260038111156127a357fe5b8160038111156127af57fe5b14156127c6576127c56127c0612da6565b61236b565b5b5b5b5b80601260006101000a81548160ff021916908360038111156127e757fe5b021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561289857600080fd5b505af11580156128ac573d6000803e3d6000fd5b505050506040513d60208110156128c257600080fd5b81019080805190602001909291905050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061299360648373ffffffffffffffffffffffffffffffffffffffff166309ec6b6b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b810190808051906020019092919050505061420290919063ffffffff16565b9050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a07614003565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b612a2b6129c4565b612a9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b795780601f10612b4e57610100808354040283529160200191612b79565b820191906000526020600020905b815481529060010190602001808311612b5c57829003601f168201915b5050505050905090565b612c12600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661472c9092919063ffffffff16565b612c86612c1d613f33565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661472c9092919063ffffffff16565b612d15600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661472c9092919063ffffffff16565b565b600080612d22611e3a565b90506000612d2e6117f8565b90506000612d3a611cab565b9050600080905080841115612d4d578390505b80821115612d59578190505b80831115612d65578290505b600080905084821415612d7b5760019050612d9b565b82821415612d8c5760039050612d9a565b83821415612d9957600290505b5b5b809550505050505090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612e4757600080fd5b505afa158015612e5b573d6000803e3d6000fd5b505050506040513d6020811015612e7157600080fd5b8101908080519060200190929190505050905090565b6000612f4a612e94614003565b84612f45856040518060600160405280602581526020016156f76025913960016000612ebe614003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b61400b565b6001905092915050565b600080612f5f61228a565b9050600081111561303c57613039670de0b6b3a764000061302b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b158015612fe157600080fd5b505afa158015612ff5573d6000803e3d6000fd5b505050506040513d602081101561300b57600080fd5b81019080805190602001909291905050508461464a90919063ffffffff16565b61420290919063ffffffff16565b90505b8091505090565b6000613057613050614003565b848461424c565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561310257600080fd5b505afa158015613116573d6000803e3d6000fd5b505050506040513d602081101561312c57600080fd5b8101908080519060200190929190505050905090565b60016006600082825401925050819055506000600654905061316261248b565b6009819055506131b7333085600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661494c909392919063ffffffff16565b600082905060006131c6612da6565b1180156131e6575060001515601060149054906101000a900460ff161515145b15613339576000811415613201576131fc6126de565b613338565b600181141561326957600060019050601260009054906101000a900460ff16600381111561322b57fe5b81600381111561323757fe5b14613252576132446146d0565b61324d81614a52565b613263565b61326261325d612da6565b613a66565b5b50613337565b60028114156132d157600060039050601260009054906101000a900460ff16600381111561329357fe5b81600381111561329f57fe5b146132ba576132ac6146d0565b6132b581614a52565b6132cb565b6132ca6132c5612da6565b6127ef565b5b50613336565b600381141561333557600060029050601260009054906101000a900460ff1660038111156132fb57fe5b81600381111561330757fe5b14613322576133146146d0565b61331d81614a52565b613333565b61333261332d612da6565b61236b565b5b505b5b5b5b5b6000809050600060095414156133585784905084600981905550613384565b6133816009546133736002548861464a90919063ffffffff16565b61420290919063ffffffff16565b90505b61338c61248b565b60098190555061339c3382614b22565b6133dc601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133d76011548461420290919063ffffffff16565b614b22565b50506006548114613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b505050565b600160066000828254019250508190555060006006549050600082116134e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f7769746864726177206d7573742062652067726561746572207468616e20300081525060200191505060405180910390fd5b60006134f333612443565b90508083111561356b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b61357361248b565b60098190555060006135a46002546135968660095461464a90919063ffffffff16565b61420290919063ffffffff16565b905061362e846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061368584600254614cdd90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a36000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561379257600080fd5b505afa1580156137a6573d6000803e3d6000fd5b505050506040513d60208110156137bc57600080fd5b810190808051906020019092919050505090506000601260009054906101000a900460ff1690508282101561384b576137f3612d17565b9050601260009054906101000a900460ff16600381111561381057fe5b81600381111561381c57fe5b1461382e576138296146d0565b61384a565b6138496138448385614cdd90919063ffffffff16565b614d27565b5b5b6138983384600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614e4e9092919063ffffffff16565b601260009054906101000a900460ff1660038111156138b357fe5b8160038111156138bf57fe5b146138ce576138cd81614a52565b5b6138d661248b565b600981905550505050506006548114613957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6139ea6129c4565b613a5c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b3157600080fd5b505af1158015613b45573d6000803e3d6000fd5b505050506040513d6020811015613b5b57600080fd5b8101908080519060200190929190505050506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015613be457600080fd5b505af1158015613bf8573d6000803e3d6000fd5b505050506040513d6020811015613c0e57600080fd5b810190808051906020019092919050505090505050565b613c2d6129c4565b613c9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613ceb6129c4565b613d5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613d6681614f1f565b50565b600080613d746114b0565b90506000811115613e5c57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613e1e57600080fd5b505afa158015613e32573d6000803e3d6000fd5b505050506040513d6020811015613e4857600080fd5b810190808051906020019092919050505090505b8091505090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613ef357600080fd5b505afa158015613f07573d6000803e3d6000fd5b505050506040513d6020811015613f1d57600080fd5b8101908080519060200190929190505050905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015613f9d57600080fd5b505afa158015613fb1573d6000803e3d6000fd5b505050506040513d6020811015613fc757600080fd5b8101908080519060200190929190505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156736024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806155bd6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600061424483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615065565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156142d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061564e6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155746023913960400191505060405180910390fd5b6143c3816040518060600160405280602681526020016155df602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145029092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614456816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906145af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614574578082015181840152602081019050614559565b50505050905090810190601f1680156145a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015614640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561465d57600090506146ca565b600082840290508284828161466e57fe5b04146146c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156056021913960400191505060405180910390fd5b809150505b92915050565b60006146da61228a565b905060008111156146ef576146ee8161207e565b5b6146f76114b0565b9050600081111561470c5761470b81611f22565b5b614714613061565b905060008111156147295761472881611e92565b5b50565b6000811480614826575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156147e957600080fd5b505afa1580156147fd573d6000803e3d6000fd5b505050506040513d602081101561481357600080fd5b8101908080519060200190929190505050145b61487b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806156c16036913960400191505060405180910390fd5b614947838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061512b565b505050565b614a4c848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061512b565b50505050565b6000614a5c612da6565b1115614afc57600380811115614a6e57fe5b816003811115614a7a57fe5b1415614a9557614a90614a8b612da6565b6127ef565b614afb565b60016003811115614aa257fe5b816003811115614aae57fe5b1415614ac957614ac4614abf612da6565b613a66565b614afa565b60026003811115614ad657fe5b816003811115614ae257fe5b1415614af957614af8614af3612da6565b61236b565b5b5b5b5b80601260006101000a81548160ff02191690836003811115614b1a57fe5b021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b614bda816002546145c290919063ffffffff16565b600281905550614c31816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000614d1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614502565b905092915050565b60016003811115614d3457fe5b601260009054906101000a900460ff166003811115614d4f57fe5b1415614d5f57614d5e81615376565b5b60026003811115614d6c57fe5b601260009054906101000a900460ff166003811115614d8757fe5b1415614e145780614d96613061565b1015614e0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b614e1381611e92565b5b600380811115614e2057fe5b601260009054906101000a900460ff166003811115614e3b57fe5b1415614e4b57614e4a8161544f565b5b50565b614f1a838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061512b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614fa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155976026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290615111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156150d65780820151818401526020810190506150bb565b50505050905090810190601f1680156151035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161511d57fe5b049050809150509392505050565b61514a8273ffffffffffffffffffffffffffffffffffffffff16615528565b6151bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061520b57805182526020820191506020810190506020830392506151e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461526d576040519150601f19603f3d011682016040523d82523d6000602084013e615272565b606091505b5091509150816152ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156153705780806020019051602081101561530957600080fd5b810190808051906020019092919050505061536f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615697602a913960400191505060405180910390fd5b5b50505050565b600061538061228a565b9050600061538c612f54565b905082811015615404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b600061543e600161543084615422888861464a90919063ffffffff16565b61420290919063ffffffff16565b6145c290919063ffffffff16565b90506154498161207e565b50505050565b60006154596114b0565b90506000615465613d69565b9050828110156154dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b60006155176001615509846154fb888861464a90919063ffffffff16565b61420290919063ffffffff16565b6145c290919063ffffffff16565b905061552281611f22565b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801561556a5750808214155b9250505091905056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820b14dc0d12da22c8c8072e3944cdeaa512d58d30f651d6d72f423de114e78309d64736f6c634300050c0032
Deployed Bytecode Sourcemap
14823:11572:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14823:11572:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15184:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15118:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13846:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;13846:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15346:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10866:152;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10866:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14410:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14410:135:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17505:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14995:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10349:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20130:233;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20130:233:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11024:304;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11024:304:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20041:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14553:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14553:143:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16730:78;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16730:78:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14028:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16422:142;;;:::i;:::-;;11334:210;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11334:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14704:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14704:112:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16914:76;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16914:76:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;19935:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19555:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19555:135:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16567:79;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16567:79:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;19693:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15149:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19091:84;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19091:84:0;;;;;;;;;;;;;;;;;:::i;:::-;;18948:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18948:140:0;;;;;;;;;;;;;;;;;:::i;:::-;;19178:338;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19178:338:0;;;;;;;;;;;;;;;;;:::i;:::-;;15069:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16811:100;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16811:100:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17387:115;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18440:190;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18440:190:0;;;;;;;;;;;;;;;;;:::i;:::-;;10446:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10446:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20802:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1748:140;;;:::i;:::-;;17164:81;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17164:81:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;21553:446;;;:::i;:::-;;18199:238;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18199:238:0;;;;;;;;;;;;;;;;;:::i;:::-;;15095:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19804:128;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19804:128:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;937:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1303:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17079:82;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17079:82:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;13935:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;13935:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15911:203;;;:::i;:::-;;20994:553;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17275:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11550:261;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11550:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17736:237;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10562:158;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10562:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17621:112;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22004:1514;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22004:1514:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23524:1026;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23524:1026:0;;;;;;;;;;;;;;;;;:::i;:::-;;10726:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10726:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16649:78;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16649:78:0;;;;;;;;;;;;;;;;;:::i;:::-;;18633:284;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18633:284:0;;;;;;;;;;;;;;;;;:::i;:::-;;16993:83;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16993:83:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;2043:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2043:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17976:194;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15042:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16120:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16255:134;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15018:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15184:23;;;;;;;;;;;;;:::o;15118:24::-;;;;;;;;;;;;;:::o;13846:83::-;13883:13;13916:5;13909:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13846:83;:::o;15346:36::-;;;;;;;;;;;;;:::o;10866:152::-;10932:4;10949:39;10958:12;:10;:12::i;:::-;10972:7;10981:6;10949:8;:39::i;:::-;11006:4;10999:11;;10866:152;;;;:::o;14410:135::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14491:4;14469:9;:19;14479:8;14469:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;14528:8;14511:26;;;;;;;;;;;;14410:135;:::o;17505:113::-;17552:7;17580;;;;;;;;;;;17573:25;;;17607:4;17573:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17573:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17573:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17573:40:0;;;;;;;;;;;;;;;;17566:47;;17505:113;:::o;14995:19::-;;;;:::o;10349:91::-;10393:7;10420:12;;10413:19;;10349:91;:::o;20130:233::-;20186:7;20200:20;20268:4;;;;;;;;;;;20239:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20239:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20239:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20239:55:0;;;;;;;;;;;;;;;;20200:95;;20307:51;20354:3;20307:4;:35;;;20343:5;20307:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20307:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20307:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20307:42:0;;;;;;;;;;;;;;;;:46;;:51;;;;:::i;:::-;20300:58;;;20130:233;;;:::o;11024:304::-;11113:4;11130:36;11140:6;11148:9;11159:6;11130:9;:36::i;:::-;11177:121;11186:6;11194:12;:10;:12::i;:::-;11208:89;11246:6;11208:89;;;;;;;;;;;;;;;;;:11;:19;11220:6;11208:19;;;;;;;;;;;;;;;:33;11228:12;:10;:12::i;:::-;11208:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11177:8;:121::i;:::-;11316:4;11309:11;;11024:304;;;;;:::o;20041:86::-;20084:7;20105:17;20116:5;;;;;;;;;;;20105:10;:17::i;:::-;20098:24;;20041:86;:::o;14553:143::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14637:5;14615:9;:19;14625:8;14615:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;14679:8;14658:30;;;;;;;;;;;;14553:143;:::o;16730:78::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16797:6;16789:5;;:14;;;;;;;;;;;;;;;;;;16730:78;:::o;14028:83::-;14069:5;14094:9;;;;;;;;;;;14087:16;;14028:83;:::o;16422:142::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16469:6;;;;;;;;;;;16466:94;;;16497:5;16488:6;;:14;;;;;;;;;;;;;;;;;;16466:94;;;16547:4;16538:6;;:13;;;;;;;;;;;;;;;;;;16466:94;16422:142::o;11334:210::-;11414:4;11431:83;11440:12;:10;:12::i;:::-;11454:7;11463:50;11502:10;11463:11;:25;11475:12;:10;:12::i;:::-;11463:25;;;;;;;;;;;;;;;:34;11489:7;11463:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11431:8;:83::i;:::-;11532:4;11525:11;;11334:210;;;;:::o;14704:112::-;14765:4;14789:9;:19;14799:8;14789:19;;;;;;;;;;;;;;;;;;;;;;;;;14782:26;;14704:112;;;:::o;16914:76::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16979:6;16972:4;;:13;;;;;;;;;;;;;;;;;;16914:76;:::o;19935:91::-;19978:7;19999:22;20013:7;;;;;;;;;;;19999:13;:22::i;:::-;19992:29;;19935:91;:::o;19555:135::-;19615:7;19636:49;19677:7;19645:5;19636:34;;;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19636:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19636:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19636:36:0;;;;;;;;;;;;;;;;:40;;:49;;;;:::i;:::-;19629:56;;19555:135;;;:::o;16567:79::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16637:4;16626:8;;:15;;;;;;;;;;;;;;;;;;16567:79;:::o;19693:93::-;19736:7;19757:24;19772:8;;;;;;;;;;;19757:14;:24::i;:::-;19750:31;;19693:93;:::o;15149:31::-;;;;;;;;;;;;;:::o;19091:84::-;19145:9;;;;;;;;;;;19138:24;;;19163:6;19138:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19138:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19138:32:0;;;;19091:84;:::o;18948:140::-;19053:1;19014:7;;;;;;;;;;;19006:21;;;19036:4;19043:6;19006:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19006:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19006:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19006:44:0;;;;;;;;;;;;;;;;:48;18998:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18948:140;:::o;19178:338::-;19480:1;19452:8;;;;;;;;;;;19443:25;;;19469:6;19443:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19443:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19443:33:0;;;;;;;;;;;;;;;;:38;19435:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19178:338;:::o;15069:22::-;;;;;;;;;;;;;:::o;16811:100::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16900:6;16881:16;;:25;;;;;;;;;;;;;;;;;;16811:100;:::o;17387:115::-;17435:7;17463:8;;;;;;;;;;;17456:26;;;17491:4;17456:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17456:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17456:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17456:41:0;;;;;;;;;;;;;;;;17449:48;;17387:115;:::o;18440:190::-;18589:9;:7;:9::i;:::-;18584:23;;;18608:5;;;;;;;;;;;18615:6;18623:1;18584:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18584:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18584:41:0;;;;18440:190;:::o;10446:110::-;10503:7;10530:9;:18;10540:7;10530:18;;;;;;;;;;;;;;;;10523:25;;10446:110;;;:::o;20802:186::-;20855:4;20873:110;20968:14;:12;:14::i;:::-;20873:84;20943:13;:11;:13::i;:::-;20873:59;20908:23;:21;:23::i;:::-;20873:24;:22;:24::i;:::-;:34;;:59;;;;:::i;:::-;:69;;:84;;;;:::i;:::-;:94;;:110;;;;:::i;:::-;20866:117;;20802:186;:::o;1748:140::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1847:1;1810:40;;1831:6;;;;;;;;;;;1810:40;;;;;;;;;;;;1878:1;1861:6;;:19;;;;;;;;;;;;;;;;;;1748:140::o;17164:81::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17234:6;17224:7;;:16;;;;;;;;;;;;;;;;;;17164:81;:::o;21553:446::-;21586:18;21607:11;:9;:11::i;:::-;21586:32;;21644:8;;;;;;;;;;;21629:23;;;;;;;;:11;:23;;;;;;;;;21625:58;;21663:14;:12;:14::i;:::-;21625:58;21710:1;21693:14;:12;:14::i;:::-;:18;21689:277;;;21738:14;21723:29;;;;;;;;:11;:29;;;;;;;;;21719:242;;;21761:29;21775:14;:12;:14::i;:::-;21761:13;:29::i;:::-;21719:242;;;21822:15;21807:30;;;;;;;;:11;:30;;;;;;;;;21803:158;;;21846:30;21861:14;:12;:14::i;:::-;21846;:30::i;:::-;21803:158;;;21908:11;21893:26;;;;;;;;:11;:26;;;;;;;;;21889:72;;;21928:26;21939:14;:12;:14::i;:::-;21928:10;:26::i;:::-;21889:72;21803:158;21719:242;21689:277;21983:11;21972:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;21553:446;:::o;18199:238::-;18306:7;;;;;;;;;;;18298:21;;;18328:4;18335:6;18298:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18298:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18298:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18298:44:0;;;;;;;;;;;;;;;;;18199:238;:::o;15095:19::-;;;;;;;;;;;;;:::o;19804:128::-;19862:7;19883:44;19923:3;19891:5;19883:33;;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19883:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19883:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19883:35:0;;;;;;;;;;;;;;;;:39;;:44;;;;:::i;:::-;19876:51;;19804:128;;;:::o;937:79::-;975:7;1002:6;;;;;;;;;;;995:13;;937:79;:::o;1303:94::-;1343:4;1383:6;;;;;;;;;;;1367:22;;:12;:10;:12::i;:::-;:22;;;1360:29;;1303:94;:::o;17079:82::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17150:6;17139:8;;:17;;;;;;;;;;;;;;;;;;17079:82;:::o;13935:87::-;13974:13;14007:7;14000:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13935:87;:::o;15911:203::-;15951:45;15977:8;;;;;;;;;;;15992:2;15958:5;;;;;;;;;;;15951:25;;;;:45;;;;;:::i;:::-;16006:50;16032:13;:11;:13::i;:::-;16052:2;16013:5;;;;;;;;;;;16006:25;;;;:50;;;;;:::i;:::-;16065:44;16091:7;;;;;;;;;;;16105:2;16072:5;;;;;;;;;;;16065:25;;;;:44;;;;;:::i;:::-;15911:203::o;20994:553::-;21036:6;21049:12;21064;:10;:12::i;:::-;21049:27;;21081:12;21096;:10;:12::i;:::-;21081:27;;21113:12;21128;:10;:12::i;:::-;21113:27;;21147:11;21161:1;21147:15;;21178:3;21171:4;:10;21167:39;;;21196:4;21190:10;;21167:39;21221:3;21214:4;:10;21210:39;;;21239:4;21233:10;;21210:39;21264:3;21257:4;:10;21253:39;;;21282:4;21276:10;;21253:39;21298:18;21319:11;21298:32;;21346:4;21339:3;:11;21335:181;;;21372:15;21358:29;;21335:181;;;21410:4;21403:3;:11;21399:117;;;21436:14;21422:28;;21399:117;;;21473:4;21466:3;:11;21462:54;;;21499:11;21485:25;;21462:54;21399:117;21335:181;21531:11;21524:18;;;;;;;20994:553;:::o;17275:109::-;17320:7;17348:5;;;;;;;;;;;17341:23;;;17373:4;17341:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17341:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17341:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17341:38:0;;;;;;;;;;;;;;;;17334:45;;17275:109;:::o;11550:261::-;11635:4;11652:129;11661:12;:10;:12::i;:::-;11675:7;11684:96;11723:15;11684:96;;;;;;;;;;;;;;;;;:11;:25;11696:12;:10;:12::i;:::-;11684:25;;;;;;;;;;;;;;;:34;11710:7;11684:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11652:8;:129::i;:::-;11799:4;11792:11;;11550:261;;;;:::o;17736:237::-;17791:7;17836:9;17848:17;:15;:17::i;:::-;17836:29;;17878:1;17874;:5;17870:86;;;17894:56;17945:4;17894:46;17909:8;;;;;;;;;;;17900:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17900:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17900:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17900:39:0;;;;;;;;;;;;;;;;17894:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;17890:60;;17870:86;17967:1;17960:8;;;17736:237;:::o;10562:158::-;10631:4;10648:42;10658:12;:10;:12::i;:::-;10672:9;10683:6;10648:9;:42::i;:::-;10708:4;10701:11;;10562:158;;;;:::o;17621:112::-;17665:7;17693:9;;;;;;;;;;;17686:27;;;17722:4;17686:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17686:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17686:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17686:42:0;;;;;;;;;;;;;;;;17679:49;;17621:112;:::o;22004:1514::-;2684:1;2667:13;;:18;;;;;;;;;;;2696:20;2719:13;;2696:36;;22091:22;:20;:22::i;:::-;22084:4;:29;;;;22118:66;22149:10;22169:4;22176:7;22125:5;;;;;;;;;;;22118:30;;;;:66;;;;;;:::i;:::-;22230:9;22242:5;22230:17;;22273:1;22256:14;:12;:14::i;:::-;:18;:37;;;;;22288:5;22278:15;;:6;;;;;;;;;;;:15;;;22256:37;22252:904;;;22315:1;22307:4;:9;22304:847;;;22330:11;:9;:11::i;:::-;22304:847;;;22375:1;22367:4;:9;22364:787;;;22390:18;22411:15;22390:36;;22464:8;;;;;;;;;;;22449:23;;;;;;;;:11;:23;;;;;;;;;22445:167;;22485:14;:12;:14::i;:::-;22510:23;22521:11;22510:10;:23::i;:::-;22445:167;;;22571:30;22586:14;:12;:14::i;:::-;22571;:30::i;:::-;22445:167;22364:787;;;;22645:1;22637:4;:9;22634:517;;;22660:18;22681:14;22660:35;;22733:8;;;;;;;;;;;22718:23;;;;;;;;:11;:23;;;;;;;;;22714:166;;22754:14;:12;:14::i;:::-;22779:23;22790:11;22779:10;:23::i;:::-;22714:166;;;22840:29;22854:14;:12;:14::i;:::-;22840:13;:29::i;:::-;22714:166;22634:517;;;;22913:1;22905:4;:9;22902:249;;;22928:18;22949:11;22928:32;;22998:8;;;;;;;;;;;22983:23;;;;;;;;:11;:23;;;;;;;;;22979:163;;23019:14;:12;:14::i;:::-;23044:23;23055:11;23044:10;:23::i;:::-;22979:163;;;23105:26;23116:14;:12;:14::i;:::-;23105:10;:26::i;:::-;22979:163;22902:249;;22634:517;22364:787;22304:847;22252:904;23204:14;23221:1;23204:18;;23245:1;23237:4;;:9;23233:166;;;23272:7;23263:16;;23301:7;23294:4;:14;;;;23233:166;;;23350:37;23382:4;;23351:25;23363:12;;23351:7;:11;;:25;;;;:::i;:::-;23350:31;;:37;;;;:::i;:::-;23341:46;;23233:166;23416:22;:20;:22::i;:::-;23409:4;:29;;;;23449:25;23455:10;23467:6;23449:5;:25::i;:::-;23479:34;23485:8;;;;;;;;;;;23495:17;23506:5;;23495:6;:10;;:17;;;;:::i;:::-;23479:5;:34::i;:::-;2743:1;;2779:13;;2763:12;:29;2755:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22004:1514;;;:::o;23524:1026::-;2684:1;2667:13;;:18;;;;;;;;;;;2696:20;2719:13;;2696:36;;23604:1;23594:7;:11;23586:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23648:15;23666:21;23676:10;23666:9;:21::i;:::-;23648:39;;23711:7;23700;:18;;23692:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23761:22;:20;:22::i;:::-;23754:4;:29;;;;23831:9;23843:37;23867:12;;23844:17;23853:7;23844:4;;:8;;:17;;;;:::i;:::-;23843:23;;:37;;;;:::i;:::-;23831:49;;23956:67;23982:7;23956:67;;;;;;;;;;;;;;;;;:9;:21;23966:10;23956:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;23932:9;:21;23942:10;23932:21;;;;;;;;;;;;;;;:91;;;;24043:25;24060:7;24043:12;;:16;;:25;;;;:::i;:::-;24028:12;:40;;;;24109:1;24080:41;;24089:10;24080:41;;;24113:7;24080:41;;;;;;;;;;;;;;;;;;24152:9;24171:5;;;;;;;;;;;24164:23;;;24196:4;24164:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24164:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24164:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24164:38:0;;;;;;;;;;;;;;;;24152:50;;24207:18;24228:8;;;;;;;;;;;24207:29;;24249:1;24245;:5;24241:153;;;24272:11;:9;:11::i;:::-;24258:25;;24308:8;;;;;;;;;;;24293:23;;;;;;;;:11;:23;;;;;;;;;24289:100;;24325:14;:12;:14::i;:::-;24289:100;;;24359:23;24373:8;24379:1;24373;:5;;:8;;;;:::i;:::-;24359:13;:23::i;:::-;24289:100;24241:153;24400:41;24427:10;24439:1;24407:5;;;;;;;;;;;24400:26;;;;:41;;;;;:::i;:::-;24467:8;;;;;;;;;;;24452:23;;;;;;;;:11;:23;;;;;;;;;24448:64;;24483:23;24494:11;24483:10;:23::i;:::-;24448:64;24523:22;:20;:22::i;:::-;24516:4;:29;;;;2743:1;;;;2779:13;;2763:12;:29;2755:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23524:1026;;:::o;10726:134::-;10798:7;10825:11;:18;10837:5;10825:18;;;;;;;;;;;;;;;:27;10844:7;10825:27;;;;;;;;;;;;;;;;10818:34;;10726:134;;;;:::o;16649:78::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16716:6;16708:5;:14;;;;16649:78;:::o;18633:284::-;18695:5;;;;;;;;;;;18688:21;;;18710:8;;;;;;;;;;;18720:6;18688:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18688:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18688:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18688:39:0;;;;;;;;;;;;;;;;;18780:15;18807:8;;;;;;;;;;;18798:23;;;18822:6;18798:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18798:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18798:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18798:31:0;;;;;;;;;;;;;;;;18780:49;;18633:284;;:::o;16993:83::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17065:6;17053:9;;:18;;;;;;;;;;;;;;;;;;16993:83;:::o;2043:109::-;1149:9;:7;:9::i;:::-;1141:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2116:28;2135:8;2116:18;:28::i;:::-;2043:109;:::o;17976:194::-;18030:7;18044:9;18056:16;:14;:16::i;:::-;18044:28;;18085:1;18081;:5;18077:76;;;18109:7;;;;;;;;;;;18101:31;;;18141:4;18101:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18101:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18101:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18101:46:0;;;;;;;;;;;;;;;;18097:50;;18077:76;18164:1;18157:8;;;17976:194;:::o;15042:23::-;;;;;;;;;;;;;:::o;16120:126::-;16160:7;16216:4;;;;;;;;;;;16187:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16187:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16187:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16187:51:0;;;;;;;;;;;;;;;;16180:58;;16120:126;:::o;16255:134::-;16299:7;16355:4;;;;;;;;;;;16326:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16326:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16326:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16326:55:0;;;;;;;;;;;;;;;;16319:62;;16255:134;:::o;15018:20::-;;;;;;;;;;;;;:::o;141:98::-;186:15;221:10;214:17;;141:98;:::o;12962:338::-;13073:1;13056:19;;:5;:19;;;;13048:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:1;13135:21;;:7;:21;;;;13127:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13238:6;13208:11;:18;13220:5;13208:18;;;;;;;;;;;;;;;:27;13227:7;13208:27;;;;;;;;;;;;;;;:36;;;;13276:7;13260:32;;13269:5;13260:32;;;13285:6;13260:32;;;;;;;;;;;;;;;;;;12962:338;;;:::o;3705:132::-;3763:7;3790:39;3794:1;3797;3790:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3783:46;;3705:132;;;;:::o;11817:471::-;11933:1;11915:20;;:6;:20;;;;11907:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12017:1;11996:23;;:9;:23;;;;11988:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12092;12114:6;12092:71;;;;;;;;;;;;;;;;;:9;:17;12102:6;12092:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12072:9;:17;12082:6;12072:17;;;;;;;;;;;;;;;:91;;;;12197:32;12222:6;12197:9;:20;12207:9;12197:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12174:9;:20;12184:9;12174:20;;;;;;;;;;;;;;;:55;;;;12262:9;12245:35;;12254:6;12245:35;;;12273:6;12245:35;;;;;;;;;;;;;;;;;;11817:471;;;:::o;3251:192::-;3337:7;3370:1;3365;:6;;3373:12;3357:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3357:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3397:9;3413:1;3409;:5;3397:17;;3434:1;3427:8;;;3251:192;;;;;:::o;2922:181::-;2980:7;3000:9;3016:1;3012;:5;3000:17;;3041:1;3036;:6;;3028:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3094:1;3087:8;;;2922:181;;;;:::o;3449:250::-;3507:7;3536:1;3531;:6;3527:47;;;3561:1;3554:8;;;;3527:47;3586:9;3602:1;3598;:5;3586:17;;3631:1;3626;3622;:5;;;;;;:10;3614:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3690:1;3683:8;;;3449:250;;;;;:::o;25021:301::-;25059:14;25076:17;:15;:17::i;:::-;25059:34;;25111:1;25102:6;:10;25098:52;;;25120:24;25137:6;25120:16;:24::i;:::-;25098:52;25165:16;:14;:16::i;:::-;25156:25;;25199:1;25190:6;:10;25186:51;;;25208:23;25224:6;25208:15;:23::i;:::-;25186:51;25252:13;:11;:13::i;:::-;25243:22;;25283:1;25274:6;:10;25270:48;;;25292:20;25305:6;25292:12;:20::i;:::-;25270:48;25021:301;:::o;5818:347::-;5923:1;5914:5;:10;5913:62;;;;5973:1;5930:5;:15;;;5954:4;5961:7;5930:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5930:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5930:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5930:39:0;;;;;;;;;;;;;;;;:44;5913:62;5905:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6068:89;6087:5;6117;:13;;;:22;;;;6141:7;6150:5;6094:62;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6094:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;6094:62:0;6068:18;:89::i;:::-;5818:347;;;:::o;5606:204::-;5707:95;5726:5;5756;:18;;;:27;;;;5785:4;5791:2;5795:5;5733:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5733:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;5733:68:0;5707:18;:95::i;:::-;5606:204;;;;:::o;24559:455::-;24640:1;24623:14;:12;:14::i;:::-;:18;24619:355;;;24677:14;24662:29;;;;;;;;:11;:29;;;;;;;;;24658:305;;;24712:29;24726:14;:12;:14::i;:::-;24712:13;:29::i;:::-;24658:305;;;24782:15;24767:30;;;;;;;;:11;:30;;;;;;;;;24763:200;;;24818:30;24833:14;:12;:14::i;:::-;24818;:30::i;:::-;24763:200;;;24889:11;24874:26;;;;;;;;:11;:26;;;;;;;;;24870:93;;;24921:26;24932:14;:12;:14::i;:::-;24921:10;:26::i;:::-;24870:93;24763:200;24658:305;24619:355;24995:11;24984:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;24559:455;:::o;12294:308::-;12389:1;12370:21;;:7;:21;;;;12362:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12455:24;12472:6;12455:12;;:16;;:24;;;;:::i;:::-;12440:12;:39;;;;12511:30;12534:6;12511:9;:18;12521:7;12511:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;12490:9;:18;12500:7;12490:18;;;;;;;;;;;;;;;:51;;;;12578:7;12557:37;;12574:1;12557:37;;;12587:6;12557:37;;;;;;;;;;;;;;;;;;12294:308;;:::o;3109:136::-;3167:7;3194:43;3198:1;3201;3194:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3187:50;;3109:136;;;;:::o;25327:337::-;25397:15;25385:27;;;;;;;;:8;;;;;;;;;;;:27;;;;;;;;;25381:75;;;25420:30;25442:7;25420:21;:30::i;:::-;25381:75;25476:11;25464:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;25460:123;;;25520:7;25503:13;:11;:13::i;:::-;:24;;25495:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25556:21;25569:7;25556:12;:21::i;:::-;25460:123;25603:14;25591:26;;;;;;;;:8;;;;;;;;;;;:26;;;;;;;;;25587:73;;;25625:29;25646:7;25625:20;:29::i;:::-;25587:73;25327:337;:::o;5422:176::-;5505:85;5524:5;5554;:14;;;:23;;;;5579:2;5583:5;5531:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5531:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;5531:58:0;5505:18;:85::i;:::-;5422:176;;;:::o;2258:229::-;2352:1;2332:22;;:8;:22;;;;2324:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2442:8;2413:38;;2434:6;;;;;;;;;;;2413:38;;;;;;;;;;;;2471:8;2462:6;;:17;;;;;;;;;;;;;;;;;;2258:229;:::o;3843:258::-;3929:7;4028:1;4024;:5;4031:12;4016:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4016:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4055:9;4071:1;4067;:5;;;;;;4055:17;;4092:1;4085:8;;;3843:258;;;;;:::o;6802:598::-;6890:27;6898:5;6890:25;;;:27::i;:::-;6882:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7027:12;7041:23;7076:5;7068:19;;7088:4;7068:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;7068:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;7026:67:0;;;;7112:7;7104:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7193:1;7173:10;:17;:21;7169:224;;;7315:10;7304:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7304:30:0;;;;;;;;;;;;;;;;7296:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7169:224;6802:598;;;;:::o;25670:314::-;25732:9;25744:17;:15;:17::i;:::-;25732:29;;25766:10;25779:24;:22;:24::i;:::-;25766:37;;25822:7;25816:2;:13;;25808:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25902:14;25919:31;25948:1;25919:24;25940:2;25920:14;25926:7;25920:1;:5;;:14;;;;:::i;:::-;25919:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;25902:48;;25955:24;25972:6;25955:16;:24::i;:::-;25670:314;;;;:::o;25989:400::-;26102:9;26114:16;:14;:16::i;:::-;26102:28;;26170:10;26183:23;:21;:23::i;:::-;26170:36;;26225:7;26219:2;:13;;26211:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26305:14;26322:31;26351:1;26322:24;26343:2;26323:14;26329:7;26323:1;:5;;:14;;;;:::i;:::-;26322:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;26305:48;;26361:23;26377:6;26361:15;:23::i;:::-;25989:400;;;;:::o;4439:374::-;4499:4;4516:16;4543:19;4565:66;4543:88;;;;4734:7;4722:20;4710:32;;4774:3;4762:15;;:8;:15;;:42;;;;;4793:11;4781:8;:23;;4762:42;4754:51;;;;4439:374;;;:::o
Swarm Source
bzzr://b14dc0d12da22c8c8072e3944cdeaa512d58d30f651d6d72f423de114e78309d
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.