Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x974822c6fd06709709fbf880d29352ef19a7cf88.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
- Contract name:
- Granary
- Optimization enabled
- false
- Compiler version
- v0.7.6+commit.7338295f
- Verified at
- 2022-01-17T03:37:27.387462Z
Contract source code
/*
KK KK CCCCC CCCCC GGGGG U U RRRRR U U
KK KKK CC CC G U U RR R U U
KKKK CC CC G GGG U U RRRRR U U
KK KK CC CC O G G U U RR R U U
KK KKK CCCCCC CCCCCC GGGGG UUUU RR RRR UUUU
FFFFF TTTTTTT M M GGGGG U U RRRRR U U
FF TTT M M M M G U U RR R U U
FFFFF TTT M M M G GGG U U RRRRR U U
FF TTT M M O G G U U RR R U U
FF TTT M M GGGGG UUUU RR RRR UUUU
*************************
** **
** GRANARY & WORKERS **
** ftm.guru/GRAIN **
** kcc.guru/kompound **
** **
*************************
Create a farm & vault for your own projects for free with ftm.guru
Contact us at:
https://discord.com/invite/QpyfMarNrV
https://t.me/FTM1337
*/
/*
- KOMPOUND PROTOCOL -
https://kcc.guru/kompound
- GRANARY & WORKERS -
https://ftm.guru/GRAIN
Yield Compounding Service
Created by Guru Network
Community Mediums:
https://discord.com/invite/QpyfMarNrV
https://medium.com/@ftm1337
https://twitter.com/ftm1337
https://twitter.com/kucino
https://t.me/ftm1337
https://t.me/kccguru
Other Products:
KUCINO CASINO - The First and Most used Casino of KCC
fmc.guru - FantomMarketCap : On-Chain Data Aggregator
ELITE - ftm.guru is an indie growth-hacker for Fantom
*/
/*
FREQUENTLY ASKED QUESTIONS
Q.1 WHY USE THIS VAULT?
Ans Most of the popular vaults' owners can switch "strategy" and steal (a.k.a. hard-rug) your valuable assets.
Granaries or Kompound Protocol cannot change its own behaviour or strategy once its deployed on-chain.
Our code uses unchangeable constants for tokens and external contracts. All fees & incentives are capped.
Unlike the other (you-know-who) famous vaults.
Q.2 WHAT IS ELITENESS?
Ans Simply holding ELITE (ftm.guru) token in your wallet ascribes you Eliteness.
It is required to earn worker incentives from this Granary.
Deposits incur nil fee if the user posseses adequate eliteness.
ELITE has a fixed supply of 250.
*/
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.7.6;
pragma abicoder v2;
//ftm.guru's Universal On-chain TVL Calculator
//Source: https://ftm.guru/rawdata/tvl
interface ITVL {
//Using Version = 6
function p_lpt_coin_usd(address lp) external view returns(uint256);
}
interface IMasterchef {
// Info of each pool.
struct PoolInfo {
address lpToken; // Address of LP token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. KUSs to distribute per block.
uint256 lastRewardBlock; // Last block number that KUSs distribution occurs.
uint256 accKUSPerShare; // Accumulated KUSs per share, times 1e12. See below.
}
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt; // Reward debt.
}
function deposit(uint256 _pid, uint256 _amount) external;
function withdraw(uint256 _pid, uint256 _amount) external;
function emergencyWithdraw(uint256 _pid) external;
function userInfo(uint256, address) external view returns (UserInfo memory);
function poolInfo(uint256) external view returns (PoolInfo memory);
function totalAllocPoint() external view returns (uint256);
function pendingKUS(uint256 _pid, address _user) external view returns (uint256);
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
//Uniswap-style Pair (LPT)
function getReserves() external view returns (uint112, uint112, uint32);
}
interface IRouter {
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be 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;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
contract Granary
{
using SafeMath for uint256;
constructor (address _w, address _m, address _e, uint8 _p, address _R, address[] memory _rA, address[] memory _rB, string memory _id, address _v)
{
want=IERC20(_w);
mc=IMasterchef(_m);
earn=IERC20(_e);
allnums[0]=_p; //pid
router = _R;
routeA = _rA;
routeB = _rB;
id=_id;//GRAIN#ID
utvl=_v;
//Approvals
//mc to take what it may want
IERC20(address(want)).approve(address(mc),uint256(-1));
//router to sell what we earn
IERC20(address(earn)).approve(address(router),uint256(-1));
//router to add routeA[routeA.length-1]
IERC20(_rA[_rA.length-1]).approve(address(router),uint256(-1));
//router to add routeB[routeB.length-1]
IERC20(_rB[_rB.length-1]).approve(address(router),uint256(-1));
dao = 0x167D87A906dA361A10061fe42bbe89451c2EE584;
treasury = dao;
}
modifier DAO {require(msg.sender==dao,"Only E.L.I.T.E. D.A.O. Treasury can rescue treasures!");_;}
struct Elites {
address ELITE;
uint256 ELITES;
}
Elites[] public Eliteness;
function pushElite(address elite, uint256 elites) public DAO {
Eliteness.push(Elites({ELITE:elite,ELITES:elites}));
}
function pullElite(uint256 n) public DAO {
Eliteness[n]=Eliteness[Eliteness.length-1];Eliteness.pop();
}
//@xref takeFee=eliteness(msg.sender)?false:true;
function eliteness(address u) public view returns(bool)
{
if(Eliteness.length==0){return(true);}//When nobody is an Elite, everyone is an Elite.
for(uint i;i<Eliteness.length;i++){
if(IERC20(Eliteness[i].ELITE).balanceOf(u)>=Eliteness[i].ELITES)
{
return(true);
}
}
return(false);
}
function config(//address _w,
uint256 _mw, uint256 _wi, uint256 _pf, address _t, uint256 _df) public DAO
{
allnums[4] = _mw;
treasury = _t;
//Max 10%, 1e6 = 100%
require(_wi<1e5,"!wi: high");allnums[3] = _wi;
require(_pf<1e5,"!pf: high");allnums[2] = _pf;
require(_df<1e5,"!df: high");allnums[1] = _df;
}
uint8 RG = 0;
modifier rg {
require(RG == 0,"!RG");
RG = 1;
_;
RG = 0;
}
function isContract(address account) internal view returns (bool)
{
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
//Using getter functions to circumvent "Stack too deep!" errors
string public id;
/*
string public name;
string public symbol;
uint8 public decimals = 18;
*/
function name() public view returns(string memory){return(string(abi.encodePacked("kcc.guru/GRAIN/", id)));}
function symbol() public view returns(string memory){return(string(abi.encodePacked("GRAIN#", id)));}
function decimals() public pure returns(uint256){return(18);}
uint256 public totalSupply;
IERC20 public want;
IERC20 public earn;
address public router;
address[] public routeA;
address[] public routeB;
IMasterchef public mc;
bool public emergency = false;
address public dao;
address public treasury;
address public utvl;
/*
uint8 public pid;
uint256 public df = 1e3;//deposit fee = 0.1%, 1e6=100%
uint256 public pf = 1e4;//performance fee to treasury, paid from profits = 1%, 1e6=100%
uint256 public wi = 1e4;//worker incentive, paid from profits = 1%, 1e6=100%
uint256 public mw;//Minimum earnings to reinvest
uint64[2] ct;//Timestamp of first & latest Kompound
*/
//Using array to avoid "Stack too deep!" errors
uint256[7] public allnums = [
0, //pid 0 constant
1e3,//df 1 config, <= 10% (1e5), default 0.1%
1e4,//pf 2 config, <= 10% (1e5), default 1%
1e4,//wi 3 config, <= 10% (1e5), default 1%
1, //mw 4 config, default 1 (near zero)
0, //ct[0] 5 nonce, then constant
0 //ct[1] 6 up only
];
event Approval(address indexed src, address indexed guy, uint wad);
event Transfer(address indexed src, address indexed dst, uint wad);
mapping (address => uint) public balanceOf;
mapping (address => mapping (address => uint)) public allowance;
function approve(address guy) public returns (bool) {
return approve(guy, uint(-1));
}
function approve(address guy, uint wad) public returns (bool) {
allowance[msg.sender][guy] = wad;
emit Approval(msg.sender, guy, wad);
return true;
}
function transfer(address dst, uint wad) public returns (bool) {
return transferFrom(msg.sender, dst, wad);
}
function transferFrom(address src, address dst, uint wad) public returns (bool)
{
require(balanceOf[src] >= wad,"Insufficient Balance");
if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) {
require(allowance[src][msg.sender] >= wad);
allowance[src][msg.sender] -= wad;
}
balanceOf[src] -= wad;
balanceOf[dst] += wad;
emit Transfer(src, dst, wad);
return true;
}
event Staked(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event Compounded(address indexed user, uint256 amount);
function deposit(uint256 _amt) public rg
{
require(!emergency,"Its an emergency. Please don't deposit.");
//Some fancy math to take care of Fee-on-Transfer tokens
uint256 vbb = want.balanceOf(address(this));
uint256 mcbb = mc.userInfo(allnums[0],address(this)).amount;
require(want.transferFrom(msg.sender,address(this),_amt), "Unable to onboard");
uint256 vba = want.balanceOf(address(this));
uint256 D = vba.sub(vbb,"Dirty deposit");
mc.deposit(allnums[0],D);
//Some more fancy math to take care of Deposit Fee
uint256 mcba = mc.userInfo(allnums[0],address(this)).amount;
uint256 M = mcba.sub(mcbb,"Dirty stake");
//require(M>mindep,"Deposit Too Low");
uint256 _mint = 0;
(totalSupply > 0)
// k: SharePerDeposit should be constant before & after
// Mint = SharesPerDeposit * IncreaseInDeposit
// bal += (totalSupply / oldDeposits) * thisDeposit
? _mint = ( M.mul(totalSupply) ).div(mcbb)
: _mint = M;
totalSupply += _mint;
uint256 _fee;
//allnums[1]===df, deposit fee
if(allnums[1]>0){_fee = eliteness(msg.sender)? 0 : (_mint.mul(allnums[1])).div(1e6);}//gas savings
if(_fee>0)//gas savings
{
balanceOf[treasury] += _fee;
emit Transfer(address(0), treasury, _fee);
}
balanceOf[msg.sender] += _mint.sub(_fee);
emit Transfer(address(0), msg.sender, _mint.sub(_fee));
//hardWork()
//allnums[4]===mw, min work : smallest harvest
if(earn.balanceOf(address(this)) > allnums[4]) {work(address(this));}
}
function withdraw(uint256 _amt) public rg
{
require(!emergency,"Its an emergency. Use emergencyWithdraw() please.");
require(balanceOf[msg.sender] >= _amt,"Insufficient Balance");
//Burn _amt of Vault Tokens
balanceOf[msg.sender] -= _amt;
uint256 ts = totalSupply;
totalSupply -= _amt;
emit Transfer(msg.sender, address(0), _amt);
uint256 vbb = want.balanceOf(address(this));
uint256 mcbb = mc.userInfo(allnums[0],address(this)).amount;
// W = DepositsPerShare * SharesBurnt
uint256 W = ( _amt.mul(mcbb) ).div(ts);
mc.withdraw(allnums[0],W);
uint256 vba = want.balanceOf(address(this));
uint256 D = vba.sub(vbb,"Dirty withdrawal");
require(want.transfer(msg.sender,D), "Unable to deboard");
//hardWork()
if(earn.balanceOf(address(this)) > allnums[4]) {work(address(this));}
}
function doHardWork() public rg
{
require(eliteness(msg.sender),"Elites only!");
salvage();
require(earn.balanceOf(address(this)) > allnums[4], "Not much work to do!");
work(msg.sender);
}
function salvage() public
{
//harvest()
mc.withdraw(allnums[0],0);
}
function work(address ben) internal
{
require(!emergency,"Its an emergency. Use emergencyWithdraw() please.");
//has inputs from salvage() if this work is done via doHardWork()
IRouter R = IRouter(router);
IERC20 A = IERC20(routeA[routeA.length-1]);
IERC20 B = IERC20(routeB[routeB.length-1]);
uint256 vbb = (earn.balanceOf(address(this))).div(2);
R.swapExactTokensForTokensSupportingFeeOnTransferTokens(vbb,1,routeA,address(this),block.timestamp);
R.swapExactTokensForTokensSupportingFeeOnTransferTokens(vbb,1,routeB,address(this),block.timestamp);
R.addLiquidity(
address(A),
address(B),
A.balanceOf(address(this)),
B.balanceOf(address(this)),
(A.balanceOf(address(this)).mul(90).div(100)),
(B.balanceOf(address(this)).mul(90).div(100)),
address(this),
block.timestamp
);
uint256 D = want.balanceOf(address(this));
uint256 mcbb = mc.userInfo(allnums[0],address(this)).amount;
mc.deposit(allnums[0],D);
uint256 mcba = mc.userInfo(allnums[0],address(this)).amount;
uint256 M = mcba.sub(mcbb,"Dirty stake");
//Performance Fee Mint, conserves TVL
uint256 _mint = 0;
//allnums[5] & allnums[6] are First & Latest Compound's timestamps. Used in info() for APY of AUM.
if(allnums[5]==0){allnums[5]=uint64(block.timestamp);}//only on the first run
allnums[6]=uint64(block.timestamp);
(totalSupply > 0)
// k: SharePerDeposit should be constant before & after
// Mint = SharesPerDeposit * IncreaseInDeposit
// bal += (totalSupply / oldDeposits) * thisDeposit
? _mint = ( M.mul(totalSupply) ).div(mcbb)
: _mint = M;
//allnums[2] === pf, Performance Fee
balanceOf[treasury] += (_mint.mul(allnums[2])).div(1e6);
//Worker Incentive Mint, conserves TVL
address worker = ben == address(this) ? treasury : ben;
//allnums[3] === wi, Worker Incentive
balanceOf[worker] += (_mint.mul(allnums[3])).div(1e6);
totalSupply += ((_mint.mul(allnums[2])).div(1e6)).add( (_mint.mul(allnums[3])).div(1e6) );
emit Transfer(address(0), treasury, (_mint.mul(allnums[2])).div(1e6));
emit Transfer(address(0), worker, (_mint.mul(allnums[3])).div(1e6));
}
function declareEmergency() public DAO
{
require(!emergency,"Emergency already declared.");
mc.emergencyWithdraw(allnums[0]);
emergency=true;
}
function revokeEmergency() public DAO
{
require(emergency,"Emergency not declared.");
uint256 D = want.balanceOf(address(this));
mc.deposit(allnums[0],D);
emergency=false;
}
function emergencyWithdraw(uint256 _amt) public rg
{
require(emergency,"Its not an emergency. Use withdraw() instead.");
require(balanceOf[msg.sender] >= _amt,"Insufficient Balance");
uint256 ts = totalSupply;
//Burn _amt of Vault Tokens
balanceOf[msg.sender] -= _amt;
totalSupply -= _amt;
emit Transfer(msg.sender, address(0), _amt);
uint256 vbb = want.balanceOf(address(this));
uint256 W = ( _amt.mul(vbb) ).div(ts);
require(want.transfer(msg.sender,W), "Unable to deboard");
}
function rescue(address tokenAddress, uint256 tokens) public DAO returns (bool success)
{
//Generally, there are not supposed to be any tokens in this contract itself:
//Upon Deposits, the assets go from User to the MasterChef of Strategy,
//Upon Withdrawals, the assets go from MasterChef of Strategy to the User, and
//Upon HardWork, the harvest is reconverted to want and sent to MasterChef of Strategy.
//Never allow draining main "want" token from the Granary:
//Main token can only be withdrawn using the EmergencyWithdraw
require(tokenAddress != address(want), "Funds are Safu in emergency!");
if(tokenAddress==address(0)) {(success, ) = dao.call{value:tokens}("");return success;}
else if(tokenAddress!=address(0)) {return IERC20(tokenAddress).transfer(dao, tokens);}
else return false;
}
//Read-Only Functions
//Useful for performance analysis
function info() public view returns (uint256, uint256, uint256, IMasterchef.UserInfo memory, IMasterchef.PoolInfo memory, uint256, uint256)
{
uint256 aum = mc.userInfo(allnums[0],address(this)).amount + IERC20(want).balanceOf(address(this));
uint256 roi = aum*1e18/totalSupply;//ROI: 1e18 === 1x
uint256 apy = ((roi-1e18)*(365*86400)*100)/(allnums[6]-allnums[5]);//APY: 1e18 === 1%
return(
aum,
roi,
apy,
mc.userInfo(allnums[0],address(this)),
mc.poolInfo(allnums[0]),
mc.totalAllocPoint(),
mc.pendingKUS(allnums[0],address(this))
);
}
//TVL in USD, 1e18===$1.
//Source code Derived from ftm.guru's Universal On-chain TVL Calculator: https://ftm.guru/rawdata/tvl
function tvl() public view returns(uint256)
{
ITVL tc = ITVL(utvl);
uint256 aum = mc.userInfo(allnums[0],address(this)).amount + IERC20(want).balanceOf(address(this));
return ((tc.p_lpt_coin_usd(address(want))).mul(aum)).div(1e18);
}
}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_w","internalType":"address"},{"type":"address","name":"_m","internalType":"address"},{"type":"address","name":"_e","internalType":"address"},{"type":"uint8","name":"_p","internalType":"uint8"},{"type":"address","name":"_R","internalType":"address"},{"type":"address[]","name":"_rA","internalType":"address[]"},{"type":"address[]","name":"_rB","internalType":"address[]"},{"type":"string","name":"_id","internalType":"string"},{"type":"address","name":"_v","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"guy","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Compounded","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Staked","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"src","internalType":"address","indexed":true},{"type":"address","name":"dst","internalType":"address","indexed":true},{"type":"uint256","name":"wad","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Withdrawn","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"ELITE","internalType":"address"},{"type":"uint256","name":"ELITES","internalType":"uint256"}],"name":"Eliteness","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allnums","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"guy","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"guy","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"config","inputs":[{"type":"uint256","name":"_mw","internalType":"uint256"},{"type":"uint256","name":"_wi","internalType":"uint256"},{"type":"uint256","name":"_pf","internalType":"uint256"},{"type":"address","name":"_t","internalType":"address"},{"type":"uint256","name":"_df","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"dao","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"declareEmergency","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deposit","inputs":[{"type":"uint256","name":"_amt","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"doHardWork","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"earn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"eliteness","inputs":[{"type":"address","name":"u","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"emergency","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"emergencyWithdraw","inputs":[{"type":"uint256","name":"_amt","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"id","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"tuple","name":"","internalType":"struct IMasterchef.UserInfo","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"rewardDebt","internalType":"uint256"}]},{"type":"tuple","name":"","internalType":"struct IMasterchef.PoolInfo","components":[{"type":"address","name":"lpToken","internalType":"address"},{"type":"uint256","name":"allocPoint","internalType":"uint256"},{"type":"uint256","name":"lastRewardBlock","internalType":"uint256"},{"type":"uint256","name":"accKUSPerShare","internalType":"uint256"}]},{"type":"uint256","name":"","internalType":"uint256"},{"type":"uint256","name":"","internalType":"uint256"}],"name":"info","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IMasterchef"}],"name":"mc","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pullElite","inputs":[{"type":"uint256","name":"n","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pushElite","inputs":[{"type":"address","name":"elite","internalType":"address"},{"type":"uint256","name":"elites","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"rescue","inputs":[{"type":"address","name":"tokenAddress","internalType":"address"},{"type":"uint256","name":"tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeEmergency","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"routeA","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"routeB","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"salvage","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"src","internalType":"address"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"treasury","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tvl","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"utvl","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"want","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"uint256","name":"_amt","internalType":"uint256"}]}]
Contract Creation Code
0x60806040526000600160006101000a81548160ff021916908360ff1602179055506000600960146101000a81548160ff0219169083151502179055506040518060e00160405280600061ffff1681526020016103e861ffff16815260200161271061ffff16815260200161271061ffff168152602001600161ffff168152602001600061ffff168152602001600061ffff16815250600d906007620000a692919062000715565b50348015620000b457600080fd5b5060405162006a9238038062006a928339818101604052810190620000da9190620009fe565b88600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560ff16600d600060078110620001b057fe5b018190555084600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600790805190602001906200020e92919062000760565b5082600890805190602001906200022792919062000760565b50816002908051906020019062000240929190620007ef565b5080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200032392919062000b70565b602060405180830381600087803b1580156200033e57600080fd5b505af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000b22565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200041b92919062000b70565b602060405180830381600087803b1580156200043657600080fd5b505af11580156200044b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000471919062000b22565b50836001855103815181106200048357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200050992919062000b70565b602060405180830381600087803b1580156200052457600080fd5b505af115801562000539573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055f919062000b22565b50826001845103815181106200057157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620005f792919062000b70565b602060405180830381600087803b1580156200061257600080fd5b505af115801562000627573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064d919062000b22565b5073167d87a906da361a10061fe42bbe89451c2ee584600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505062000d10565b82600781019282156200074d579160200282015b828111156200074c578251829061ffff1690559160200191906001019062000729565b5b5090506200075c919062000886565b5090565b828054828255906000526020600020908101928215620007dc579160200282015b82811115620007db5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000781565b5b509050620007eb919062000886565b5090565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000827576000855562000873565b82601f106200084257805160ff191683800117855562000873565b8280016001018555821562000873579182015b828111156200087257825182559160200191906001019062000855565b5b50905062000882919062000886565b5090565b5b80821115620008a157600081600090555060010162000887565b5090565b6000620008bc620008b68462000bd1565b62000b9d565b90508083825260208201905082856020860282011115620008dc57600080fd5b60005b85811015620009105781620008f588826200095f565b845260208401935060208301925050600181019050620008df565b5050509392505050565b6000620009316200092b8462000c00565b62000b9d565b9050828152602081018484840111156200094a57600080fd5b6200095784828562000c8a565b509392505050565b600081519050620009708162000cc2565b92915050565b600082601f8301126200098857600080fd5b81516200099a848260208601620008a5565b91505092915050565b600081519050620009b48162000cdc565b92915050565b600082601f830112620009cc57600080fd5b8151620009de8482602086016200091a565b91505092915050565b600081519050620009f88162000cf6565b92915050565b60008060008060008060008060006101208a8c03121562000a1e57600080fd5b600062000a2e8c828d016200095f565b995050602062000a418c828d016200095f565b985050604062000a548c828d016200095f565b975050606062000a678c828d01620009e7565b965050608062000a7a8c828d016200095f565b95505060a08a015167ffffffffffffffff81111562000a9857600080fd5b62000aa68c828d0162000976565b94505060c08a015167ffffffffffffffff81111562000ac457600080fd5b62000ad28c828d0162000976565b93505060e08a015167ffffffffffffffff81111562000af057600080fd5b62000afe8c828d01620009ba565b92505061010062000b128c828d016200095f565b9150509295985092959850929598565b60006020828403121562000b3557600080fd5b600062000b4584828501620009a3565b91505092915050565b62000b598162000c33565b82525050565b62000b6a8162000c73565b82525050565b600060408201905062000b87600083018562000b4e565b62000b96602083018462000b5f565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171562000bc75762000bc662000cc0565b5b8060405250919050565b600067ffffffffffffffff82111562000bef5762000bee62000cc0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000c1e5762000c1d62000cc0565b5b601f19601f8301169050602081019050919050565b600062000c408262000c53565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101562000caa57808201518184015260208101905062000c8d565b8381111562000cba576000848401525b50505050565bfe5b62000ccd8162000c33565b811462000cd957600080fd5b50565b62000ce78162000c47565b811462000cf357600080fd5b50565b62000d018162000c7d565b811462000d0d57600080fd5b50565b615d728062000d206000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80635312ea8e11610130578063af640d0f116100b8578063daea85c51161007c578063daea85c51461064d578063dd62ed3e1461067d578063e5328e06146106ad578063ef1b8140146106cb578063f887ea40146106e757610227565b8063af640d0f146105b9578063b6b55f25146105d7578063caa6fea4146105f3578063cb7956b014610611578063d389800f1461062f57610227565b80637919b71b116100ff5780637919b71b146104db5780637a4e4ecf1461050b5780638ed5f3731461053b57806395d89b411461056b578063a9059cbb1461058957610227565b80635312ea8e1461045557806361d027b314610471578063685c8ca51461048f57806370a08231146104ab57610227565b806327d9cf44116101b3578063370158ea11610182578063370158ea146103bd5780633d456f43146103e15780634162169f146104115780634b292cae1461042f5780634fa5d8541461044b57610227565b806327d9cf441461035b5780632e1a7d4d14610379578063313ce5671461039557806331e244e5146103b357610227565b80631e534906116101fa5780631e534906146102c95780631f1fcd51146102d357806323b872dd146102f157806323e1d0e81461032157806324aa95ec1461035157610227565b806306fdde031461022c578063095ea7b31461024a57806318160ddd1461027a5780631b5f9c4214610298575b600080fd5b610234610705565b60405161024191906156f3565b60405180910390f35b610264600480360381019061025f9190614b22565b61072d565b60405161027191906156a2565b60405180910390f35b61028261081f565b60405161028f9190615955565b60405180910390f35b6102b260048036038101906102ad9190614bd9565b610825565b6040516102c0929190615679565b60405180910390f35b6102d1610879565b005b6102db61091a565b6040516102e891906156bd565b60405180910390f35b61030b60048036038101906103069190614ad3565b610940565b60405161031891906156a2565b60405180910390f35b61033b60048036038101906103369190614bd9565b610cbf565b6040516103489190615955565b60405180910390f35b610359610cda565b005b610363610f24565b6040516103709190615580565b60405180910390f35b610393600480360381019061038e9190614bd9565b610f4a565b005b61039d61166a565b6040516103aa9190615955565b60405180910390f35b6103bb611673565b005b6103c561180c565b6040516103d89796959493929190615a45565b60405180910390f35b6103fb60048036038101906103f69190614bd9565b611cdc565b6040516104089190615580565b60405180910390f35b610419611d1b565b6040516104269190615580565b60405180910390f35b61044960048036038101906104449190614c7a565b611d41565b005b610453611f38565b005b61046f600480360381019061046a9190614bd9565b61211a565b005b61047961250d565b6040516104869190615580565b60405180910390f35b6104a960048036038101906104a49190614b22565b612533565b005b6104c560048036038101906104c09190614a6e565b612670565b6040516104d29190615955565b60405180910390f35b6104f560048036038101906104f09190614bd9565b612688565b6040516105029190615580565b60405180910390f35b61052560048036038101906105209190614b22565b6126c7565b60405161053291906156a2565b60405180910390f35b61055560048036038101906105509190614a6e565b6129a7565b60405161056291906156a2565b60405180910390f35b610573612adc565b60405161058091906156f3565b60405180910390f35b6105a3600480360381019061059e9190614b22565b612b04565b6040516105b091906156a2565b60405180910390f35b6105c1612b19565b6040516105ce91906156f3565b60405180910390f35b6105f160048036038101906105ec9190614bd9565b612bb7565b005b6105fb613507565b60405161060891906156a2565b60405180910390f35b61061961351a565b60405161062691906156d8565b60405180910390f35b610637613540565b60405161064491906156bd565b60405180910390f35b61066760048036038101906106629190614a6e565b613566565b60405161067491906156a2565b60405180910390f35b61069760048036038101906106929190614a97565b613599565b6040516106a49190615955565b60405180910390f35b6106b56135be565b6040516106c29190615955565b60405180910390f35b6106e560048036038101906106e09190614bd9565b613833565b005b6106ef6139cb565b6040516106fc9190615580565b60405180910390f35b606060026040516020016107199190615527565b604051602081830303815290604052905090565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161080d9190615955565b60405180910390a36001905092915050565b60035481565b6000818154811061083557600080fd5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663441a3e70600d6000600781106108c557fe5b015460006040518363ffffffff1660e01b81526004016108e6929190615999565b600060405180830381600087803b15801561090057600080fd5b505af1158015610914573d6000803e3d6000fd5b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb906158b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610a9c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610bb55781601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b2a57600080fd5b81601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cac9190615955565b60405180910390a3600190509392505050565b600d8160078110610ccf57600080fd5b016000915090505481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d61906158d5565b60405180910390fd5b600960149054906101000a900460ff16610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090615875565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e169190615580565b60206040518083038186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e669190614c02565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600d600060078110610eb457fe5b0154836040518363ffffffff1660e01b8152600401610ed4929190615a1c565b600060405180830381600087803b158015610eee57600080fd5b505af1158015610f02573d6000803e3d6000fd5b505050506000600960146101000a81548160ff02191690831515021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900460ff1660ff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550600960149054906101000a900460ff161561100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190615815565b60405180910390fd5b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561108c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611083906158b5565b60405180910390fd5b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506000600354905081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161114e9190615955565b60405180910390a36000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111b39190615580565b60206040518083038186803b1580156111cb57600080fd5b505afa1580156111df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112039190614c02565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d60006007811061125357fe5b0154306040518363ffffffff1660e01b8152600401611273929190615970565b604080518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c29190614bb0565b60000151905060006112ef846112e184886139f190919063ffffffff16565b613a6190919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663441a3e70600d60006007811061133d57fe5b0154836040518363ffffffff1660e01b815260040161135d929190615a1c565b600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113ec9190615580565b60206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c9190614c02565b9050600061148a856040518060400160405280601081526020017f4469727479207769746864726177616c0000000000000000000000000000000081525084613aab9092919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114e99291906155d2565b602060405180830381600087803b15801561150357600080fd5b505af1158015611517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190614b5e565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190615915565b60405180910390fd5b600d60046007811061158857fe5b0154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115e59190615580565b60206040518083038186803b1580156115fd57600080fd5b505afa158015611611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116359190614c02565b11156116455761164430613b06565b5b5050505050506000600160006101000a81548160ff021916908360ff16021790555050565b60006012905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa906158d5565b60405180910390fd5b600960149054906101000a900460ff1615611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a906157b5565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635312ea8e600d60006007811061179f57fe5b01546040518263ffffffff1660e01b81526004016117bd9190615955565b600060405180830381600087803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b505050506001600960146101000a81548160ff021916908315150217905550565b60008060006118196148ed565b611821614907565b6000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118819190615580565b60206040518083038186803b15801561189957600080fd5b505afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190614c02565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d60006007811061191d57fe5b0154306040518363ffffffff1660e01b815260040161193d929190615970565b604080518083038186803b15801561195457600080fd5b505afa158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c9190614bb0565b600001510190506000600354670de0b6b3a76400008302816119aa57fe5b0490506000600d6005600781106119bd57fe5b0154600d6006600781106119cd57fe5b01540360646301e13380670de0b6b3a764000085030202816119eb57fe5b049050828282600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d600060078110611a3d57fe5b0154306040518363ffffffff1660e01b8152600401611a5d929190615970565b604080518083038186803b158015611a7457600080fd5b505afa158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aac9190614bb0565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631526fe27600d600060078110611af857fe5b01546040518263ffffffff1660e01b8152600401611b169190615955565b60806040518083038186803b158015611b2e57600080fd5b505afa158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190614b87565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015611bce57600080fd5b505afa158015611be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c069190614c02565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eba0a1da600d600060078110611c5257fe5b0154306040518363ffffffff1660e01b8152600401611c72929190615970565b60206040518083038186803b158015611c8a57600080fd5b505afa158015611c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc29190614c02565b995099509950995099509950995050505090919293949596565b60088181548110611cec57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906158d5565b60405180910390fd5b84600d600460078110611de057fe5b018190555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a08410611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906157d5565b60405180910390fd5b83600d600360078110611e7a57fe5b0181905550620186a08310611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90615855565b60405180910390fd5b82600d600260078110611ed357fe5b0181905550620186a08110611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f14906157f5565b60405180910390fd5b80600d600160078110611f2c57fe5b01819055505050505050565b6000600160009054906101000a900460ff1660ff1614611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550611fb1336129a7565b611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790615935565b60405180910390fd5b611ff8610879565b600d60046007811061200657fe5b0154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120639190615580565b60206040518083038186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b39190614c02565b116120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90615715565b60405180910390fd5b6120fc33613b06565b6000600160006101000a81548160ff021916908360ff160217905550565b6000600160009054906101000a900460ff1660ff161461216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550600960149054906101000a900460ff166121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090615895565b60405180910390fd5b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561225b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612252906158b5565b60405180910390fd5b6000600354905081601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161231d9190615955565b60405180910390a36000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123829190615580565b60206040518083038186803b15801561239a57600080fd5b505afa1580156123ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d29190614c02565b905060006123fb836123ed84876139f190919063ffffffff16565b613a6190919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161245a9291906155d2565b602060405180830381600087803b15801561247457600080fd5b505af1158015612488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ac9190614b5e565b6124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290615915565b60405180910390fd5b5050506000600160006101000a81548160ff021916908360ff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba906158d5565b60405180910390fd5b600060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550505050565b60146020528060005260406000206000915090505481565b6007818154811061269857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612750906158d5565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e1906158f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128b257600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516128659061556b565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5050809150506129a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461299c578273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612943929190615679565b602060405180830381600087803b15801561295d57600080fd5b505af1158015612971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129959190614b5e565b90506129a1565b600090505b92915050565b60008060008054905014156129bf5760019050612ad7565b60005b600080549050811015612ad157600081815481106129dc57fe5b906000526020600020906002020160010154600082815481106129fb57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401612a659190615580565b60206040518083038186803b158015612a7d57600080fd5b505afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190614c02565b10612ac4576001915050612ad7565b80806001019150506129c2565b50600090505b919050565b60606002604051602001612af09190615549565b604051602081830303815290604052905090565b6000612b11338484610940565b905092915050565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612baf5780601f10612b8457610100808354040283529160200191612baf565b820191906000526020600020905b815481529060010190602001808311612b9257829003601f168201915b505050505081565b6000600160009054906101000a900460ff1660ff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0390615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550600960149054906101000a900460ff1615612c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6e90615775565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612cd49190615580565b60206040518083038186803b158015612cec57600080fd5b505afa158015612d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d249190614c02565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d600060078110612d7457fe5b0154306040518363ffffffff1660e01b8152600401612d94929190615970565b604080518083038186803b158015612dab57600080fd5b505afa158015612dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de39190614bb0565b600001519050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401612e489392919061559b565b602060405180830381600087803b158015612e6257600080fd5b505af1158015612e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9a9190614b5e565b612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed090615795565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f369190615580565b60206040518083038186803b158015612f4e57600080fd5b505afa158015612f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f869190614c02565b90506000612fd4846040518060400160405280600d81526020017f4469727479206465706f7369740000000000000000000000000000000000000081525084613aab9092919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600d60006007811061302257fe5b0154836040518363ffffffff1660e01b8152600401613042929190615a1c565b600060405180830381600087803b15801561305c57600080fd5b505af1158015613070573d6000803e3d6000fd5b505050506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d6000600781106130c257fe5b0154306040518363ffffffff1660e01b81526004016130e2929190615970565b604080518083038186803b1580156130f957600080fd5b505afa15801561310d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131319190614bb0565b6000015190506000613183856040518060400160405280600b81526020017f4469727479207374616b6500000000000000000000000000000000000000000081525084613aab9092919063ffffffff16565b90506000806003541161319957819050806131c4565b6131c0866131b2600354856139f190919063ffffffff16565b613a6190919063ffffffff16565b9050805b5080600360008282540192505081905550600080600d6001600781106131e657fe5b0154111561323d576131f7336129a7565b61323757613232620f4240613224600d60016007811061321357fe5b0154856139f190919063ffffffff16565b613a6190919063ffffffff16565b61323a565b60005b90505b600081111561333e578060146000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133359190615955565b60405180910390a35b61335181836147ed90919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61340084866147ed90919063ffffffff16565b60405161340d9190615955565b60405180910390a3600d60046007811061342357fe5b0154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016134809190615580565b60206040518083038186803b15801561349857600080fd5b505afa1580156134ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d09190614c02565b11156134e0576134df30613b06565b5b50505050505050506000600160006101000a81548160ff021916908360ff16021790555050565b600960149054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000613592827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61072d565b9050919050565b6015602052816000526040600020602052806000526040600020600091509150505481565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016136439190615580565b60206040518083038186803b15801561365b57600080fd5b505afa15801561366f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136939190614c02565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d6000600781106136df57fe5b0154306040518363ffffffff1660e01b81526004016136ff929190615970565b604080518083038186803b15801561371657600080fd5b505afa15801561372a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374e9190614bb0565b6000015101905061382c670de0b6b3a764000061381e838573ffffffffffffffffffffffffffffffffffffffff166333281305600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016137c09190615580565b60206040518083038186803b1580156137d857600080fd5b505afa1580156137ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138109190614c02565b6139f190919063ffffffff16565b613a6190919063ffffffff16565b9250505090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146138c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ba906158d5565b60405180910390fd5b6000600160008054905003815481106138d857fe5b9060005260206000209060020201600082815481106138f357fe5b90600052602060002090600202016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155905050600080548061398057fe5b6001900381819060005260206000209060020201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090555050905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080831415613a045760009050613a5b565b6000828402905082848281613a1557fe5b0414613a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4d90615835565b60405180910390fd5b809150505b92915050565b6000613aa383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614837565b905092915050565b6000838311158290613af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aea91906156f3565b60405180910390fd5b5060008385039050809150509392505050565b600960149054906101000a900460ff1615613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90615815565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760016007805490500381548110613b9457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600860016008805490500381548110613bd857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000613cc56002600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613c679190615580565b60206040518083038186803b158015613c7f57600080fd5b505afa158015613c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb79190614c02565b613a6190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff16635c11d795826001600730426040518663ffffffff1660e01b8152600401613d0a9594939291906159c2565b600060405180830381600087803b158015613d2457600080fd5b505af1158015613d38573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16635c11d795826001600830426040518663ffffffff1660e01b8152600401613d7f9594939291906159c2565b600060405180830381600087803b158015613d9957600080fd5b505af1158015613dad573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663e8e3370084848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e089190615580565b60206040518083038186803b158015613e2057600080fd5b505afa158015613e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e589190614c02565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e919190615580565b60206040518083038186803b158015613ea957600080fd5b505afa158015613ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee19190614c02565b613f906064613f82605a8c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613f249190615580565b60206040518083038186803b158015613f3c57600080fd5b505afa158015613f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f749190614c02565b6139f190919063ffffffff16565b613a6190919063ffffffff16565b61403f6064614031605a8c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613fd39190615580565b60206040518083038186803b158015613feb57600080fd5b505afa158015613fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140239190614c02565b6139f190919063ffffffff16565b613a6190919063ffffffff16565b30426040518963ffffffff1660e01b81526004016140649897969594939291906155fb565b606060405180830381600087803b15801561407e57600080fd5b505af1158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b69190614c2b565b5050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016141169190615580565b60206040518083038186803b15801561412e57600080fd5b505afa158015614142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141669190614c02565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d6000600781106141b657fe5b0154306040518363ffffffff1660e01b81526004016141d6929190615970565b604080518083038186803b1580156141ed57600080fd5b505afa158015614201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142259190614bb0565b600001519050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600d60006007811061427757fe5b0154846040518363ffffffff1660e01b8152600401614297929190615a1c565b600060405180830381600087803b1580156142b157600080fd5b505af11580156142c5573d6000803e3d6000fd5b505050506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d60006007811061431757fe5b0154306040518363ffffffff1660e01b8152600401614337929190615970565b604080518083038186803b15801561434e57600080fd5b505afa158015614362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143869190614bb0565b60000151905060006143d8836040518060400160405280600b81526020017f4469727479207374616b6500000000000000000000000000000000000000000081525084613aab9092919063ffffffff16565b9050600080600d6005600781106143eb57fe5b01541415614412574267ffffffffffffffff16600d60056007811061440c57fe5b01819055505b4267ffffffffffffffff16600d60066007811061442b57fe5b0181905550600060035411614443578190508061446e565b61446a8461445c600354856139f190919063ffffffff16565b613a6190919063ffffffff16565b9050805b506144a6620f4240614498600d60026007811061448757fe5b0154846139f190919063ffffffff16565b613a6190919063ffffffff16565b60146000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060003073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161461454f578a614573565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90506145ac620f424061459e600d60036007811061458d57fe5b0154856139f190919063ffffffff16565b613a6190919063ffffffff16565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550614677614632620f4240614624600d60036007811061461357fe5b0154866139f190919063ffffffff16565b613a6190919063ffffffff16565b614669620f424061465b600d60026007811061464a57fe5b0154876139f190919063ffffffff16565b613a6190919063ffffffff16565b61489890919063ffffffff16565b600360008282540192505081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61472f620f4240614721600d60026007811061471057fe5b0154886139f190919063ffffffff16565b613a6190919063ffffffff16565b60405161473c9190615955565b60405180910390a38073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6147cb620f42406147bd600d6003600781106147ac57fe5b0154886139f190919063ffffffff16565b613a6190919063ffffffff16565b6040516147d89190615955565b60405180910390a35050505050505050505050565b600061482f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613aab565b905092915050565b6000808311829061487e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161487591906156f3565b60405180910390fd5b50600083858161488a57fe5b049050809150509392505050565b6000808284019050838110156148e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148da90615755565b60405180910390fd5b8091505092915050565b604051806040016040528060008152602001600081525090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b60008135905061495481615cf7565b92915050565b60008151905061496981615cf7565b92915050565b60008151905061497e81615d0e565b92915050565b60006080828403121561499657600080fd5b6149a06080615ab7565b905060006149b08482850161495a565b60008301525060206149c484828501614a59565b60208301525060406149d884828501614a59565b60408301525060606149ec84828501614a59565b60608301525092915050565b600060408284031215614a0a57600080fd5b614a146040615ab7565b90506000614a2484828501614a59565b6000830152506020614a3884828501614a59565b60208301525092915050565b600081359050614a5381615d25565b92915050565b600081519050614a6881615d25565b92915050565b600060208284031215614a8057600080fd5b6000614a8e84828501614945565b91505092915050565b60008060408385031215614aaa57600080fd5b6000614ab885828601614945565b9250506020614ac985828601614945565b9150509250929050565b600080600060608486031215614ae857600080fd5b6000614af686828701614945565b9350506020614b0786828701614945565b9250506040614b1886828701614a44565b9150509250925092565b60008060408385031215614b3557600080fd5b6000614b4385828601614945565b9250506020614b5485828601614a44565b9150509250929050565b600060208284031215614b7057600080fd5b6000614b7e8482850161496f565b91505092915050565b600060808284031215614b9957600080fd5b6000614ba784828501614984565b91505092915050565b600060408284031215614bc257600080fd5b6000614bd0848285016149f8565b91505092915050565b600060208284031215614beb57600080fd5b6000614bf984828501614a44565b91505092915050565b600060208284031215614c1457600080fd5b6000614c2284828501614a59565b91505092915050565b600080600060608486031215614c4057600080fd5b6000614c4e86828701614a59565b9350506020614c5f86828701614a59565b9250506040614c7086828701614a59565b9150509250925092565b600080600080600060a08688031215614c9257600080fd5b6000614ca088828901614a44565b9550506020614cb188828901614a44565b9450506040614cc288828901614a44565b9350506060614cd388828901614945565b9250506080614ce488828901614a44565b9150509295509295909350565b6000614cfd8383614d18565b60208301905092915050565b614d1281615bd5565b82525050565b614d2181615b8d565b82525050565b614d3081615b8d565b82525050565b6000614d4182615b12565b614d4b8185615b35565b9350614d5683615ae8565b8060005b83811015614d8e57614d6b82615cc6565b614d758882614cf1565b9750614d8083615b28565b925050600181019050614d5a565b5085935050505092915050565b614da481615b9f565b82525050565b614db381615be7565b82525050565b614dc281615c0b565b82525050565b614dd181615c2f565b82525050565b614de081615c41565b82525050565b6000614df182615b1d565b614dfb8185615b51565b9350614e0b818560208601615c77565b614e1481615cd9565b840191505092915050565b600081546001811660008114614e3c5760018114614e6157614ea5565b607f6002830416614e4d8187615b62565b955060ff1983168652808601935050614ea5565b60028204614e6f8187615b62565b9550614e7a85615afd565b60005b82811015614e9c57815481890152600182019150602081019050614e7d565b82880195505050505b505092915050565b6000614eba600f83615b62565b91507f6b63632e677572752f475241494e2f00000000000000000000000000000000006000830152600f82019050919050565b6000614efa601483615b51565b91507f4e6f74206d75636820776f726b20746f20646f210000000000000000000000006000830152602082019050919050565b6000614f3a600383615b51565b91507f21524700000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614f7a601b83615b51565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614fba600683615b62565b91507f475241494e2300000000000000000000000000000000000000000000000000006000830152600682019050919050565b6000614ffa602783615b51565b91507f49747320616e20656d657267656e63792e20506c6561736520646f6e2774206460008301527f65706f7369742e000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615060601183615b51565b91507f556e61626c6520746f206f6e626f6172640000000000000000000000000000006000830152602082019050919050565b60006150a0601b83615b51565b91507f456d657267656e637920616c7265616479206465636c617265642e00000000006000830152602082019050919050565b60006150e0600983615b51565b91507f2177693a206869676800000000000000000000000000000000000000000000006000830152602082019050919050565b6000615120600983615b51565b91507f2164663a206869676800000000000000000000000000000000000000000000006000830152602082019050919050565b6000615160603183615b51565b91507f49747320616e20656d657267656e63792e2055736520656d657267656e63795760008301527f69746864726177282920706c656173652e0000000000000000000000000000006020830152604082019050919050565b60006151c6602183615b51565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061522c600983615b51565b91507f2170663a206869676800000000000000000000000000000000000000000000006000830152602082019050919050565b600061526c601783615b51565b91507f456d657267656e6379206e6f74206465636c617265642e0000000000000000006000830152602082019050919050565b60006152ac602d83615b51565b91507f497473206e6f7420616e20656d657267656e63792e205573652077697468647260008301527f6177282920696e73746561642e000000000000000000000000000000000000006020830152604082019050919050565b6000615312601483615b51565b91507f496e73756666696369656e742042616c616e63650000000000000000000000006000830152602082019050919050565b6000615352603583615b51565b91507f4f6e6c7920452e4c2e492e542e452e20442e412e4f2e2054726561737572792060008301527f63616e20726573637565207472656173757265732100000000000000000000006020830152604082019050919050565b60006153b8600083615b46565b9150600082019050919050565b60006153d2601c83615b51565b91507f46756e647320617265205361667520696e20656d657267656e637921000000006000830152602082019050919050565b6000615412601183615b51565b91507f556e61626c6520746f206465626f6172640000000000000000000000000000006000830152602082019050919050565b6000615452600c83615b51565b91507f456c69746573206f6e6c792100000000000000000000000000000000000000006000830152602082019050919050565b60808201600082015161549b6000850182614d18565b5060208201516154ae6020850182615509565b5060408201516154c16040850182615509565b5060608201516154d46060850182615509565b50505050565b6040820160008201516154f06000850182615509565b5060208201516155036020850182615509565b50505050565b61551281615bcb565b82525050565b61552181615bcb565b82525050565b600061553282614ead565b915061553e8284614e1f565b915081905092915050565b600061555482614fad565b91506155608284614e1f565b915081905092915050565b6000615576826153ab565b9150819050919050565b60006020820190506155956000830184614d27565b92915050565b60006060820190506155b06000830186614d09565b6155bd6020830185614d27565b6155ca6040830184615518565b949350505050565b60006040820190506155e76000830185614d09565b6155f46020830184615518565b9392505050565b600061010082019050615611600083018b614d27565b61561e602083018a614d27565b61562b6040830189615518565b6156386060830188615518565b6156456080830187615518565b61565260a0830186615518565b61565f60c0830185614d27565b61566c60e0830184615518565b9998505050505050505050565b600060408201905061568e6000830185614d27565b61569b6020830184615518565b9392505050565b60006020820190506156b76000830184614d9b565b92915050565b60006020820190506156d26000830184614daa565b92915050565b60006020820190506156ed6000830184614db9565b92915050565b6000602082019050818103600083015261570d8184614de6565b905092915050565b6000602082019050818103600083015261572e81614eed565b9050919050565b6000602082019050818103600083015261574e81614f2d565b9050919050565b6000602082019050818103600083015261576e81614f6d565b9050919050565b6000602082019050818103600083015261578e81614fed565b9050919050565b600060208201905081810360008301526157ae81615053565b9050919050565b600060208201905081810360008301526157ce81615093565b9050919050565b600060208201905081810360008301526157ee816150d3565b9050919050565b6000602082019050818103600083015261580e81615113565b9050919050565b6000602082019050818103600083015261582e81615153565b9050919050565b6000602082019050818103600083015261584e816151b9565b9050919050565b6000602082019050818103600083015261586e8161521f565b9050919050565b6000602082019050818103600083015261588e8161525f565b9050919050565b600060208201905081810360008301526158ae8161529f565b9050919050565b600060208201905081810360008301526158ce81615305565b9050919050565b600060208201905081810360008301526158ee81615345565b9050919050565b6000602082019050818103600083015261590e816153c5565b9050919050565b6000602082019050818103600083015261592e81615405565b9050919050565b6000602082019050818103600083015261594e81615445565b9050919050565b600060208201905061596a6000830184615518565b92915050565b60006040820190506159856000830185615518565b6159926020830184614d27565b9392505050565b60006040820190506159ae6000830185615518565b6159bb6020830184614dc8565b9392505050565b600060a0820190506159d76000830188615518565b6159e46020830187614dd7565b81810360408301526159f68186614d36565b9050615a056060830185614d27565b615a126080830184615518565b9695505050505050565b6000604082019050615a316000830185615518565b615a3e6020830184615518565b9392505050565b600061016082019050615a5b600083018a615518565b615a686020830189615518565b615a756040830188615518565b615a8260608301876154da565b615a8f60a0830186615485565b615a9d610120830185615518565b615aab610140830184615518565b98975050505050505050565b6000604051905081810181811067ffffffffffffffff82111715615ade57615add615cc4565b5b8060405250919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081549050919050565b600081519050919050565b6000600182019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000615b9882615bab565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615be082615c53565b9050919050565b6000615bf282615bf9565b9050919050565b6000615c0482615bab565b9050919050565b6000615c1682615c1d565b9050919050565b6000615c2882615bab565b9050919050565b6000615c3a82615bcb565b9050919050565b6000615c4c82615bcb565b9050919050565b6000615c5e82615c65565b9050919050565b6000615c7082615bab565b9050919050565b60005b83811015615c95578082015181840152602081019050615c7a565b83811115615ca4576000848401525b50505050565b6000615cbd615cb883615cea565b615b6d565b9050919050565bfe5b6000615cd28254615caa565b9050919050565b6000601f19601f8301169050919050565b60008160001c9050919050565b615d0081615b8d565b8114615d0b57600080fd5b50565b615d1781615b9f565b8114615d2257600080fd5b50565b615d2e81615bcb565b8114615d3957600080fd5b5056fea264697066735822122090e21131b24c81fd7e557121fcb0ed4ba25befdfb34e1de2a97499038f176a2464736f6c634300070600330000000000000000000000006c31e0f5c07b81a87120cc58c4dcc3fbafb0036700000000000000000000000062974ce5d662f9045265716a3e64eaafc258779f0000000000000000000000004a81704d8c16d9fb0d7f61b747d0b5a272badf140000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a58350d6dee8441aa42754346860e3545cc83cda000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000426a4a4b73d4cd173c9ab78d18c0d79d1717eaa900000000000000000000000000000000000000000000000000000000000000020000000000000000000000004a81704d8c16d9fb0d7f61b747d0b5a272badf140000000000000000000000004446fc4eb47f2f6586f9faab68b3498f86c0752100000000000000000000000000000000000000000000000000000000000000030000000000000000000000004a81704d8c16d9fb0d7f61b747d0b5a272badf140000000000000000000000004446fc4eb47f2f6586f9faab68b3498f86c075210000000000000000000000000039f574ee5cc39bdd162e9a88e3eb1f111baf4800000000000000000000000000000000000000000000000000000000000000043332303100000000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c80635312ea8e11610130578063af640d0f116100b8578063daea85c51161007c578063daea85c51461064d578063dd62ed3e1461067d578063e5328e06146106ad578063ef1b8140146106cb578063f887ea40146106e757610227565b8063af640d0f146105b9578063b6b55f25146105d7578063caa6fea4146105f3578063cb7956b014610611578063d389800f1461062f57610227565b80637919b71b116100ff5780637919b71b146104db5780637a4e4ecf1461050b5780638ed5f3731461053b57806395d89b411461056b578063a9059cbb1461058957610227565b80635312ea8e1461045557806361d027b314610471578063685c8ca51461048f57806370a08231146104ab57610227565b806327d9cf44116101b3578063370158ea11610182578063370158ea146103bd5780633d456f43146103e15780634162169f146104115780634b292cae1461042f5780634fa5d8541461044b57610227565b806327d9cf441461035b5780632e1a7d4d14610379578063313ce5671461039557806331e244e5146103b357610227565b80631e534906116101fa5780631e534906146102c95780631f1fcd51146102d357806323b872dd146102f157806323e1d0e81461032157806324aa95ec1461035157610227565b806306fdde031461022c578063095ea7b31461024a57806318160ddd1461027a5780631b5f9c4214610298575b600080fd5b610234610705565b60405161024191906156f3565b60405180910390f35b610264600480360381019061025f9190614b22565b61072d565b60405161027191906156a2565b60405180910390f35b61028261081f565b60405161028f9190615955565b60405180910390f35b6102b260048036038101906102ad9190614bd9565b610825565b6040516102c0929190615679565b60405180910390f35b6102d1610879565b005b6102db61091a565b6040516102e891906156bd565b60405180910390f35b61030b60048036038101906103069190614ad3565b610940565b60405161031891906156a2565b60405180910390f35b61033b60048036038101906103369190614bd9565b610cbf565b6040516103489190615955565b60405180910390f35b610359610cda565b005b610363610f24565b6040516103709190615580565b60405180910390f35b610393600480360381019061038e9190614bd9565b610f4a565b005b61039d61166a565b6040516103aa9190615955565b60405180910390f35b6103bb611673565b005b6103c561180c565b6040516103d89796959493929190615a45565b60405180910390f35b6103fb60048036038101906103f69190614bd9565b611cdc565b6040516104089190615580565b60405180910390f35b610419611d1b565b6040516104269190615580565b60405180910390f35b61044960048036038101906104449190614c7a565b611d41565b005b610453611f38565b005b61046f600480360381019061046a9190614bd9565b61211a565b005b61047961250d565b6040516104869190615580565b60405180910390f35b6104a960048036038101906104a49190614b22565b612533565b005b6104c560048036038101906104c09190614a6e565b612670565b6040516104d29190615955565b60405180910390f35b6104f560048036038101906104f09190614bd9565b612688565b6040516105029190615580565b60405180910390f35b61052560048036038101906105209190614b22565b6126c7565b60405161053291906156a2565b60405180910390f35b61055560048036038101906105509190614a6e565b6129a7565b60405161056291906156a2565b60405180910390f35b610573612adc565b60405161058091906156f3565b60405180910390f35b6105a3600480360381019061059e9190614b22565b612b04565b6040516105b091906156a2565b60405180910390f35b6105c1612b19565b6040516105ce91906156f3565b60405180910390f35b6105f160048036038101906105ec9190614bd9565b612bb7565b005b6105fb613507565b60405161060891906156a2565b60405180910390f35b61061961351a565b60405161062691906156d8565b60405180910390f35b610637613540565b60405161064491906156bd565b60405180910390f35b61066760048036038101906106629190614a6e565b613566565b60405161067491906156a2565b60405180910390f35b61069760048036038101906106929190614a97565b613599565b6040516106a49190615955565b60405180910390f35b6106b56135be565b6040516106c29190615955565b60405180910390f35b6106e560048036038101906106e09190614bd9565b613833565b005b6106ef6139cb565b6040516106fc9190615580565b60405180910390f35b606060026040516020016107199190615527565b604051602081830303815290604052905090565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161080d9190615955565b60405180910390a36001905092915050565b60035481565b6000818154811061083557600080fd5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663441a3e70600d6000600781106108c557fe5b015460006040518363ffffffff1660e01b81526004016108e6929190615999565b600060405180830381600087803b15801561090057600080fd5b505af1158015610914573d6000803e3d6000fd5b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb906158b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610a9c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610bb55781601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b2a57600080fd5b81601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cac9190615955565b60405180910390a3600190509392505050565b600d8160078110610ccf57600080fd5b016000915090505481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d61906158d5565b60405180910390fd5b600960149054906101000a900460ff16610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090615875565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e169190615580565b60206040518083038186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e669190614c02565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600d600060078110610eb457fe5b0154836040518363ffffffff1660e01b8152600401610ed4929190615a1c565b600060405180830381600087803b158015610eee57600080fd5b505af1158015610f02573d6000803e3d6000fd5b505050506000600960146101000a81548160ff02191690831515021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900460ff1660ff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550600960149054906101000a900460ff161561100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190615815565b60405180910390fd5b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561108c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611083906158b5565b60405180910390fd5b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506000600354905081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161114e9190615955565b60405180910390a36000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111b39190615580565b60206040518083038186803b1580156111cb57600080fd5b505afa1580156111df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112039190614c02565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d60006007811061125357fe5b0154306040518363ffffffff1660e01b8152600401611273929190615970565b604080518083038186803b15801561128a57600080fd5b505afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c29190614bb0565b60000151905060006112ef846112e184886139f190919063ffffffff16565b613a6190919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663441a3e70600d60006007811061133d57fe5b0154836040518363ffffffff1660e01b815260040161135d929190615a1c565b600060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113ec9190615580565b60206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c9190614c02565b9050600061148a856040518060400160405280601081526020017f4469727479207769746864726177616c0000000000000000000000000000000081525084613aab9092919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114e99291906155d2565b602060405180830381600087803b15801561150357600080fd5b505af1158015611517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190614b5e565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190615915565b60405180910390fd5b600d60046007811061158857fe5b0154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115e59190615580565b60206040518083038186803b1580156115fd57600080fd5b505afa158015611611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116359190614c02565b11156116455761164430613b06565b5b5050505050506000600160006101000a81548160ff021916908360ff16021790555050565b60006012905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa906158d5565b60405180910390fd5b600960149054906101000a900460ff1615611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a906157b5565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635312ea8e600d60006007811061179f57fe5b01546040518263ffffffff1660e01b81526004016117bd9190615955565b600060405180830381600087803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b505050506001600960146101000a81548160ff021916908315150217905550565b60008060006118196148ed565b611821614907565b6000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118819190615580565b60206040518083038186803b15801561189957600080fd5b505afa1580156118ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d19190614c02565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d60006007811061191d57fe5b0154306040518363ffffffff1660e01b815260040161193d929190615970565b604080518083038186803b15801561195457600080fd5b505afa158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c9190614bb0565b600001510190506000600354670de0b6b3a76400008302816119aa57fe5b0490506000600d6005600781106119bd57fe5b0154600d6006600781106119cd57fe5b01540360646301e13380670de0b6b3a764000085030202816119eb57fe5b049050828282600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d600060078110611a3d57fe5b0154306040518363ffffffff1660e01b8152600401611a5d929190615970565b604080518083038186803b158015611a7457600080fd5b505afa158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aac9190614bb0565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631526fe27600d600060078110611af857fe5b01546040518263ffffffff1660e01b8152600401611b169190615955565b60806040518083038186803b158015611b2e57600080fd5b505afa158015611b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b669190614b87565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015611bce57600080fd5b505afa158015611be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c069190614c02565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eba0a1da600d600060078110611c5257fe5b0154306040518363ffffffff1660e01b8152600401611c72929190615970565b60206040518083038186803b158015611c8a57600080fd5b505afa158015611c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc29190614c02565b995099509950995099509950995050505090919293949596565b60088181548110611cec57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906158d5565b60405180910390fd5b84600d600460078110611de057fe5b018190555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a08410611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906157d5565b60405180910390fd5b83600d600360078110611e7a57fe5b0181905550620186a08310611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90615855565b60405180910390fd5b82600d600260078110611ed357fe5b0181905550620186a08110611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f14906157f5565b60405180910390fd5b80600d600160078110611f2c57fe5b01819055505050505050565b6000600160009054906101000a900460ff1660ff1614611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550611fb1336129a7565b611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790615935565b60405180910390fd5b611ff8610879565b600d60046007811061200657fe5b0154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120639190615580565b60206040518083038186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b39190614c02565b116120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90615715565b60405180910390fd5b6120fc33613b06565b6000600160006101000a81548160ff021916908360ff160217905550565b6000600160009054906101000a900460ff1660ff161461216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550600960149054906101000a900460ff166121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090615895565b60405180910390fd5b80601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561225b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612252906158b5565b60405180910390fd5b6000600354905081601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161231d9190615955565b60405180910390a36000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123829190615580565b60206040518083038186803b15801561239a57600080fd5b505afa1580156123ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d29190614c02565b905060006123fb836123ed84876139f190919063ffffffff16565b613a6190919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161245a9291906155d2565b602060405180830381600087803b15801561247457600080fd5b505af1158015612488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ac9190614b5e565b6124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290615915565b60405180910390fd5b5050506000600160006101000a81548160ff021916908360ff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba906158d5565b60405180910390fd5b600060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550505050565b60146020528060005260406000206000915090505481565b6007818154811061269857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612750906158d5565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e1906158f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128b257600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516128659061556b565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5050809150506129a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461299c578273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612943929190615679565b602060405180830381600087803b15801561295d57600080fd5b505af1158015612971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129959190614b5e565b90506129a1565b600090505b92915050565b60008060008054905014156129bf5760019050612ad7565b60005b600080549050811015612ad157600081815481106129dc57fe5b906000526020600020906002020160010154600082815481106129fb57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401612a659190615580565b60206040518083038186803b158015612a7d57600080fd5b505afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190614c02565b10612ac4576001915050612ad7565b80806001019150506129c2565b50600090505b919050565b60606002604051602001612af09190615549565b604051602081830303815290604052905090565b6000612b11338484610940565b905092915050565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612baf5780601f10612b8457610100808354040283529160200191612baf565b820191906000526020600020905b815481529060010190602001808311612b9257829003601f168201915b505050505081565b6000600160009054906101000a900460ff1660ff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0390615735565b60405180910390fd5b60018060006101000a81548160ff021916908360ff160217905550600960149054906101000a900460ff1615612c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6e90615775565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612cd49190615580565b60206040518083038186803b158015612cec57600080fd5b505afa158015612d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d249190614c02565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d600060078110612d7457fe5b0154306040518363ffffffff1660e01b8152600401612d94929190615970565b604080518083038186803b158015612dab57600080fd5b505afa158015612dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de39190614bb0565b600001519050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401612e489392919061559b565b602060405180830381600087803b158015612e6257600080fd5b505af1158015612e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9a9190614b5e565b612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed090615795565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f369190615580565b60206040518083038186803b158015612f4e57600080fd5b505afa158015612f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f869190614c02565b90506000612fd4846040518060400160405280600d81526020017f4469727479206465706f7369740000000000000000000000000000000000000081525084613aab9092919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600d60006007811061302257fe5b0154836040518363ffffffff1660e01b8152600401613042929190615a1c565b600060405180830381600087803b15801561305c57600080fd5b505af1158015613070573d6000803e3d6000fd5b505050506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d6000600781106130c257fe5b0154306040518363ffffffff1660e01b81526004016130e2929190615970565b604080518083038186803b1580156130f957600080fd5b505afa15801561310d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131319190614bb0565b6000015190506000613183856040518060400160405280600b81526020017f4469727479207374616b6500000000000000000000000000000000000000000081525084613aab9092919063ffffffff16565b90506000806003541161319957819050806131c4565b6131c0866131b2600354856139f190919063ffffffff16565b613a6190919063ffffffff16565b9050805b5080600360008282540192505081905550600080600d6001600781106131e657fe5b0154111561323d576131f7336129a7565b61323757613232620f4240613224600d60016007811061321357fe5b0154856139f190919063ffffffff16565b613a6190919063ffffffff16565b61323a565b60005b90505b600081111561333e578060146000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133359190615955565b60405180910390a35b61335181836147ed90919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61340084866147ed90919063ffffffff16565b60405161340d9190615955565b60405180910390a3600d60046007811061342357fe5b0154600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016134809190615580565b60206040518083038186803b15801561349857600080fd5b505afa1580156134ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d09190614c02565b11156134e0576134df30613b06565b5b50505050505050506000600160006101000a81548160ff021916908360ff16021790555050565b600960149054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000613592827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61072d565b9050919050565b6015602052816000526040600020602052806000526040600020600091509150505481565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016136439190615580565b60206040518083038186803b15801561365b57600080fd5b505afa15801561366f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136939190614c02565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d6000600781106136df57fe5b0154306040518363ffffffff1660e01b81526004016136ff929190615970565b604080518083038186803b15801561371657600080fd5b505afa15801561372a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374e9190614bb0565b6000015101905061382c670de0b6b3a764000061381e838573ffffffffffffffffffffffffffffffffffffffff166333281305600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016137c09190615580565b60206040518083038186803b1580156137d857600080fd5b505afa1580156137ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138109190614c02565b6139f190919063ffffffff16565b613a6190919063ffffffff16565b9250505090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146138c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ba906158d5565b60405180910390fd5b6000600160008054905003815481106138d857fe5b9060005260206000209060020201600082815481106138f357fe5b90600052602060002090600202016000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201548160010155905050600080548061398057fe5b6001900381819060005260206000209060020201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090555050905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080831415613a045760009050613a5b565b6000828402905082848281613a1557fe5b0414613a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4d90615835565b60405180910390fd5b809150505b92915050565b6000613aa383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614837565b905092915050565b6000838311158290613af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aea91906156f3565b60405180910390fd5b5060008385039050809150509392505050565b600960149054906101000a900460ff1615613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90615815565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760016007805490500381548110613b9457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600860016008805490500381548110613bd857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000613cc56002600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613c679190615580565b60206040518083038186803b158015613c7f57600080fd5b505afa158015613c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb79190614c02565b613a6190919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff16635c11d795826001600730426040518663ffffffff1660e01b8152600401613d0a9594939291906159c2565b600060405180830381600087803b158015613d2457600080fd5b505af1158015613d38573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16635c11d795826001600830426040518663ffffffff1660e01b8152600401613d7f9594939291906159c2565b600060405180830381600087803b158015613d9957600080fd5b505af1158015613dad573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663e8e3370084848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e089190615580565b60206040518083038186803b158015613e2057600080fd5b505afa158015613e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e589190614c02565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e919190615580565b60206040518083038186803b158015613ea957600080fd5b505afa158015613ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ee19190614c02565b613f906064613f82605a8c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613f249190615580565b60206040518083038186803b158015613f3c57600080fd5b505afa158015613f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f749190614c02565b6139f190919063ffffffff16565b613a6190919063ffffffff16565b61403f6064614031605a8c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613fd39190615580565b60206040518083038186803b158015613feb57600080fd5b505afa158015613fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140239190614c02565b6139f190919063ffffffff16565b613a6190919063ffffffff16565b30426040518963ffffffff1660e01b81526004016140649897969594939291906155fb565b606060405180830381600087803b15801561407e57600080fd5b505af1158015614092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b69190614c2b565b5050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016141169190615580565b60206040518083038186803b15801561412e57600080fd5b505afa158015614142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141669190614c02565b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d6000600781106141b657fe5b0154306040518363ffffffff1660e01b81526004016141d6929190615970565b604080518083038186803b1580156141ed57600080fd5b505afa158015614201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142259190614bb0565b600001519050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600d60006007811061427757fe5b0154846040518363ffffffff1660e01b8152600401614297929190615a1c565b600060405180830381600087803b1580156142b157600080fd5b505af11580156142c5573d6000803e3d6000fd5b505050506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393f1a40b600d60006007811061431757fe5b0154306040518363ffffffff1660e01b8152600401614337929190615970565b604080518083038186803b15801561434e57600080fd5b505afa158015614362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143869190614bb0565b60000151905060006143d8836040518060400160405280600b81526020017f4469727479207374616b6500000000000000000000000000000000000000000081525084613aab9092919063ffffffff16565b9050600080600d6005600781106143eb57fe5b01541415614412574267ffffffffffffffff16600d60056007811061440c57fe5b01819055505b4267ffffffffffffffff16600d60066007811061442b57fe5b0181905550600060035411614443578190508061446e565b61446a8461445c600354856139f190919063ffffffff16565b613a6190919063ffffffff16565b9050805b506144a6620f4240614498600d60026007811061448757fe5b0154846139f190919063ffffffff16565b613a6190919063ffffffff16565b60146000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060003073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161461454f578a614573565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90506145ac620f424061459e600d60036007811061458d57fe5b0154856139f190919063ffffffff16565b613a6190919063ffffffff16565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550614677614632620f4240614624600d60036007811061461357fe5b0154866139f190919063ffffffff16565b613a6190919063ffffffff16565b614669620f424061465b600d60026007811061464a57fe5b0154876139f190919063ffffffff16565b613a6190919063ffffffff16565b61489890919063ffffffff16565b600360008282540192505081905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61472f620f4240614721600d60026007811061471057fe5b0154886139f190919063ffffffff16565b613a6190919063ffffffff16565b60405161473c9190615955565b60405180910390a38073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6147cb620f42406147bd600d6003600781106147ac57fe5b0154886139f190919063ffffffff16565b613a6190919063ffffffff16565b6040516147d89190615955565b60405180910390a35050505050505050505050565b600061482f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613aab565b905092915050565b6000808311829061487e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161487591906156f3565b60405180910390fd5b50600083858161488a57fe5b049050809150509392505050565b6000808284019050838110156148e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016148da90615755565b60405180910390fd5b8091505092915050565b604051806040016040528060008152602001600081525090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b60008135905061495481615cf7565b92915050565b60008151905061496981615cf7565b92915050565b60008151905061497e81615d0e565b92915050565b60006080828403121561499657600080fd5b6149a06080615ab7565b905060006149b08482850161495a565b60008301525060206149c484828501614a59565b60208301525060406149d884828501614a59565b60408301525060606149ec84828501614a59565b60608301525092915050565b600060408284031215614a0a57600080fd5b614a146040615ab7565b90506000614a2484828501614a59565b6000830152506020614a3884828501614a59565b60208301525092915050565b600081359050614a5381615d25565b92915050565b600081519050614a6881615d25565b92915050565b600060208284031215614a8057600080fd5b6000614a8e84828501614945565b91505092915050565b60008060408385031215614aaa57600080fd5b6000614ab885828601614945565b9250506020614ac985828601614945565b9150509250929050565b600080600060608486031215614ae857600080fd5b6000614af686828701614945565b9350506020614b0786828701614945565b9250506040614b1886828701614a44565b9150509250925092565b60008060408385031215614b3557600080fd5b6000614b4385828601614945565b9250506020614b5485828601614a44565b9150509250929050565b600060208284031215614b7057600080fd5b6000614b7e8482850161496f565b91505092915050565b600060808284031215614b9957600080fd5b6000614ba784828501614984565b91505092915050565b600060408284031215614bc257600080fd5b6000614bd0848285016149f8565b91505092915050565b600060208284031215614beb57600080fd5b6000614bf984828501614a44565b91505092915050565b600060208284031215614c1457600080fd5b6000614c2284828501614a59565b91505092915050565b600080600060608486031215614c4057600080fd5b6000614c4e86828701614a59565b9350506020614c5f86828701614a59565b9250506040614c7086828701614a59565b9150509250925092565b600080600080600060a08688031215614c9257600080fd5b6000614ca088828901614a44565b9550506020614cb188828901614a44565b9450506040614cc288828901614a44565b9350506060614cd388828901614945565b9250506080614ce488828901614a44565b9150509295509295909350565b6000614cfd8383614d18565b60208301905092915050565b614d1281615bd5565b82525050565b614d2181615b8d565b82525050565b614d3081615b8d565b82525050565b6000614d4182615b12565b614d4b8185615b35565b9350614d5683615ae8565b8060005b83811015614d8e57614d6b82615cc6565b614d758882614cf1565b9750614d8083615b28565b925050600181019050614d5a565b5085935050505092915050565b614da481615b9f565b82525050565b614db381615be7565b82525050565b614dc281615c0b565b82525050565b614dd181615c2f565b82525050565b614de081615c41565b82525050565b6000614df182615b1d565b614dfb8185615b51565b9350614e0b818560208601615c77565b614e1481615cd9565b840191505092915050565b600081546001811660008114614e3c5760018114614e6157614ea5565b607f6002830416614e4d8187615b62565b955060ff1983168652808601935050614ea5565b60028204614e6f8187615b62565b9550614e7a85615afd565b60005b82811015614e9c57815481890152600182019150602081019050614e7d565b82880195505050505b505092915050565b6000614eba600f83615b62565b91507f6b63632e677572752f475241494e2f00000000000000000000000000000000006000830152600f82019050919050565b6000614efa601483615b51565b91507f4e6f74206d75636820776f726b20746f20646f210000000000000000000000006000830152602082019050919050565b6000614f3a600383615b51565b91507f21524700000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614f7a601b83615b51565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614fba600683615b62565b91507f475241494e2300000000000000000000000000000000000000000000000000006000830152600682019050919050565b6000614ffa602783615b51565b91507f49747320616e20656d657267656e63792e20506c6561736520646f6e2774206460008301527f65706f7369742e000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615060601183615b51565b91507f556e61626c6520746f206f6e626f6172640000000000000000000000000000006000830152602082019050919050565b60006150a0601b83615b51565b91507f456d657267656e637920616c7265616479206465636c617265642e00000000006000830152602082019050919050565b60006150e0600983615b51565b91507f2177693a206869676800000000000000000000000000000000000000000000006000830152602082019050919050565b6000615120600983615b51565b91507f2164663a206869676800000000000000000000000000000000000000000000006000830152602082019050919050565b6000615160603183615b51565b91507f49747320616e20656d657267656e63792e2055736520656d657267656e63795760008301527f69746864726177282920706c656173652e0000000000000000000000000000006020830152604082019050919050565b60006151c6602183615b51565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061522c600983615b51565b91507f2170663a206869676800000000000000000000000000000000000000000000006000830152602082019050919050565b600061526c601783615b51565b91507f456d657267656e6379206e6f74206465636c617265642e0000000000000000006000830152602082019050919050565b60006152ac602d83615b51565b91507f497473206e6f7420616e20656d657267656e63792e205573652077697468647260008301527f6177282920696e73746561642e000000000000000000000000000000000000006020830152604082019050919050565b6000615312601483615b51565b91507f496e73756666696369656e742042616c616e63650000000000000000000000006000830152602082019050919050565b6000615352603583615b51565b91507f4f6e6c7920452e4c2e492e542e452e20442e412e4f2e2054726561737572792060008301527f63616e20726573637565207472656173757265732100000000000000000000006020830152604082019050919050565b60006153b8600083615b46565b9150600082019050919050565b60006153d2601c83615b51565b91507f46756e647320617265205361667520696e20656d657267656e637921000000006000830152602082019050919050565b6000615412601183615b51565b91507f556e61626c6520746f206465626f6172640000000000000000000000000000006000830152602082019050919050565b6000615452600c83615b51565b91507f456c69746573206f6e6c792100000000000000000000000000000000000000006000830152602082019050919050565b60808201600082015161549b6000850182614d18565b5060208201516154ae6020850182615509565b5060408201516154c16040850182615509565b5060608201516154d46060850182615509565b50505050565b6040820160008201516154f06000850182615509565b5060208201516155036020850182615509565b50505050565b61551281615bcb565b82525050565b61552181615bcb565b82525050565b600061553282614ead565b915061553e8284614e1f565b915081905092915050565b600061555482614fad565b91506155608284614e1f565b915081905092915050565b6000615576826153ab565b9150819050919050565b60006020820190506155956000830184614d27565b92915050565b60006060820190506155b06000830186614d09565b6155bd6020830185614d27565b6155ca6040830184615518565b949350505050565b60006040820190506155e76000830185614d09565b6155f46020830184615518565b9392505050565b600061010082019050615611600083018b614d27565b61561e602083018a614d27565b61562b6040830189615518565b6156386060830188615518565b6156456080830187615518565b61565260a0830186615518565b61565f60c0830185614d27565b61566c60e0830184615518565b9998505050505050505050565b600060408201905061568e6000830185614d27565b61569b6020830184615518565b9392505050565b60006020820190506156b76000830184614d9b565b92915050565b60006020820190506156d26000830184614daa565b92915050565b60006020820190506156ed6000830184614db9565b92915050565b6000602082019050818103600083015261570d8184614de6565b905092915050565b6000602082019050818103600083015261572e81614eed565b9050919050565b6000602082019050818103600083015261574e81614f2d565b9050919050565b6000602082019050818103600083015261576e81614f6d565b9050919050565b6000602082019050818103600083015261578e81614fed565b9050919050565b600060208201905081810360008301526157ae81615053565b9050919050565b600060208201905081810360008301526157ce81615093565b9050919050565b600060208201905081810360008301526157ee816150d3565b9050919050565b6000602082019050818103600083015261580e81615113565b9050919050565b6000602082019050818103600083015261582e81615153565b9050919050565b6000602082019050818103600083015261584e816151b9565b9050919050565b6000602082019050818103600083015261586e8161521f565b9050919050565b6000602082019050818103600083015261588e8161525f565b9050919050565b600060208201905081810360008301526158ae8161529f565b9050919050565b600060208201905081810360008301526158ce81615305565b9050919050565b600060208201905081810360008301526158ee81615345565b9050919050565b6000602082019050818103600083015261590e816153c5565b9050919050565b6000602082019050818103600083015261592e81615405565b9050919050565b6000602082019050818103600083015261594e81615445565b9050919050565b600060208201905061596a6000830184615518565b92915050565b60006040820190506159856000830185615518565b6159926020830184614d27565b9392505050565b60006040820190506159ae6000830185615518565b6159bb6020830184614dc8565b9392505050565b600060a0820190506159d76000830188615518565b6159e46020830187614dd7565b81810360408301526159f68186614d36565b9050615a056060830185614d27565b615a126080830184615518565b9695505050505050565b6000604082019050615a316000830185615518565b615a3e6020830184615518565b9392505050565b600061016082019050615a5b600083018a615518565b615a686020830189615518565b615a756040830188615518565b615a8260608301876154da565b615a8f60a0830186615485565b615a9d610120830185615518565b615aab610140830184615518565b98975050505050505050565b6000604051905081810181811067ffffffffffffffff82111715615ade57615add615cc4565b5b8060405250919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081549050919050565b600081519050919050565b6000600182019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000615b9882615bab565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615be082615c53565b9050919050565b6000615bf282615bf9565b9050919050565b6000615c0482615bab565b9050919050565b6000615c1682615c1d565b9050919050565b6000615c2882615bab565b9050919050565b6000615c3a82615bcb565b9050919050565b6000615c4c82615bcb565b9050919050565b6000615c5e82615c65565b9050919050565b6000615c7082615bab565b9050919050565b60005b83811015615c95578082015181840152602081019050615c7a565b83811115615ca4576000848401525b50505050565b6000615cbd615cb883615cea565b615b6d565b9050919050565bfe5b6000615cd28254615caa565b9050919050565b6000601f19601f8301169050919050565b60008160001c9050919050565b615d0081615b8d565b8114615d0b57600080fd5b50565b615d1781615b9f565b8114615d2257600080fd5b50565b615d2e81615bcb565b8114615d3957600080fd5b5056fea264697066735822122090e21131b24c81fd7e557121fcb0ed4ba25befdfb34e1de2a97499038f176a2464736f6c63430007060033