FTM Price: $0.98 (-4.34%)
Gas: 113 GWei

Contract

0xa51192Fecb7Debf9D05563eb4734EFFBfb629562
 

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo0 FTM

FTM Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
Deposit485239202022-10-06 3:56:51540 days ago1665028611IN
0xa51192Fe...Bfb629562
0 FTM0.000941052.03044729
0x60018054485218352022-10-06 3:19:30540 days ago1665026370IN
 Create: Granary
0 FTM0.009336671.5

Latest 1 internal transaction

Parent Txn Hash Block From To Value
485218352022-10-06 3:19:30540 days ago1665026370  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Granary

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-10-06
*/

/*


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  M   O  G    G   U    U  RR R      U    U
FF       TTT   M     M       GGGGG    UUUU   RR  RRR    UUUU


FFFFF    M   M    CCCCC       GGGGG  U    U  RRRRR     U    U
FF      M M M M  CC          G       U    U  RR   R    U    U
FFFFF   M  M  M  CC         G  GGG   U    U  RRRRR     U    U
FF      M  M  M  CC      O  G    G   U    U  RR R      U    U
FF      M     M  CCCCCC      GGGGG    UUUU   RR  RRR    UUUU


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


 M   M  TTTTTTT  V     V      GGGGG  U    U  RRRRR     U    U
M M M M   TTT    V     V     G       U    U  RR   R    U    U
M  M  M   TTT     V   V     G  GGG   U    U  RRRRR     U    U
M     M   TTT      V V   O  G    G   U    U  RR R      U    U
M     M   TTT       V        GGGGG    UUUU   RR  RRR    UUUU


EEEEEEE   CCCCC  H    H       GGGGG  U    U  RRRRR     U    U
EE       CC      H    H      G       U    U  RR   R    U    U
EEEEEE   CC      HHHHHH     G  GGG   U    U  RRRRR     U    U
EE       CC      H    H  O  G    G   U    U  RR R      U    U
EEEEEEE  CCCCCC  H    H      GGGGG    UUUU   RR  RRR    UUUU




					*************************
					**                     **
					**  GRANARY & WORKERS  **
					**	  ftm.guru/GRAIN   **
					**  kcc.guru/kompound  **
					**	  mtv.guru/GRAIN   **
					**	  ech.guru/GRAIN   **
					**                     **
					*************************


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 -
	- 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
	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);
	function p_lpt_usd(address u,address lp) external view returns(uint256);
	function p_t_coin_usd(address lp) external view returns(uint256);
	function coinusd() external view returns(uint256);
}

interface IMasterchef {	//NeoPool

	// Info of each user.
	struct UserInfo {
		uint256 amountLP;   // How many mLQDR-LQDR LP tokens the user has provided.
		uint256 amount;	 // How many mLQDR tokens the user has provided.
		uint256 rewardDebt; // Reward debt. See explanation below.
		uint256 rewardDebtMorph; // Reward debt. See explanation below.
	}

	function userInfo(address) external view returns (UserInfo memory);

	function getRewardPerSec() external view returns (uint, uint);

	function getRewardRates() external view returns (uint wftmRewards, uint morphRewards);

	function pendingMorph(address _user) external view returns (uint256);

	function pendingReward(address _user) external view returns (uint256);

	function outstandingRewards() external view returns (uint256 outstandingWFTM, uint256 outstandingMorph);	//What the Neo Pool earned from the MorpheusChef

	function updatePool() external;	//Internal booking of Neo Pool

	function deposit(uint256 _amount) external;

	function withdraw(uint256 _amount) external;

}

interface IM2P {

	function getSwapRatio() external view returns (uint256);

	function swap(uint) external;

	function swapMax() external;
}

interface IWrap {
	function deposit(uint256 _amount) external;
}

interface IAsset {
    // IBX placeholder for address-type
}

interface IBX {

	enum SwapKind { GIVEN_IN, GIVEN_OUT }

	struct SingleSwap {
    	bytes32 poolid;
    	SwapKind kind;
    	address assetIn;
    	address assetOut;
    	uint256 amount;
    	bytes userData;	 // abi.encode(0)
	}

	struct FundManagement {
    	address sender;
    	bool fromInternalBalance;
    	address recipient;
    	bool toInternalBalance;
	}

    function swap(SingleSwap memory singleSwap, FundManagement memory funds, uint256 limit, uint256 deadline) external returns (uint256);


	enum JoinKind { INIT, EXACT_TOKENS_IN_FOR_BPT_OUT, TOKEN_IN_FOR_EXACT_BPT_OUT }
	//Can be overriden using index inside the userData param
	//0 instead of JoinKind.INIT, 1 for JoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT ...

	struct JoinPoolRequest {
    	IAsset[] assets;
    	uint256[] maxAmountsIn;
    	bytes userData;	//	abi.encode ( enum JoinKind, uint[] amounts, uint minLP )
    	bool fromInternalBalance;
	}

	function joinPool(bytes32 poolId, address sender, address recipient, JoinPoolRequest memory request) external payable;

	function getPoolTokens(bytes32 poolId) external view returns(address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock);



    struct BatchSwapStep {
        bytes32 poolId;
        uint256 assetInIndex;
        uint256 assetOutIndex;
        uint256 amount;
        bytes userData;
    }

    function queryBatchSwap(
        SwapKind kind,
        BatchSwapStep[] memory swaps,
        IAsset[] memory assets,
        FundManagement memory funds
    ) external returns (int256[] memory assetDeltas);

    function batchSwap(
        SwapKind kind,
        BatchSwapStep[] memory swaps,
        IAsset[] memory assets,
        FundManagement memory funds,
        int256[] memory limits,
        uint256 deadline
    ) external payable returns (int256[] memory);

}


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 {

	//UNISWAP
	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);

	//SOLIDLY
	struct route {
		address from;
		address to;
		bool stable;
	}
	function swapExactTokensForTokens(
		uint256 amountIn,
		uint256 amountOutMin,
		route[] calldata routes,
		address to,
		uint256 deadline
	) external returns (uint256[] memory amounts);
}
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 (string memory _id)
	{
		want=IERC20( alladdr[15] );
		mc=IMasterchef( alladdr[16] );
		earn.push( alladdr[1]) ;
		earn.push( alladdr[2]) ;

		id=_id;//GRAIN#ID
		utvl=alladdr[17];

		//Approvals
		//Coverter to change Morph to Pills
		IERC20(alladdr[2]).approve(alladdr[6],uint256(-1));
		//Approved routes to peddle pills
		IERC20(alladdr[3]).approve( alladdr[7], uint256(-1));
		IERC20(alladdr[3]).approve( alladdr[8], uint256(-1));
		//Approved routes to enjoy the Opera
		IERC20(alladdr[1]).approve( alladdr[13], uint256(-1));
		IERC20(alladdr[1]).approve( alladdr[9], uint256(-1));
		//Approved MorpheuSS to Drink.. mmm.. LiquidS
		IERC20(alladdr[4]).approve( alladdr[14], uint256(-1));
		IERC20(alladdr[5]).approve( alladdr[14], uint256(-1));
		//Approved Pirate-morphing of Liquids
		IERC20(alladdr[4]).approve( alladdr[5], uint256(-1));
		//Approved Neo's Drive to the Matrix
		IERC20(address(want)).approve(address(mc),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(false);}//When nobody is an Elite, well.. then.. nobody 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("ftm.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;
	address[] public earn;
	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[10] 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%
		1e10,//mw		4	   config, default 1 (near zero)
		0,	//ct[0]		5	   nonce, then constant
		0,	//ct[n]		6	   up only
		0,	//ct[n-1]	7	   up only
		0,	//aum[n]	8	   last
		0	//aum[n-1]	9	   previous
	];

	address[19] public alladdr = [
		0x85660a3538579fDd27DC77D0F22D0c42B92D8114,	//	0	MLP
		0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83,	//	1	WFTM
		0x0789fF5bA37f72ABC4D561D00648acaDC897b32d,	//	2	MORPH
		0xB66b5D38E183De42F21e92aBcAF3c712dd5d6286,	//	3	PILLS
		0x10b620b2dbAC4Faa7D7FFD71Da486f5D44cd86f9,	//	4	LQDR;
		0xCa3C69622E22524fF2b6cC24Ee7e654bbF91578a,	//	5	mLQDR
		0x0C35b3B57cDE4a3007398045B274548A6592E9d0,	//	6	MORPH to PILLS Swapper
		0x8aC868293D97761A1fED6d4A01E9FF17C5594Aa3,	//	7	MorpheusSwap (Pancake)
		0x16327E3FbDaCA3bcF7E38F5Af2599D2DDc33aE52,	//	8	SpiritSwap (Pancake)
		0x09855B4ef0b9df961ED097EF50172be3e6F13665,	//	9	SpiritSwap V2 (Solidly)
		0xE5343E1eda3dc45E73468F9fa5417F0375f45127,	//	10	PILLS-FTM Morpheus LP
		0x9C775D3D66167685B2A3F4567B548567D2875350, //	11	PILLS-FTM Spirit LP
		0xE42Bb367c958e0E624C164f2491c37d8Fd713515,	//	12	LQDR-FTM Spirit V2 LP
		0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce,	//	13	Beethoven-x Vault (Balancer)
		0x4B69A8913A90cAB949218095717BAfCCeF6C39FC,	//	14	Morpheus Vault (Balancer)
		0x85660a3538579fDd27DC77D0F22D0c42B92D8114,	//	15	MPT-mLQDR-LQDR
		0x728A9227fFa9dea5E93D2AE5461D6e8B793D83A1,	//	16	Neo Pool
		0x5C652A94c672f8F6D021417bB5eE75c322ecf1Fc,	//	17	TvlGuru
		0xe533779d1e6fF3D5cfCEeD3DE761852E6C93DC8b	//	18	vAMM-mLQDR/wFTM (Solidly)
	];

	//Using arrays to avoid "Stack too deep!" errors
	bytes32[2] public allb32 = [
		bytes32(0x5e02ab5699549675a6d3beeb92a62782712d0509000200000000000000000138),	//	0	BPT-Pirate
		0x85660a3538579fdd27dc77d0f22d0c42b92d8114000200000000000000000001				//	1	MPT-mLQDR-LQDR
	];

	event  Approval(address indexed src, address indexed guy, uint wad);
	event  Transfer(address indexed src, address indexed dst, uint wad);
	event	WorkDone(address indexed __ben, uint __tvl, uint __pf, uint __wi, uint __when, uint __aum, uint __ts, uint __price);
	event	Deposit(address indexed user, uint wants, uint grains);
	event	Withdraw(address indexed user, uint wants, uint grains);
	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;
	}

	function deposit(uint256 _amt) public rg
	{
		require(!emergency,"Its an emergency. Please don't deposit.");
		//require(isContract(msg.sender)==false,"Humans only");
		//require(msg.sender==tx.origin,"Humans only");

		//hardWork()
		//allnums[4]===mw, min work : smallest harvest
		salvage();
		if(IERC20(earn[0]).balanceOf(address(this)) > allnums[4]) {work(address(this));}

		//Some fancy math to take care of Fee-on-Transfer tokens
		uint256 vbb = want.balanceOf(address(this));
		uint256 mcbb = mc.userInfo(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(D);
		//Some more fancy math to take care of Deposit Fee
		uint256 mcba = mc.userInfo(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 Deposit(msg.sender, _amt, _mint.sub(_fee));
		emit Transfer(address(0), msg.sender, _mint.sub(_fee));
	}

	function withdraw(uint256 _amt) public rg
	{
		require(!emergency,"Its an emergency. Use emergencyWithdraw() please.");
		require(balanceOf[msg.sender] >= _amt,"Insufficient Balance");

		//hardWork()
		//allnums[4]===mw, min work : smallest harvest
		salvage();
		if(IERC20(earn[0]).balanceOf(address(this)) > allnums[4]) {work(address(this));}

		//Burn _amt of Vault Tokens
		balanceOf[msg.sender] -= _amt;
		uint256 ts = totalSupply;	//cash for future needs
		totalSupply -= _amt;
		emit Transfer(msg.sender, address(0), _amt);
		uint256 vbb = want.balanceOf(address(this));
		uint256 mcbb = mc.userInfo(address(this)).amount;
		// W  = DepositsPerShare * SharesBurnt
		uint256 W = ( _amt.mul(mcbb) ).div(ts);
		mc.withdraw(W);
		uint256 vba = want.balanceOf(address(this));
		uint256 D = vba.sub(vbb,"Dirty withdrawal");
	   	require(want.transfer(msg.sender,D), "Unable to deboard");
		emit Withdraw(msg.sender, D, _amt);
	}

	function doHardWork() public rg
	{
		if(Eliteness.length > 0){require(eliteness(msg.sender),"Elites only!");}
		salvage();
		require(IERC20(earn[0]).balanceOf(address(this)) > allnums[4], "Not much work to do!");
		work(msg.sender);
	}

	function salvage() public
	{
		//harvest()
		mc.deposit(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()

		//Convert all MORPH to PILLS
		IM2P(alladdr[6]).swapMax();

		//Take Pills to hallucinate upon Fantom of the Opera
		{
			//Doing JIT™ (Just-in-Time) Psuedo DEX-aggregation
			uint[3] memory dj_morph = [
				IERC20(alladdr[3]).balanceOf(address(this)),	//Current Prescribed Dosage
				IERC20(alladdr[3]).balanceOf( alladdr[10] ),	//PILLS offered by Morpheus
				IERC20(alladdr[3]).balanceOf( alladdr[11] )     //Smells like Pill Spirit
			];

			address[] memory swapt;
			swapt[0] = alladdr[3];
			swapt[1] = alladdr[1];
			IRouter(alladdr[7])
			.swapExactTokensForTokensSupportingFeeOnTransferTokens(
				( dj_morph[0] * dj_morph[1] ) / ( dj_morph[1] + dj_morph[2] ),	//auto-floored
				1,
				swapt,
				address(this),
				block.timestamp
			);

			IRouter(alladdr[8])
			.swapExactTokensForTokensSupportingFeeOnTransferTokens(
				( dj_morph[0] * dj_morph[2] ) / ( dj_morph[1] + dj_morph[2] ),	//auto-floored
				1,
				swapt,
				address(this),
				block.timestamp
			);
		}

		//Get Drunk and Drive towards the shady farmer
		{
			//Doing JIT™ (Just-in-Time) Psuedo DEX-aggregation
			uint[3] memory dj_lqdr = [
				IERC20(alladdr[4]).balanceOf(address(this)),	//Current Prescribed Liquids
				IERC20(alladdr[4]).balanceOf( alladdr[12] ),	//The Driving Spirit
				1	//Inside Beethoven's Liquid Closet
			];

			(,uint256[] memory _bxb,) = IBX(alladdr[13]).getPoolTokens(allb32[0]);
			dj_lqdr[2] = _bxb[0];

			IRouter.route[] memory swapr;
			swapr[0] = IRouter.route({
				from: alladdr[1],
				to: alladdr[4],
				stable:false
				});
			IRouter(alladdr[9])
			.swapExactTokensForTokens(
				( dj_lqdr[0] * dj_lqdr[1] ) / ( dj_lqdr[1] + dj_lqdr[2] ),	//auto-floored
				1,
				swapr,
				address(this),
				block.timestamp
			);

			IBX.FundManagement memory FML = IBX.FundManagement({
				sender:             address(this),
				fromInternalBalance:false,
				recipient:          payable(address(this)),
				toInternalBalance:  false
			});
			IBX.SingleSwap memory F2L = IBX.SingleSwap({
				poolid: 	allb32[0],
				kind:	    IBX.SwapKind.GIVEN_IN,
				assetIn:    alladdr[1],
				assetOut:   alladdr[4],
				amount:     ( dj_lqdr[0] * dj_lqdr[2] ) / ( dj_lqdr[1] + dj_lqdr[2] ),	//auto-floored
				userData:   abi.encode(0)
			});
			IBX(alladdr[13]).swap(F2L, FML, 1, block.timestamp);
		}


		//	Wake up, Neo...  Make the choice!
		{
			(,uint256[] memory r,) = IBX(alladdr[14]).getPoolTokens(allb32[1]);
			uint L = IERC20(alladdr[4]).balanceOf(address(this));

			//The RED PILL : Buy some mLQDR from the StableSwap DEX
			if(r[0] < r[1]) {

				if( L < r[1]-r[0] ) {

        			IAsset[] memory T = new IAsset[](2);
        			T[0] = IAsset(alladdr[4]);
        			T[1] = IAsset(alladdr[5]);
					uint256[] memory A = new uint256[](2);
        			A[0] = L;
        			A[1] = 0;

					bytes memory U = abi.encode(1, A, 1);
					//EXACT_TOKENS_IN_FOR_BPT_OUT (=enum JoinKind @1) "+" amountsIn (=A) "+" minimumBPT (1 = 10^-18 BPT)

					IBX.JoinPoolRequest memory R = IBX.JoinPoolRequest({	//T,A,U, fib ==> R
						assets:	 			T,
						maxAmountsIn:		A,	//amounts=amounts since we want to give it ALL, no slippage
						userData:			U,
						fromInternalBalance:false
					});

					IBX(alladdr[14]).joinPool( allb32[1], address(this), address(this), R);
				}

				else if ( L > r[1]-r[0] ) {

					IWrap( alladdr[5] ).deposit( ( L - (r[1] - r[0]) ) / 2 );

        			IAsset[] memory T = new IAsset[](2);
        			T[0] = IAsset(alladdr[4]);
        			T[1] = IAsset(alladdr[5]);
					uint256[] memory A = new uint256[](2);
        			A[0] = IERC20( alladdr[4] ).balanceOf(address(this));
        			A[1] = IERC20( alladdr[5] ).balanceOf(address(this));

					bytes memory U = abi.encode(1, A, 1);
					//EXACT_TOKENS_IN_FOR_BPT_OUT (=enum JoinKind @1) "+" amountsIn (=A) "+" minimumBPT (1 = 10^-18 BPT)

					IBX.JoinPoolRequest memory R = IBX.JoinPoolRequest({	//T,A,U, fib ==> R
						assets:	 			T,
						maxAmountsIn:		A,	//amounts=amounts since we want to give it ALL, no slippage
						userData:			U,
						fromInternalBalance:false
					});

					IBX(alladdr[14]).joinPool( allb32[1], address(this), address(this), R);
					//pegged now
				}
			}


			//The Blue PILL : Mint some new mLQDR using the purchased LQDR
			if(r[0]>r[1]) {

				if(L < r[0]-r[1]) {

					IWrap( alladdr[5] ).deposit( L );

        			IAsset[] memory T = new IAsset[](2);
        			T[0] = IAsset(alladdr[4]);
        			T[1] = IAsset(alladdr[5]);
					uint256[] memory A = new uint256[](2);
        			A[0] = 0;
        			A[1] = IERC20( alladdr[5] ).balanceOf(address(this));

					bytes memory U = abi.encode(1, A, 1);
					//EXACT_TOKENS_IN_FOR_BPT_OUT (=enum JoinKind @1) "+" amountsIn (=A) "+" minimumBPT (1 = 10^-18 BPT)

					IBX.JoinPoolRequest memory R = IBX.JoinPoolRequest({	//T,A,U, fib ==> R
						assets:	 			T,
						maxAmountsIn:		A,	//amounts=amounts since we want to give it ALL, no slippage
						userData:			U,
						fromInternalBalance:false
					});

					IBX(alladdr[14]).joinPool( allb32[1], address(this), address(this), R);
				}

				else if(L > r[0]-r[1]) {

					IWrap( alladdr[5] ).deposit( (L + r[0]-r[1]) / 2 );

        			IAsset[] memory T = new IAsset[](2);
        			T[0] = IAsset(alladdr[4]);
        			T[1] = IAsset(alladdr[5]);
					uint256[] memory A = new uint256[](2);
        			A[0] = IERC20( alladdr[4] ).balanceOf(address(this));
        			A[1] = IERC20( alladdr[5] ).balanceOf(address(this));

					bytes memory U = abi.encode(1, A, 1);
					//EXACT_TOKENS_IN_FOR_BPT_OUT (=enum JoinKind @1) "+" amountsIn (=A) "+" minimumBPT (1 = 10^-18 BPT)

					IBX.JoinPoolRequest memory R = IBX.JoinPoolRequest({	//T,A,U, fib ==> R
						assets:	 			T,
						maxAmountsIn:		A,	//amounts=amounts since we want to give it ALL, no slippage
						userData:			U,
						fromInternalBalance:false
					});

					IBX(alladdr[14]).joinPool( allb32[1], address(this), address(this), R);
					//pegged now
				}
			}

		}




		uint256 D = want.balanceOf(address(this));
		uint256 mcbb = mc.userInfo(address(this)).amount;
		mc.deposit(D);
		uint256 mcba = mc.userInfo(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);allnums[8]=aum();}//only on the first run
		allnums[7]=allnums[6];allnums[6]=uint64(block.timestamp);
		allnums[9]=allnums[8];allnums[8]=aum();
		(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));


		uint _aum_ = aum();
		uint _tvl_ = tvl();
		uint _ts_ = totalSupply;
		if (block.timestamp >= harvestLog[harvestLog.length - 1].timestamp + 60) {
            harvestLog.push(
                Harvest({
                    timestamp: block.timestamp,
                    //assets: _aum_,
                    //shares: ts,
                    price: (_aum_*1e18) / _ts_
                    //tvl: _tvl_
                })
            );
        }

		//To paint them nice cHaRtZ_/^.^/`-*
		emit WorkDone(
			ben, //Benefeciary
			_tvl_,
			(_mint.mul(allnums[2])).div(1e6),	//Performace fee
			(_mint.mul(allnums[3])).div(1e6),	//Worker Incentive
			block.timestamp,	//Harvest({W,A,S,P})
			_aum_,
			_ts_,
			(_aum_*1e18) / _ts_
		);

	}





	function declareEmergency() public DAO {
		require(!emergency,"Emergency already declared.");
		//Neo Pool does not support emergencyWithdraw
		//mc.emergencyWithdraw(allnums[0]);
		mc.withdraw( mc.userInfo(address(this)).amount );
		emergency=true;
	}

	function revokeEmergency() public DAO
	{
		require(emergency,"Emergency not declared.");
		uint256 D = want.balanceOf(address(this));
		mc.deposit(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, uint256, uint256[] memory, IMasterchef.UserInfo 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 rrr = ((roi-1e18)*(365*86400)*100)/(allnums[6]-allnums[5]);//APY: 1e18 === 1%
		(uint rf, uint rm) = mc.getRewardRates();
		//uint assets = ( aum() * tvl() ) / 1e18;
		uint[] memory aprs;
		aprs[0] = ( (rf*ITVL(utvl).coinusd() * 86400 * 365) / 1e18 );
		aprs[1] = ( ( ( rm*ITVL(utvl).p_t_coin_usd(alladdr[10]) * 86400 * 365 * 100) / IM2P( alladdr[6] ).getSwapRatio() ) / 1e18 );
		return(
			aum(),
			roi,
			rrr,
			aprs[0] + aprs[1],
			aprs,
			mc.userInfo(address(this)),
			mc.pendingReward(address(this)),
			mc.pendingMorph(address(this))
		);
	}

	function aum() public view returns (uint256) {
		return mc.userInfo(address(this)).amount + IERC20(want).balanceOf(address(this));
	}

	function apyr() public view returns (uint256,uint256,uint256,uint256,uint256)
	{
		uint256 elapsed = allnums[6]-allnums[7];
		uint256 gained	= allnums[8]-allnums[9];
		uint256 apr = ( ( (gained * 1e18 * 365 days) / elapsed) / allnums[9] );
		//uint256 apy = (1 + apr * elapsed / 365 days) ** (365 days / elapsed) - 1;
		//uint256 apy = ( (1 + (gained / allnums[9])) ** (365 days / elapsed) ) - 1;
		return(apr,allnums[6],allnums[7],allnums[8],allnums[9]);
	}

	//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.coinusd()).mul(aum)).div(1e18);
		(, uint256[] memory tn, ) = IBX( alladdr[14] ).getPoolTokens(allb32[1]);
		uint _ts = IERC20(alladdr[15]).totalSupply();

		return (
			( ( tn[0] * aum() / _ts ) * tc.p_t_coin_usd(alladdr[12]) ) / 1e18
			+
			( ( tn[1] * aum() / _ts ) * tc.p_t_coin_usd(alladdr[18]) ) / 1e18
		);
	}


	//Using Reaper.Farm's implementation as example for moving-average APR calculations
	//This is a secondary estimate based on storing harvest data on-chain
	//Primary APR & APY figure are still provided by old "apyr()" & "info()" functions of Kompound Protocol

	struct Harvest {
		uint timestamp;
		//uint assets;
		//uint share;
		uint price;
	}

	Harvest[] public harvestLog;

	function harvestLogLength() external view returns (uint256) {
		return harvestLog.length;
	}

	/**
	 * @dev Traverses the harvest log backwards _n items,
	 *	  and returns the average APR calculated across all the included
	 *	  log entries. APR is multiplied by PERCENT_DIVISOR to retain precision.
	 */
	function averageAPRAcrossLastNHarvests(int256 _n) external view returns (int256) {
		require(harvestLog.length >= 2);

		int256 runningAPRSum;
		int256 numLogsProcessed;

		for (uint256 i = harvestLog.length - 1; i > 0 && numLogsProcessed < _n; i--) {
			runningAPRSum += calculateAPRUsingLogs(i - 1, i);
			numLogsProcessed++;
		}

		return runningAPRSum / numLogsProcessed;
	}
	 /**
	 * @dev Project an APR using the vault share price change between harvests at the provided indices.
	 */
	function calculateAPRUsingLogs(uint256 _startIndex, uint256 _endIndex) public view returns (int256) {
		Harvest storage start = harvestLog[_startIndex];
		Harvest storage end = harvestLog[_endIndex];
		bool increasing = true;
		if (end.price < start.price) {
			increasing = false;	//should not be possible, but still...
		}

		uint256 unsignedSharePriceChange;
		if (increasing) {
			unsignedSharePriceChange = end.price - start.price;
		} else {
			unsignedSharePriceChange = start.price - end.price;
		}

		uint256 unsignedPercentageChange = (unsignedSharePriceChange * 1e18) / start.price;
		uint256 timeDifference = end.timestamp - start.timestamp;

		uint256 yearlyUnsignedPercentageChange = (unsignedPercentageChange * (364 days)) / timeDifference;
		//We use full ^18 precision
		//yearlyUnsignedPercentageChange /= 1e14; // restore basis points precision

		if (increasing) {
			return int256(yearlyUnsignedPercentageChange);
		}

		return -int256(yearlyUnsignedPercentageChange);
	}

	//Extension
	//Allows this Granary to leverage its position of LQDR via mLQDR deposits
	//Useful if in future Morpheus implements voting. Then our depositors could have voting rights!
	//Also allows for a bribe-layer based on the Votium-model, and many other things.
	mapping (address=>bool) public isExtensionContract;
	function setExtensions(address[] memory _a, bool[] memory _b) public DAO {
		for(uint i;i<_a.length;i++) {
			isExtensionContract[_a[i]] =  _b[i];
		}
	}

	//Code borrowed from our buckets project!
    function customCall(address _to, bytes calldata _data) public payable returns(bytes memory) {return customCall(_to, 0, _data) ;}
    function customCall(address[] memory _tos, uint256[] memory _amounts, bytes[] calldata _datas) public payable returns(bytes[] memory retdata)
    {
    	require(_tos.length==_amounts.length&&_tos.length==_datas.length,"Args Mismatch");
    	for(uint i=0;i<_tos.length;i++)
    	{
    		retdata[i] = customCall(_tos[i],_amounts[i],_datas[i]);
    	}
    }
    function customCall(address to, uint256 amount, bytes calldata _data) public rg payable returns(bytes memory)
    {
    	//rg: reentrency guard. no funny business allowed c(0>0)e
		require(msg.sender==dao || isExtensionContract[msg.sender],"Ser you are NOT authorized!!");
		require(to != address(mc), "Sorry, touching our user's position is prohibited.");
		require(to != address(want), "Sorry, touching user's LP is prohibited as well.");
		require(to != address(this), "Sorry, touching yourself from the back is gross.");
        (bool success, bytes memory returndata) = to.call{value:amount}(_data);
        if (!success) {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert("CC: Failed!");
            }
        } else {
            return returndata;
        }
    }




}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"wants","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"grains","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"wants","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"grains","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"__ben","type":"address"},{"indexed":false,"internalType":"uint256","name":"__tvl","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__pf","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__wi","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__when","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__aum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__ts","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"__price","type":"uint256"}],"name":"WorkDone","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Eliteness","outputs":[{"internalType":"address","name":"ELITE","type":"address"},{"internalType":"uint256","name":"ELITES","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"alladdr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allb32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allnums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"apyr","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"_n","type":"int256"}],"name":"averageAPRAcrossLastNHarvests","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startIndex","type":"uint256"},{"internalType":"uint256","name":"_endIndex","type":"uint256"}],"name":"calculateAPRUsingLogs","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mw","type":"uint256"},{"internalType":"uint256","name":"_wi","type":"uint256"},{"internalType":"uint256","name":"_pf","type":"uint256"},{"internalType":"address","name":"_t","type":"address"},{"internalType":"uint256","name":"_df","type":"uint256"}],"name":"config","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"customCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"customCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tos","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes[]","name":"_datas","type":"bytes[]"}],"name":"customCall","outputs":[{"internalType":"bytes[]","name":"retdata","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dao","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"declareEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"doHardWork","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"u","type":"address"}],"name":"eliteness","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"harvestLog","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvestLogLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"id","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"info","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"amountLP","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardDebtMorph","type":"uint256"}],"internalType":"struct IMasterchef.UserInfo","name":"","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExtensionContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mc","outputs":[{"internalType":"contract IMasterchef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"pullElite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"elite","type":"address"},{"internalType":"uint256","name":"elites","type":"uint256"}],"name":"pushElite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescue","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salvage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"},{"internalType":"bool[]","name":"_b","type":"bool[]"}],"name":"setExtensions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"utvl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6001805460ff191690556006805460ff60a01b191690556101c0604052600060808181526103e860a05261271060c081905260e0526402540be400610100526101208290526101408290526101608290526101808290526101a0919091526200006c90600a908162000928565b5060408051610260810182527385660a3538579fdd27dc77d0f22d0c42b92d81148082527321be370d5312f44cb42ce377bc9b8a0cef1a4c836020830152730789ff5ba37f72abc4d561d00648acadc897b32d9282019290925273b66b5d38e183de42f21e92abcaf3c712dd5d628660608201527310b620b2dbac4faa7d7ffd71da486f5d44cd86f9608082015273ca3c69622e22524ff2b6cc24ee7e654bbf91578a60a0820152730c35b3b57cde4a3007398045b274548a6592e9d060c0820152738ac868293d97761a1fed6d4a01e9ff17c5594aa360e08201527316327e3fbdaca3bcf7e38f5af2599d2ddc33ae526101008201527309855b4ef0b9df961ed097ef50172be3e6f1366561012082015273e5343e1eda3dc45e73468f9fa5417f0375f45127610140820152739c775d3d66167685b2a3f4567b548567d287535061016082015273e42bb367c958e0e624c164f2491c37d8fd7135156101808201527320dd72ed959b6147912c2e529f0a0c651c33c9ce6101a0820152734b69a8913a90cab949218095717bafccef6c39fc6101c08201526101e081019190915273728a9227ffa9dea5e93d2ae5461d6e8b793d83a1610200820152735c652a94c672f8f6d021417bb5ee75c322ecf1fc61022082015273e533779d1e6ff3d5cfceed3de761852e6c93dc8b6102408201526200026f90601490601362000974565b50604080518082019091527f5e02ab5699549675a6d3beeb92a62782712d050900020000000000000000013881527f85660a3538579fdd27dc77d0f22d0c42b92d81140002000000000000000000016020820152620002d3906027906002620009bf565b50348015620002e157600080fd5b50604051620067fa380380620067fa833981016040819052620003049162000ab2565b602354600480546001600160a01b039283166001600160a01b03199182161790915560245460068054918416918316919091179055601554600580546001818101835560008390527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091820180549487169486169490941790935560165482549384019092559190910180549190931691161790558051620003ae906002906020840190620009f0565b50602554600980546001600160a01b0319166001600160a01b03928316179055601654601a5460405163095ea7b360e01b81529183169263095ea7b3926200040192909116906000199060040162000b71565b602060405180830381600087803b1580156200041c57600080fd5b505af115801562000431573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000457919062000a89565b50601754601b5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39262000492929116906000199060040162000b71565b602060405180830381600087803b158015620004ad57600080fd5b505af1158015620004c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e8919062000a89565b50601754601c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39262000523929116906000199060040162000b71565b602060405180830381600087803b1580156200053e57600080fd5b505af115801562000553573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000579919062000a89565b5060155460215460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392620005b4929116906000199060040162000b71565b602060405180830381600087803b158015620005cf57600080fd5b505af1158015620005e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060a919062000a89565b50601554601d5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39262000645929116906000199060040162000b71565b602060405180830381600087803b1580156200066057600080fd5b505af115801562000675573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200069b919062000a89565b5060185460225460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392620006d6929116906000199060040162000b71565b602060405180830381600087803b158015620006f157600080fd5b505af115801562000706573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200072c919062000a89565b5060195460225460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39262000767929116906000199060040162000b71565b602060405180830381600087803b1580156200078257600080fd5b505af115801562000797573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007bd919062000a89565b5060185460195460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392620007f8929116906000199060040162000b71565b602060405180830381600087803b1580156200081357600080fd5b505af115801562000828573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200084e919062000a89565b506004805460065460405163095ea7b360e01b81526001600160a01b039283169363095ea7b39362000887931691600019910162000b71565b602060405180830381600087803b158015620008a257600080fd5b505af1158015620008b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008dd919062000a89565b5050600780546001600160a01b031990811673167d87a906da361a10061fe42bbe89451c2ee5841791829055600880549091166001600160a01b039290921691909117905562000b8a565b82600a810192821562000962579160200282015b8281111562000962578251829064ffffffffff169055916020019190600101906200093c565b506200097092915062000a72565b5090565b826013810192821562000962579160200282015b828111156200096257825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000988565b826002810192821562000962579160200282015b8281111562000962578251825591602001919060010190620009d3565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000a28576000855562000962565b82601f1062000a4357805160ff191683800117855562000962565b8280016001018555821562000962579182018281111562000962578251825591602001919060010190620009d3565b5b8082111562000970576000815560010162000a73565b60006020828403121562000a9b578081fd5b8151801515811462000aab578182fd5b9392505050565b6000602080838503121562000ac5578182fd5b82516001600160401b038082111562000adc578384fd5b818501915085601f83011262000af0578384fd5b81518181111562000afd57fe5b604051601f8201601f191681018501838111828210171562000b1b57fe5b604052818152838201850188101562000b32578586fd5b8592505b8183101562000b55578383018501518184018601529184019162000b36565b8183111562000b6657858583830101525b979650505050505050565b6001600160a01b03929092168252602082015260400190565b615c608062000b9a6000396000f3fe6080604052600436106102885760003560e01c80634fa5d8541161015a578063af640d0f116100c1578063dd62ed3e1161007a578063dd62ed3e14610734578063e5328e0614610754578063e65a011714610769578063ef1b814014610789578063f37ae328146107a9578063f4852a81146107d757610288565b8063af640d0f14610695578063b6b55f25146106aa578063c6e1d61d146106ca578063caa6fea4146106ea578063cb7956b0146106ff578063daea85c51461071457610288565b806370a082311161011357806370a08231146105e05780637a4e4ecf146106005780638cf55882146106205780638ed5f3731461064057806395d89b4114610660578063a9059cbb1461067557610288565b80634fa5d854146105305780635312ea8e1461054557806361d027b31461056557806365e56e171461057a578063685c8ca5146105a05780636920908c146105c057610288565b806323b872dd116101fe578063313ce567116101b7578063313ce5671461048857806331e244e51461049d578063370158ea146104b25780634162169f146104db5780634a838c73146104f05780634b292cae1461051057610288565b806323b872dd146103e957806323e1d0e81461040957806324aa95ec1461042957806327d9cf441461043e5780632d6f4baa146104535780632e1a7d4d1461046857610288565b806318160ddd1161025057806318160ddd1461032d5780631b5f9c42146103425780631c09efef146103705780631e534906146103925780631ecf9a88146103a75780631f1fcd51146103c757610288565b806306fdde031461028d578063095ea7b3146102b85780630a0b6db5146102e55780630ab51bac146102f857806310ab2d011461031a575b600080fd5b34801561029957600080fd5b506102a26107f7565b6040516102af919061538d565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004614c2a565b61081f565b6040516102af91906152b1565b6102a26102f3366004614bd8565b61088a565b34801561030457600080fd5b5061030d6108a1565b6040516102af91906152bc565b6102a2610328366004614c55565b6109ad565b34801561033957600080fd5b5061030d610b5e565b34801561034e57600080fd5b5061036261035d366004614f57565b610b64565b6040516102af929190615238565b34801561037c57600080fd5b5061039061038b366004614cae565b610b9c565b005b34801561039e57600080fd5b50610390610c35565b3480156103b357600080fd5b5061030d6103c2366004614f57565b610c9a565b3480156103d357600080fd5b506103dc610cb1565b6040516102af9190615200565b3480156103f557600080fd5b506102d8610404366004614b98565b610cc0565b34801561041557600080fd5b5061030d610424366004614f57565b610df6565b34801561043557600080fd5b50610390610e06565b34801561044a57600080fd5b506103dc610f4e565b34801561045f57600080fd5b5061030d610f5d565b34801561047457600080fd5b50610390610483366004614f57565b610f63565b34801561049457600080fd5b5061030d611424565b3480156104a957600080fd5b50610390611429565b3480156104be57600080fd5b506104c761156c565b6040516102af989796959493929190615a9f565b3480156104e757600080fd5b506103dc611a26565b3480156104fc57600080fd5b506102d861050b366004614b44565b611a35565b34801561051c57600080fd5b5061039061052b366004615029565b611a4a565b34801561053c57600080fd5b50610390611b0f565b34801561055157600080fd5b50610390610560366004614f57565b611c3e565b34801561057157600080fd5b506103dc611e54565b34801561058657600080fd5b5061058f611e63565b6040516102af959493929190615b0d565b3480156105ac57600080fd5b506103906105bb366004614c2a565b611ec5565b6105d36105ce366004614d6f565b611f81565b6040516102af9190615251565b3480156105ec57600080fd5b5061030d6105fb366004614b44565b61202d565b34801561060c57600080fd5b506102d861061b366004614c2a565b61203f565b34801561062c57600080fd5b5061030d61063b366004614fe5565b6121b6565b34801561064c57600080fd5b506102d861065b366004614b44565b612294565b34801561066c57600080fd5b506102a261238d565b34801561068157600080fd5b506102d8610690366004614c2a565b6123a1565b3480156106a157600080fd5b506102a26123b5565b3480156106b657600080fd5b506103906106c5366004614f57565b612440565b3480156106d657600080fd5b506103dc6106e5366004614f57565b612a53565b3480156106f657600080fd5b506102d8612a73565b34801561070b57600080fd5b506103dc612a83565b34801561072057600080fd5b506102d861072f366004614b44565b612a92565b34801561074057600080fd5b5061030d61074f366004614b60565b612aa0565b34801561076057600080fd5b5061030d612abd565b34801561077557600080fd5b506103dc610784366004614f57565b612d6d565b34801561079557600080fd5b506103906107a4366004614f57565b612d97565b3480156107b557600080fd5b506107c96107c4366004614f57565b612e5d565b6040516102af929190615a91565b3480156107e357600080fd5b5061030d6107f2366004614f57565b612e8b565b6060600260405160200161080b91906151d9565b604051602081830303815290604052905090565b336000818152602a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108789086906152bc565b60405180910390a35060015b92915050565b606061089984600085856109ad565b949350505050565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a08231916108d391309101615200565b60206040518083038186803b1580156108eb57600080fd5b505afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109239190614fcd565b600654604051630cacd00160e11b81526001600160a01b0390911690631959a00290610953903090600401615200565b60806040518083038186803b15801561096b57600080fd5b505afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190614f6f565b6020015101905090565b60015460609060ff16156109dc5760405162461bcd60e51b81526004016109d390615432565b60405180910390fd5b6001805460ff1916811790556007546001600160a01b0316331480610a105750336000908152602c602052604090205460ff165b610a2c5760405162461bcd60e51b81526004016109d3906154d6565b6006546001600160a01b0386811691161415610a5a5760405162461bcd60e51b81526004016109d3906155d9565b6004546001600160a01b0386811691161415610a885760405162461bcd60e51b81526004016109d390615486565b6001600160a01b038516301415610ab15760405162461bcd60e51b81526004016109d3906158b7565b600080866001600160a01b0316868686604051610acf9291906151ae565b60006040518083038185875af1925050503d8060008114610b0c576040519150601f19603f3d011682016040523d82523d6000602084013e610b11565b606091505b509150915081610b4357805115610b2b5780518082602001fd5b60405162461bcd60e51b81526004016109d39061569f565b9150610b4c9050565b6001805460ff19169055949350505050565b60035481565b60008181548110610b7457600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b6007546001600160a01b03163314610bc65760405162461bcd60e51b81526004016109d3906157da565b60005b8251811015610c3057818181518110610bde57fe5b6020026020010151602c6000858481518110610bf657fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610bc9565b505050565b60065460405163b6b55f2560e01b81526001600160a01b039091169063b6b55f2590610c66906000906004016152bc565b600060405180830381600087803b158015610c8057600080fd5b505af1158015610c94573d6000803e3d6000fd5b50505050565b60278160028110610caa57600080fd5b0154905081565b6004546001600160a01b031681565b6001600160a01b038316600090815260296020526040812054821115610cf85760405162461bcd60e51b81526004016109d3906157ac565b6001600160a01b0384163314801590610d3657506001600160a01b0384166000908152602a6020908152604080832033845290915290205460001914155b15610d96576001600160a01b0384166000908152602a60209081526040808320338452909152902054821115610d6b57600080fd5b6001600160a01b0384166000908152602a602090815260408083203384529091529020805483900390555b6001600160a01b0380851660008181526029602052604080822080548790039055928616808252908390208054860190559151600080516020615c0b83398151915290610de49086906152bc565b60405180910390a35060019392505050565b600a81600a8110610caa57600080fd5b6007546001600160a01b03163314610e305760405162461bcd60e51b81526004016109d3906157da565b600654600160a01b900460ff16610e595760405162461bcd60e51b81526004016109d390615728565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a0823191610e8b91309101615200565b60206040518083038186803b158015610ea357600080fd5b505afa158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190614fcd565b60065460405163b6b55f2560e01b81529192506001600160a01b03169063b6b55f2590610f0c9084906004016152bc565b600060405180830381600087803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b50506006805460ff60a01b19169055505050565b6009546001600160a01b031681565b602b5490565b60015460ff1615610f865760405162461bcd60e51b81526004016109d390615432565b6001805460ff191681179055600654600160a01b900460ff1615610fbc5760405162461bcd60e51b81526004016109d39061564e565b33600090815260296020526040902054811115610feb5760405162461bcd60e51b81526004016109d3906157ac565b610ff3610c35565b600e546005805460009061100357fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a082319061103c903090600401615200565b60206040518083038186803b15801561105457600080fd5b505afa158015611068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108c9190614fcd565b111561109b5761109b30612ef2565b3360008181526029602052604080822080548590039055600380548581039091559051909290600080516020615c0b833981519152906110dc9086906152bc565b60405180910390a3600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161111691309101615200565b60206040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111669190614fcd565b600654604051630cacd00160e11b81529192506000916001600160a01b0390911690631959a0029061119c903090600401615200565b60806040518083038186803b1580156111b457600080fd5b505afa1580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ec9190614f6f565b6020015190506000611208846112028785614880565b906148ba565b600654604051632e1a7d4d60e01b81529192506001600160a01b031690632e1a7d4d906112399084906004016152bc565b600060405180830381600087803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b5050600480546040516370a0823160e01b8152600094506001600160a01b0390911692506370a082319161129d91309101615200565b60206040518083038186803b1580156112b557600080fd5b505afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190614fcd565b9050600061132e856040518060400160405280601081526020016f111a5c9d1e481dda5d1a191c985dd85b60821b815250846148fc9092919063ffffffff16565b6004805460405163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91611360913391869101615238565b602060405180830381600087803b15801561137a57600080fd5b505af115801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190614f3b565b6113ce5760405162461bcd60e51b81526004016109d390615866565b336001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688289604051611409929190615a91565b60405180910390a250506001805460ff191690555050505050565b601290565b6007546001600160a01b031633146114535760405162461bcd60e51b81526004016109d3906157da565b600654600160a01b900460ff161561147d5760405162461bcd60e51b81526004016109d39061557f565b600654604051630cacd00160e11b81526001600160a01b0390911690632e1a7d4d908290631959a002906114b5903090600401615200565b60806040518083038186803b1580156114cd57600080fd5b505afa1580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190614f6f565b602001516040518263ffffffff1660e01b815260040161152591906152bc565b600060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b50506006805460ff60a01b1916600160a01b1790555050565b600080600080606061157c6149c6565b600080600060035461158c6108a1565b670de0b6b3a7640000028161159d57fe5b0490506000600a60050154600a600601540363bbf81e00670de0b6b3a763ffff19840102816115c857fe5b049050600080600660009054906101000a90046001600160a01b03166001600160a01b0316630c056a316040518163ffffffff1660e01b8152600401604080518083038186803b15801561161b57600080fd5b505afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190615006565b915091506060670de0b6b3a7640000600960009054906101000a90046001600160a01b03166001600160a01b031663159fb6926040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190614fcd565b84026301e1338002816116f757fe5b048160008151811061170557fe5b602090810291909101810191909152601a546040805163becb345160e01b81529051670de0b6b3a7640000936001600160a01b039093169263becb34519260048082019391829003018186803b15801561175e57600080fd5b505afa158015611772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117969190614fcd565b600954601e54604051630edb0f3b60e41b81526001600160a01b039283169263edb0f3b0926117ca92911690600401615200565b60206040518083038186803b1580156117e257600080fd5b505afa1580156117f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181a9190614fcd565b840263bbf81e00028161182957fe5b048161183157fe5b048160018151811061183f57fe5b6020026020010181815250506118536108a1565b85858360018151811061186257fe5b60200260200101518460008151811061187757fe5b6020908102919091010151600654604051630cacd00160e11b8152929091019186916001600160a01b031690631959a002906118b7903090600401615200565b60806040518083038186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119079190614f6f565b600654604051637a0787a960e11b81526001600160a01b039091169063f40f0f5290611937903090600401615200565b60206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119879190614fcd565b6006546040516301605fb960e21b81526001600160a01b03909116906305817ee4906119b7903090600401615200565b60206040518083038186803b1580156119cf57600080fd5b505afa1580156119e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a079190614fcd565b9c509c509c509c509c509c509c509c5050505050509091929394959697565b6007546001600160a01b031681565b602c6020526000908152604090205460ff1681565b6007546001600160a01b03163314611a745760405162461bcd60e51b81526004016109d3906157da565b84600a60040155600880546001600160a01b0319166001600160a01b038416179055620186a08410611ab85760405162461bcd60e51b81526004016109d3906155b6565b600d849055620186a08310611adf5760405162461bcd60e51b81526004016109d390615705565b600c839055620186a08110611b065760405162461bcd60e51b81526004016109d39061562b565b600b5550505050565b60015460ff1615611b325760405162461bcd60e51b81526004016109d390615432565b6001805460ff19168117905560005415611b6b57611b4f33612294565b611b6b5760405162461bcd60e51b81526004016109d390615891565b611b73610c35565b600e5460058054600090611b8357fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190611bbc903090600401615200565b60206040518083038186803b158015611bd457600080fd5b505afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190614fcd565b11611c295760405162461bcd60e51b81526004016109d3906153dd565b611c3233612ef2565b6001805460ff19169055565b60015460ff1615611c615760405162461bcd60e51b81526004016109d390615432565b6001805460ff191681179055600654600160a01b900460ff16611c965760405162461bcd60e51b81526004016109d39061575f565b33600090815260296020526040902054811115611cc55760405162461bcd60e51b81526004016109d3906157ac565b60038054336000818152602960205260408082208054879003905584548690039094559251919291600080516020615c0b83398151915290611d089086906152bc565b60405180910390a3600480546040516370a0823160e01b81526000926001600160a01b03909216916370a0823191611d4291309101615200565b60206040518083038186803b158015611d5a57600080fd5b505afa158015611d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d929190614fcd565b90506000611da4836112028685614880565b6004805460405163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91611dd6913391869101615238565b602060405180830381600087803b158015611df057600080fd5b505af1158015611e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e289190614f3b565b611e445760405162461bcd60e51b81526004016109d390615866565b50506001805460ff191690555050565b6008546001600160a01b031681565b601154601054601354601254600093849384938493849390920391819003908390836a1a1601fc4ea7109e000000840281611e9a57fe5b0481611ea257fe5b601054601154601254601354949093049c919b5099509097509095509350505050565b6007546001600160a01b03163314611eef5760405162461bcd60e51b81526004016109d3906157da565b604080518082019091526001600160a01b039283168152602081019182526000805460018101825590805290517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b0319169190941617909255517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56490910155565b606083518551148015611f945750845182145b611fb05760405162461bcd60e51b81526004016109d39061540b565b60005b855181101561202457612005868281518110611fcb57fe5b6020026020010151868381518110611fdf57fe5b6020026020010151868685818110611ff357fe5b90506020028101906103289190615b60565b82828151811061201157fe5b6020908102919091010152600101611fb3565b50949350505050565b60296020526000908152604090205481565b6007546000906001600160a01b0316331461206c5760405162461bcd60e51b81526004016109d3906157da565b6004546001600160a01b038481169116141561209a5760405162461bcd60e51b81526004016109d39061582f565b6001600160a01b038316612112576007546040516001600160a01b039091169083906120c5906151fd565b60006040518083038185875af1925050503d8060008114612102576040519150601f19603f3d011682016040523d82523d6000602084013e612107565b606091505b505080915050610884565b6001600160a01b038316156121ae5760075460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb9261215592909116908690600401615238565b602060405180830381600087803b15801561216f57600080fd5b505af1158015612183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a79190614f3b565b9050610884565b506000610884565b600080602b84815481106121c657fe5b906000526020600020906002020190506000602b84815481106121e557fe5b9060005260206000209060020201905060006001905082600101548260010154101561220f575060005b600081156122295783600101548360010154039050612237565b826001015484600101540390505b6000846001015482670de0b6b3a7640000028161225057fe5b8654865492909104925090036000816301dfe20084028161226d57fe5b049050841561228457965061088495505050505050565b6000039998505050505050505050565b600080546122a457506000612388565b60005b60005481101561238257600081815481106122be57fe5b906000526020600020906002020160010154600082815481106122dd57fe5b60009182526020909120600290910201546040516370a0823160e01b81526001600160a01b03909116906370a082319061231b908790600401615200565b60206040518083038186803b15801561233357600080fd5b505afa158015612347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236b9190614fcd565b1061237a576001915050612388565b6001016122a7565b50600090505b919050565b6060600260405160200161080b91906151be565b60006123ae338484610cc0565b9392505050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156124385780601f1061240d57610100808354040283529160200191612438565b820191906000526020600020905b81548152906001019060200180831161241b57829003601f168201915b505050505081565b60015460ff16156124635760405162461bcd60e51b81526004016109d390615432565b6001805460ff191681179055600654600160a01b900460ff16156124995760405162461bcd60e51b81526004016109d39061550d565b6124a1610c35565b600e54600580546000906124b157fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906124ea903090600401615200565b60206040518083038186803b15801561250257600080fd5b505afa158015612516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253a9190614fcd565b11156125495761254930612ef2565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161257b91309101615200565b60206040518083038186803b15801561259357600080fd5b505afa1580156125a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cb9190614fcd565b600654604051630cacd00160e11b81529192506000916001600160a01b0390911690631959a00290612601903090600401615200565b60806040518083038186803b15801561261957600080fd5b505afa15801561262d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126519190614f6f565b60200151600480546040516323b872dd60e01b81529293506001600160a01b0316916323b872dd916126899133913091899101615214565b602060405180830381600087803b1580156126a357600080fd5b505af11580156126b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126db9190614f3b565b6126f75760405162461bcd60e51b81526004016109d390615554565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161272991309101615200565b60206040518083038186803b15801561274157600080fd5b505afa158015612755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127799190614fcd565b905060006127b7846040518060400160405280600d81526020016c111a5c9d1e4819195c1bdcda5d609a1b815250846148fc9092919063ffffffff16565b60065460405163b6b55f2560e01b81529192506001600160a01b03169063b6b55f25906127e89084906004016152bc565b600060405180830381600087803b15801561280257600080fd5b505af1158015612816573d6000803e3d6000fd5b5050600654604051630cacd00160e11b8152600093506001600160a01b039091169150631959a0029061284d903090600401615200565b60806040518083038186803b15801561286557600080fd5b505afa158015612879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289d9190614f6f565b60200151905060006128dd856040518060400160405280600b81526020016a4469727479207374616b6560a81b815250846148fc9092919063ffffffff16565b9050600080600354116128f25750808061290f565b61290b866112026003548561488090919063ffffffff16565b9050805b506003805482019055600b54600090156129535761292c33612294565b61294d57612948620f4240611202600a60015b01548590614880565b612950565b60005b90505b80156129aa57600880546001600160a01b03908116600090815260296020526040808220805486019055925492519290911691600080516020615c0b833981519152906129a19085906152bc565b60405180910390a35b6129b48282614928565b33600081815260296020526040902080549092019091557f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158a6129f78585614928565b604051612a05929190615a91565b60405180910390a2336000600080516020615c0b833981519152612a298585614928565b604051612a3691906152bc565b60405180910390a350506001805460ff1916905550505050505050565b60148160138110612a6357600080fd5b01546001600160a01b0316905081565b600654600160a01b900460ff1681565b6006546001600160a01b031681565b60006108848260001961081f565b602a60209081526000928352604080842090915290825290205481565b600954602254602854604051631f29a8cd60e31b81526000936001600160a01b0390811693859391169163f94d466891612af9916004016152bc565b60006040518083038186803b158015612b1157600080fd5b505afa158015612b25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b4d9190810190614e3e565b50602354604080516318160ddd60e01b81529051929450600093506001600160a01b03909116916318160ddd91600480820192602092909190829003018186803b158015612b9a57600080fd5b505afa158015612bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd29190614fcd565b9050670de0b6b3a76400006001600160a01b03841663edb0f3b06014601201546040516001600160e01b031960e084901b168152612c1c916001600160a01b031690600401615200565b60206040518083038186803b158015612c3457600080fd5b505afa158015612c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6c9190614fcd565b82612c756108a1565b85600181518110612c8257fe5b60200260200101510281612c9257fe5b040281612c9b57fe5b04670de0b6b3a76400006001600160a01b03851663edb0f3b06014600c01546040516001600160e01b031960e084901b168152612ce4916001600160a01b031690600401615200565b60206040518083038186803b158015612cfc57600080fd5b505afa158015612d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d349190614fcd565b83612d3d6108a1565b86600081518110612d4a57fe5b60200260200101510281612d5a57fe5b040281612d6357fe5b0401935050505090565b60058181548110612d7d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b03163314612dc15760405162461bcd60e51b81526004016109d3906157da565b600080546000198101908110612dd357fe5b906000526020600020906002020160008281548110612dee57fe5b600091825260208220835460029092020180546001600160a01b0319166001600160a01b03909216919091178155600192830154920191909155805480612e3157fe5b60008281526020812060026000199093019283020180546001600160a01b031916815560010155905550565b602b8181548110612e6d57600080fd5b60009182526020909120600290910201805460019091015490915082565b602b5460009060021115612e9e57600080fd5b602b546000908190600019015b600081118015612eba57508482125b15612edf57612ecc60018203826121b6565b9092019160019091019060001901612eab565b50808281612ee957fe5b05949350505050565b600654600160a01b900460ff1615612f1c5760405162461bcd60e51b81526004016109d39061564e565b601a546040805163a5e992bb60e01b815290516001600160a01b039092169163a5e992bb9160048082019260009290919082900301818387803b158015612f6257600080fd5b505af1158015612f76573d6000803e3d6000fd5b50505050600060405180606001604052806014600360138110612f9557fe5b01546040516370a0823160e01b81526001600160a01b03909116906370a0823190612fc4903090600401615200565b60206040518083038186803b158015612fdc57600080fd5b505afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130149190614fcd565b8152601754601e546040516370a0823160e01b81526020909301926001600160a01b03928316926370a082319261305092911690600401615200565b60206040518083038186803b15801561306857600080fd5b505afa15801561307c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a09190614fcd565b8152601754601f546040516370a0823160e01b81526020909301926001600160a01b03928316926370a08231926130dc92911690600401615200565b60206040518083038186803b1580156130f457600080fd5b505afa158015613108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312c9190614fcd565b90529050606060146003015481516001600160a01b0390911690829060009061315157fe5b6001600160a01b03928316602091820292909201015260155482519116908290600190811061317c57fe5b6001600160a01b03928316602091820292909201810191909152601b5460408501519185015185519190931692635c11d7959281019102816131ba57fe5b0460018430426040518663ffffffff1660e01b81526004016131e0959493929190615993565b600060405180830381600087803b1580156131fa57600080fd5b505af115801561320e573d6000803e3d6000fd5b50505050601460086013811061322057fe5b01546040830151602084015184516001600160a01b0390931692635c11d7959291820191028161324c57fe5b0460018430426040518663ffffffff1660e01b8152600401613272959493929190615993565b600060405180830381600087803b15801561328c57600080fd5b505af11580156132a0573d6000803e3d6000fd5b5050505050506000604051806060016040528060146004601381106132c157fe5b01546040516370a0823160e01b81526001600160a01b03909116906370a08231906132f0903090600401615200565b60206040518083038186803b15801561330857600080fd5b505afa15801561331c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133409190614fcd565b81526020016014600401546001600160a01b03166370a082316014600c01546040516001600160e01b031960e084901b168152613389916001600160a01b031690600401615200565b60206040518083038186803b1580156133a157600080fd5b505afa1580156133b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d99190614fcd565b81526001602090910152602154602754604051631f29a8cd60e31b81529293506000926001600160a01b039092169163f94d46689161341a916004016152bc565b60006040518083038186803b15801561343257600080fd5b505afa158015613446573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261346e9190810190614e3e565b509150508060008151811061347f57fe5b60200260200101518260026003811061349457fe5b6020020152604080516060818101909252806014600101546001600160a01b031681526020016014600401546001600160a01b031681526000602090910181905282518391906134e057fe5b602090810291909101810191909152601d5460408501519185015185516001600160a01b039092169263f41766d89290820191028161351b57fe5b0460018430426040518663ffffffff1660e01b8152600401613541959493929190615a03565b600060405180830381600087803b15801561355b57600080fd5b505af115801561356f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135979190810190614f09565b5060408051608080820183523080835260006020808501829052848601929092526060808501829052855160c08101875260275481528084018390526015546001600160a01b039081168289015260185416918101919091529488015191880151885194959194919384019290810191028161360f57fe5b048152602001600060405160200161362791906153a0565b60408051808303601f19018152918152915260215490516352bbbe2960e01b81529192506001600160a01b0316906352bbbe299061367090849086906001904290600401615907565b602060405180830381600087803b15801561368a57600080fd5b505af115801561369e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c29190614fcd565b50505050505060006014600e601381106136d857fe5b0154602854604051631f29a8cd60e31b81526001600160a01b039092169163f94d466891613708916004016152bc565b60006040518083038186803b15801561372057600080fd5b505afa158015613734573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261375c9190810190614e3e565b506018546040516370a0823160e01b8152919350600092506001600160a01b0316906370a0823190613792903090600401615200565b60206040518083038186803b1580156137aa57600080fd5b505afa1580156137be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e29190614fcd565b9050816001815181106137f157fe5b60200260200101518260008151811061380657fe5b60200260200101511015613d24578160008151811061382157fe5b60200260200101518260018151811061383657fe5b6020026020010151038110156139d257604080516002808252606082018352600092602083019080368337505060185482519293506001600160a01b03169183915060009061388157fe5b6001600160a01b0392831660209182029290920101526019548251911690829060019081106138ac57fe5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050905082816000815181106138f557fe5b60200260200101818152505060008160018151811061391057fe5b60200260200101818152505060006001826001604051602001613935939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac289161399791903090819087906004016152c5565b600060405180830381600087803b1580156139b157600080fd5b505af11580156139c5573d6000803e3d6000fd5b5050505050505050613d24565b816000815181106139df57fe5b6020026020010151826001815181106139f457fe5b602002602001015103811115613d245760195482516001600160a01b039091169063b6b55f25906002908590600090613a2957fe5b602002602001015185600181518110613a3e57fe5b602002602001015103840381613a5057fe5b046040518263ffffffff1660e01b8152600401613a6d91906152bc565b600060405180830381600087803b158015613a8757600080fd5b505af1158015613a9b573d6000803e3d6000fd5b50506040805160028082526060820183526000945090925090602083019080368337505060185482519293506001600160a01b031691839150600090613add57fe5b6001600160a01b039283166020918202929092010152601954825191169082906001908110613b0857fe5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833750506018546040516370a0823160e01b81529293506001600160a01b0316916370a082319150613b71903090600401615200565b60206040518083038186803b158015613b8957600080fd5b505afa158015613b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc19190614fcd565b81600081518110613bce57fe5b60209081029190910101526019546040516370a0823160e01b81526001600160a01b03909116906370a0823190613c09903090600401615200565b60206040518083038186803b158015613c2157600080fd5b505afa158015613c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c599190614fcd565b81600181518110613c6657fe5b60200260200101818152505060006001826001604051602001613c8b939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac2891613ced91903090819087906004016152c5565b600060405180830381600087803b158015613d0757600080fd5b505af1158015613d1b573d6000803e3d6000fd5b50505050505050505b81600181518110613d3157fe5b602002602001015182600081518110613d4657fe5b602002602001015111156143495781600181518110613d6157fe5b602002602001015182600081518110613d7657fe5b602002602001015103811015613ff55760195460405163b6b55f2560e01b81526001600160a01b039091169063b6b55f2590613db69084906004016152bc565b600060405180830381600087803b158015613dd057600080fd5b505af1158015613de4573d6000803e3d6000fd5b50506040805160028082526060820183526000945090925090602083019080368337505060185482519293506001600160a01b031691839150600090613e2657fe5b6001600160a01b039283166020918202929092010152601954825191169082906001908110613e5157fe5b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337019050509050600081600081518110613e9b57fe5b60209081029190910101526019546040516370a0823160e01b81526001600160a01b03909116906370a0823190613ed6903090600401615200565b60206040518083038186803b158015613eee57600080fd5b505afa158015613f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f269190614fcd565b81600181518110613f3357fe5b60200260200101818152505060006001826001604051602001613f58939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac2891613fba91903090819087906004016152c5565b600060405180830381600087803b158015613fd457600080fd5b505af1158015613fe8573d6000803e3d6000fd5b5050505050505050614349565b8160018151811061400257fe5b60200260200101518260008151811061401757fe5b6020026020010151038111156143495760195482516001600160a01b039091169063b6b55f25906002908590600190811061404e57fe5b60200260200101518560008151811061406357fe5b60200260200101518501038161407557fe5b046040518263ffffffff1660e01b815260040161409291906152bc565b600060405180830381600087803b1580156140ac57600080fd5b505af11580156140c0573d6000803e3d6000fd5b50506040805160028082526060820183526000945090925090602083019080368337505060185482519293506001600160a01b03169183915060009061410257fe5b6001600160a01b03928316602091820292909201015260195482519116908290600190811061412d57fe5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833750506018546040516370a0823160e01b81529293506001600160a01b0316916370a082319150614196903090600401615200565b60206040518083038186803b1580156141ae57600080fd5b505afa1580156141c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e69190614fcd565b816000815181106141f357fe5b60209081029190910101526019546040516370a0823160e01b81526001600160a01b03909116906370a082319061422e903090600401615200565b60206040518083038186803b15801561424657600080fd5b505afa15801561425a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427e9190614fcd565b8160018151811061428b57fe5b602002602001018181525050600060018260016040516020016142b0939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac289161431291903090819087906004016152c5565b600060405180830381600087803b15801561432c57600080fd5b505af1158015614340573d6000803e3d6000fd5b50505050505050505b5050600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161437d91309101615200565b60206040518083038186803b15801561439557600080fd5b505afa1580156143a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143cd9190614fcd565b600654604051630cacd00160e11b81529192506000916001600160a01b0390911690631959a00290614403903090600401615200565b60806040518083038186803b15801561441b57600080fd5b505afa15801561442f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144539190614f6f565b6020015160065460405163b6b55f2560e01b81529192506001600160a01b03169063b6b55f25906144889085906004016152bc565b600060405180830381600087803b1580156144a257600080fd5b505af11580156144b6573d6000803e3d6000fd5b5050600654604051630cacd00160e11b8152600093506001600160a01b039091169150631959a002906144ed903090600401615200565b60806040518083038186803b15801561450557600080fd5b505afa158015614519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061453d9190614f6f565b602001519050600061457d836040518060400160405280600b81526020016a4469727479207374616b6560a81b815250846148fc9092919063ffffffff16565b90506000600a600501546145a457426001600160401b0316600f556145a06108a1565b6012555b60108054601155426001600160401b031690556012546013556145c56108a1565b6012556003546145d7575080806145f4565b6145f0846112026003548561488090919063ffffffff16565b9050805b5061460c620f4240611202600a600201548490614880565b6008546001600160a01b03908116600090815260296020526040812080549093019092558716301461463e578661464b565b6008546001600160a01b03165b9050614660620f4240611202600a600361293f565b6001600160a01b0382166000908152602960205260409020805490910190556146b6614699620f4240611202600a600301548690614880565b6146b0620f4240611202600a600201548790614880565b9061496a565b6003805490910190556008546001600160a01b03166000600080516020615c0b8339815191526146f4620f4240611202600a60025b01548890614880565b60405161470191906152bc565b60405180910390a36001600160a01b0381166000600080516020615c0b833981519152614737620f4240611202600a60036146eb565b60405161474491906152bc565b60405180910390a360006147566108a1565b90506000614762612abd565b600354602b80549293509091600019810190811061477c57fe5b906000526020600020906002020160000154603c0142106147e857602b60405180604001604052804281526020018386670de0b6b3a764000002816147bd57fe5b0490528154600181810184556000938452602093849020835160029093020191825592909101519101555b6001600160a01b038a167f0db7a68b5ae8f9feafd9a896acf42b110c0d2e30c340a7f7accf80a9ce5eec9d8361482b620f4240611202600a600201548b90614880565b614842620f4240611202600a600301548c90614880565b428887888b670de0b6b3a7640000028161485857fe5b0460405161486c9796959493929190615b30565b60405180910390a250505050505050505050565b60008261488f57506000610884565b8282028284828161489c57fe5b04146123ae5760405162461bcd60e51b81526004016109d3906156c4565b60006123ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061498f565b600081848411156149205760405162461bcd60e51b81526004016109d3919061538d565b505050900390565b60006123ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506148fc565b6000828201838110156123ae5760405162461bcd60e51b81526004016109d39061544f565b600081836149b05760405162461bcd60e51b81526004016109d3919061538d565b5060008385816149bc57fe5b0495945050505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b600082601f8301126149fe578081fd5b81356020614a13614a0e83615bc7565b615ba4565b8281528181019085830183850287018401881015614a2f578586fd5b855b85811015614a56578135614a4481615be4565b84529284019290840190600101614a31565b5090979650505050505050565b60008083601f840112614a74578182fd5b5081356001600160401b03811115614a8a578182fd5b6020830191508360208083028501011115614aa457600080fd5b9250929050565b600082601f830112614abb578081fd5b81516020614acb614a0e83615bc7565b8281528181019085830183850287018401881015614ae7578586fd5b855b85811015614a5657815184529284019290840190600101614ae9565b60008083601f840112614b16578182fd5b5081356001600160401b03811115614b2c578182fd5b602083019150836020828501011115614aa457600080fd5b600060208284031215614b55578081fd5b81356123ae81615be4565b60008060408385031215614b72578081fd5b8235614b7d81615be4565b91506020830135614b8d81615be4565b809150509250929050565b600080600060608486031215614bac578081fd5b8335614bb781615be4565b92506020840135614bc781615be4565b929592945050506040919091013590565b600080600060408486031215614bec578081fd5b8335614bf781615be4565b925060208401356001600160401b03811115614c11578182fd5b614c1d86828701614b05565b9497909650939450505050565b60008060408385031215614c3c578182fd5b8235614c4781615be4565b946020939093013593505050565b60008060008060608587031215614c6a578182fd5b8435614c7581615be4565b93506020850135925060408501356001600160401b03811115614c96578283fd5b614ca287828801614b05565b95989497509550505050565b60008060408385031215614cc0578182fd5b82356001600160401b0380821115614cd6578384fd5b614ce2868387016149ee565b9350602091508185013581811115614cf8578384fd5b85019050601f81018613614d0a578283fd5b8035614d18614a0e82615bc7565b81815283810190838501858402850186018a1015614d34578687fd5b8694505b83851015614d5f578035614d4b81615bfc565b835260019490940193918501918501614d38565b5080955050505050509250929050565b60008060008060608587031215614d84578182fd5b84356001600160401b0380821115614d9a578384fd5b614da6888389016149ee565b9550602091508187013581811115614dbc578485fd5b8701601f81018913614dcc578485fd5b8035614dda614a0e82615bc7565b81815284810190838601868402850187018d1015614df6578889fd5b8894505b83851015614e18578035835260019490940193918601918601614dfa565b5097505050506040870135915080821115614e31578384fd5b50614ca287828801614a63565b600080600060608486031215614e52578081fd5b83516001600160401b0380821115614e68578283fd5b818601915086601f830112614e7b578283fd5b81516020614e8b614a0e83615bc7565b82815281810190858301838502870184018c1015614ea7578788fd5b8796505b84871015614ed2578051614ebe81615be4565b835260019690960195918301918301614eab565b5091890151919750909350505080821115614eeb578283fd5b50614ef886828701614aab565b925050604084015190509250925092565b600060208284031215614f1a578081fd5b81516001600160401b03811115614f2f578182fd5b61089984828501614aab565b600060208284031215614f4c578081fd5b81516123ae81615bfc565b600060208284031215614f68578081fd5b5035919050565b600060808284031215614f80578081fd5b604051608081018181106001600160401b0382111715614f9c57fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215614fde578081fd5b5051919050565b60008060408385031215614ff7578182fd5b50508035926020909101359150565b60008060408385031215615018578182fd5b505080516020909101519092909150565b600080600080600060a08688031215615040578283fd5b853594506020860135935060408601359250606086013561506081615be4565b949793965091946080013592915050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156150ad57815187529582019590820190600101615091565b509495945050505050565b15159052565b60008151808452815b818110156150e3576020818501810151868301820152016150c7565b818111156150f45782602083870101525b50601f01601f19169290920160200192915050565b60008154600180821660008114615127576001811461513e57615170565b60ff198316865260028304607f1686019350615170565b600283048560005260208060002060005b838110156151685781548a82015290850190820161514f565b505050860193505b50505092915050565b80516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b6000828483379101908152919050565b600065475241494e2360d01b82526123ae6006830184615109565b60006e66746d2e677572752f475241494e2f60881b82526123ae600f830184615109565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156152a457603f198886030184526152928583516150be565b94509285019290850190600101615276565b5092979650505050505050565b901515815260200190565b90815260200190565b6000858252602060018060a01b0380871682850152808616604085015260806060850152610100840185516080808701528181518084526101208801915085830193508692505b8083101561532e5783518516825292850192600192909201919085019061530c565b50848801519450607f199350838782030160a088015261534e818661507e565b94505050506040850151818584030160c086015261536c83826150be565b92505050606084015161538260e08501826150b8565b509695505050505050565b6000602082526123ae60208301846150be565b60ff91909116815260200190565b600060ff85168252606060208301526153ca606083018561507e565b905060ff83166040830152949350505050565b6020808252601490820152734e6f74206d75636820776f726b20746f20646f2160601b604082015260600190565b6020808252600d908201526c082e4cee6409ad2e6dac2e8c6d609b1b604082015260600190565b60208082526003908201526221524760e81b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526030908201527f536f7272792c20746f756368696e6720757365722773204c502069732070726f60408201526f3434b134ba32b21030b9903bb2b6361760811b606082015260800190565b6020808252601c908201527f53657220796f7520617265204e4f5420617574686f72697a6564212100000000604082015260600190565b60208082526027908201527f49747320616e20656d657267656e63792e20506c6561736520646f6e2774206460408201526632b837b9b4ba1760c91b606082015260800190565b602080825260119082015270155b98589b19481d1bc81bdb989bd85c99607a1b604082015260600190565b6020808252601b908201527f456d657267656e637920616c7265616479206465636c617265642e0000000000604082015260600190565b602080825260099082015268042eed27440d0d2ced60bb1b604082015260600190565b60208082526032908201527f536f7272792c20746f756368696e67206f75722075736572277320706f73697460408201527134b7b71034b990383937b434b134ba32b21760711b606082015260800190565b602080825260099082015268042c8cc7440d0d2ced60bb1b604082015260600190565b60208082526031908201527f49747320616e20656d657267656e63792e2055736520656d657267656e63795760408201527034ba34323930bb941490383632b0b9b29760791b606082015260800190565b6020808252600b908201526a43433a204661696c65642160a81b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260099082015268042e0cc7440d0d2ced60bb1b604082015260600190565b60208082526017908201527f456d657267656e6379206e6f74206465636c617265642e000000000000000000604082015260600190565b6020808252602d908201527f497473206e6f7420616e20656d657267656e63792e205573652077697468647260408201526c30bb94149034b739ba32b0b21760991b606082015260800190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b60208082526035908201527f4f6e6c7920452e4c2e492e542e452e20442e412e4f2e2054726561737572792060408201527463616e20726573637565207472656173757265732160581b606082015260800190565b6020808252601c908201527f46756e647320617265205361667520696e20656d657267656e63792100000000604082015260600190565b602080825260119082015270155b98589b19481d1bc81919589bd85c99607a1b604082015260600190565b6020808252600c908201526b456c69746573206f6e6c792160a01b604082015260600190565b60208082526030908201527f536f7272792c20746f756368696e6720796f757273656c662066726f6d20746860408201526f32903130b1b59034b99033b937b9b99760811b606082015260800190565b600060e08252855160e083015260208601516002811061592357fe5b61010083015260408601516001600160a01b03908116610120840152606087015116610140830152608086015161016083015260a086015160c06101808401526159716101a08401826150be565b9150506159816020830186615179565b60a082019390935260c0015292915050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156159e25784516001600160a01b0316835293830193918301916001016159bd565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a019450855b81811015615a6b57855180516001600160a01b03908116855286820151168685015284015115158484015294840194606090920191600101615a2e565b505080945050505050615a816060830185615071565b8260808301529695505050505050565b918252602082015260400190565b60006101608a8352896020840152886040840152876060840152806080840152615acb8184018861507e565b865160a0850152602087015160c0850152604087015160e085015260609096015161010084015250506101208101929092526101409091015295945050505050565b948552602085019390935260408401919091526060830152608082015260a00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b6000808335601e19843603018112615b76578283fd5b8301803591506001600160401b03821115615b8f578283fd5b602001915036819003821315614aa457600080fd5b6040518181016001600160401b0381118282101715615bbf57fe5b604052919050565b60006001600160401b03821115615bda57fe5b5060209081020190565b6001600160a01b0381168114615bf957600080fd5b50565b8015158114615bf957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ea6ec4c7f984017e7a64af2b5d888f374b8d9c78baa654abb64a52ab5cec6e9364736f6c63430007060033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000043534303100000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80634fa5d8541161015a578063af640d0f116100c1578063dd62ed3e1161007a578063dd62ed3e14610734578063e5328e0614610754578063e65a011714610769578063ef1b814014610789578063f37ae328146107a9578063f4852a81146107d757610288565b8063af640d0f14610695578063b6b55f25146106aa578063c6e1d61d146106ca578063caa6fea4146106ea578063cb7956b0146106ff578063daea85c51461071457610288565b806370a082311161011357806370a08231146105e05780637a4e4ecf146106005780638cf55882146106205780638ed5f3731461064057806395d89b4114610660578063a9059cbb1461067557610288565b80634fa5d854146105305780635312ea8e1461054557806361d027b31461056557806365e56e171461057a578063685c8ca5146105a05780636920908c146105c057610288565b806323b872dd116101fe578063313ce567116101b7578063313ce5671461048857806331e244e51461049d578063370158ea146104b25780634162169f146104db5780634a838c73146104f05780634b292cae1461051057610288565b806323b872dd146103e957806323e1d0e81461040957806324aa95ec1461042957806327d9cf441461043e5780632d6f4baa146104535780632e1a7d4d1461046857610288565b806318160ddd1161025057806318160ddd1461032d5780631b5f9c42146103425780631c09efef146103705780631e534906146103925780631ecf9a88146103a75780631f1fcd51146103c757610288565b806306fdde031461028d578063095ea7b3146102b85780630a0b6db5146102e55780630ab51bac146102f857806310ab2d011461031a575b600080fd5b34801561029957600080fd5b506102a26107f7565b6040516102af919061538d565b60405180910390f35b3480156102c457600080fd5b506102d86102d3366004614c2a565b61081f565b6040516102af91906152b1565b6102a26102f3366004614bd8565b61088a565b34801561030457600080fd5b5061030d6108a1565b6040516102af91906152bc565b6102a2610328366004614c55565b6109ad565b34801561033957600080fd5b5061030d610b5e565b34801561034e57600080fd5b5061036261035d366004614f57565b610b64565b6040516102af929190615238565b34801561037c57600080fd5b5061039061038b366004614cae565b610b9c565b005b34801561039e57600080fd5b50610390610c35565b3480156103b357600080fd5b5061030d6103c2366004614f57565b610c9a565b3480156103d357600080fd5b506103dc610cb1565b6040516102af9190615200565b3480156103f557600080fd5b506102d8610404366004614b98565b610cc0565b34801561041557600080fd5b5061030d610424366004614f57565b610df6565b34801561043557600080fd5b50610390610e06565b34801561044a57600080fd5b506103dc610f4e565b34801561045f57600080fd5b5061030d610f5d565b34801561047457600080fd5b50610390610483366004614f57565b610f63565b34801561049457600080fd5b5061030d611424565b3480156104a957600080fd5b50610390611429565b3480156104be57600080fd5b506104c761156c565b6040516102af989796959493929190615a9f565b3480156104e757600080fd5b506103dc611a26565b3480156104fc57600080fd5b506102d861050b366004614b44565b611a35565b34801561051c57600080fd5b5061039061052b366004615029565b611a4a565b34801561053c57600080fd5b50610390611b0f565b34801561055157600080fd5b50610390610560366004614f57565b611c3e565b34801561057157600080fd5b506103dc611e54565b34801561058657600080fd5b5061058f611e63565b6040516102af959493929190615b0d565b3480156105ac57600080fd5b506103906105bb366004614c2a565b611ec5565b6105d36105ce366004614d6f565b611f81565b6040516102af9190615251565b3480156105ec57600080fd5b5061030d6105fb366004614b44565b61202d565b34801561060c57600080fd5b506102d861061b366004614c2a565b61203f565b34801561062c57600080fd5b5061030d61063b366004614fe5565b6121b6565b34801561064c57600080fd5b506102d861065b366004614b44565b612294565b34801561066c57600080fd5b506102a261238d565b34801561068157600080fd5b506102d8610690366004614c2a565b6123a1565b3480156106a157600080fd5b506102a26123b5565b3480156106b657600080fd5b506103906106c5366004614f57565b612440565b3480156106d657600080fd5b506103dc6106e5366004614f57565b612a53565b3480156106f657600080fd5b506102d8612a73565b34801561070b57600080fd5b506103dc612a83565b34801561072057600080fd5b506102d861072f366004614b44565b612a92565b34801561074057600080fd5b5061030d61074f366004614b60565b612aa0565b34801561076057600080fd5b5061030d612abd565b34801561077557600080fd5b506103dc610784366004614f57565b612d6d565b34801561079557600080fd5b506103906107a4366004614f57565b612d97565b3480156107b557600080fd5b506107c96107c4366004614f57565b612e5d565b6040516102af929190615a91565b3480156107e357600080fd5b5061030d6107f2366004614f57565b612e8b565b6060600260405160200161080b91906151d9565b604051602081830303815290604052905090565b336000818152602a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108789086906152bc565b60405180910390a35060015b92915050565b606061089984600085856109ad565b949350505050565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a08231916108d391309101615200565b60206040518083038186803b1580156108eb57600080fd5b505afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109239190614fcd565b600654604051630cacd00160e11b81526001600160a01b0390911690631959a00290610953903090600401615200565b60806040518083038186803b15801561096b57600080fd5b505afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190614f6f565b6020015101905090565b60015460609060ff16156109dc5760405162461bcd60e51b81526004016109d390615432565b60405180910390fd5b6001805460ff1916811790556007546001600160a01b0316331480610a105750336000908152602c602052604090205460ff165b610a2c5760405162461bcd60e51b81526004016109d3906154d6565b6006546001600160a01b0386811691161415610a5a5760405162461bcd60e51b81526004016109d3906155d9565b6004546001600160a01b0386811691161415610a885760405162461bcd60e51b81526004016109d390615486565b6001600160a01b038516301415610ab15760405162461bcd60e51b81526004016109d3906158b7565b600080866001600160a01b0316868686604051610acf9291906151ae565b60006040518083038185875af1925050503d8060008114610b0c576040519150601f19603f3d011682016040523d82523d6000602084013e610b11565b606091505b509150915081610b4357805115610b2b5780518082602001fd5b60405162461bcd60e51b81526004016109d39061569f565b9150610b4c9050565b6001805460ff19169055949350505050565b60035481565b60008181548110610b7457600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b6007546001600160a01b03163314610bc65760405162461bcd60e51b81526004016109d3906157da565b60005b8251811015610c3057818181518110610bde57fe5b6020026020010151602c6000858481518110610bf657fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610bc9565b505050565b60065460405163b6b55f2560e01b81526001600160a01b039091169063b6b55f2590610c66906000906004016152bc565b600060405180830381600087803b158015610c8057600080fd5b505af1158015610c94573d6000803e3d6000fd5b50505050565b60278160028110610caa57600080fd5b0154905081565b6004546001600160a01b031681565b6001600160a01b038316600090815260296020526040812054821115610cf85760405162461bcd60e51b81526004016109d3906157ac565b6001600160a01b0384163314801590610d3657506001600160a01b0384166000908152602a6020908152604080832033845290915290205460001914155b15610d96576001600160a01b0384166000908152602a60209081526040808320338452909152902054821115610d6b57600080fd5b6001600160a01b0384166000908152602a602090815260408083203384529091529020805483900390555b6001600160a01b0380851660008181526029602052604080822080548790039055928616808252908390208054860190559151600080516020615c0b83398151915290610de49086906152bc565b60405180910390a35060019392505050565b600a81600a8110610caa57600080fd5b6007546001600160a01b03163314610e305760405162461bcd60e51b81526004016109d3906157da565b600654600160a01b900460ff16610e595760405162461bcd60e51b81526004016109d390615728565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a0823191610e8b91309101615200565b60206040518083038186803b158015610ea357600080fd5b505afa158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190614fcd565b60065460405163b6b55f2560e01b81529192506001600160a01b03169063b6b55f2590610f0c9084906004016152bc565b600060405180830381600087803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b50506006805460ff60a01b19169055505050565b6009546001600160a01b031681565b602b5490565b60015460ff1615610f865760405162461bcd60e51b81526004016109d390615432565b6001805460ff191681179055600654600160a01b900460ff1615610fbc5760405162461bcd60e51b81526004016109d39061564e565b33600090815260296020526040902054811115610feb5760405162461bcd60e51b81526004016109d3906157ac565b610ff3610c35565b600e546005805460009061100357fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a082319061103c903090600401615200565b60206040518083038186803b15801561105457600080fd5b505afa158015611068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108c9190614fcd565b111561109b5761109b30612ef2565b3360008181526029602052604080822080548590039055600380548581039091559051909290600080516020615c0b833981519152906110dc9086906152bc565b60405180910390a3600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161111691309101615200565b60206040518083038186803b15801561112e57600080fd5b505afa158015611142573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111669190614fcd565b600654604051630cacd00160e11b81529192506000916001600160a01b0390911690631959a0029061119c903090600401615200565b60806040518083038186803b1580156111b457600080fd5b505afa1580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ec9190614f6f565b6020015190506000611208846112028785614880565b906148ba565b600654604051632e1a7d4d60e01b81529192506001600160a01b031690632e1a7d4d906112399084906004016152bc565b600060405180830381600087803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b5050600480546040516370a0823160e01b8152600094506001600160a01b0390911692506370a082319161129d91309101615200565b60206040518083038186803b1580156112b557600080fd5b505afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190614fcd565b9050600061132e856040518060400160405280601081526020016f111a5c9d1e481dda5d1a191c985dd85b60821b815250846148fc9092919063ffffffff16565b6004805460405163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91611360913391869101615238565b602060405180830381600087803b15801561137a57600080fd5b505af115801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190614f3b565b6113ce5760405162461bcd60e51b81526004016109d390615866565b336001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5688289604051611409929190615a91565b60405180910390a250506001805460ff191690555050505050565b601290565b6007546001600160a01b031633146114535760405162461bcd60e51b81526004016109d3906157da565b600654600160a01b900460ff161561147d5760405162461bcd60e51b81526004016109d39061557f565b600654604051630cacd00160e11b81526001600160a01b0390911690632e1a7d4d908290631959a002906114b5903090600401615200565b60806040518083038186803b1580156114cd57600080fd5b505afa1580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190614f6f565b602001516040518263ffffffff1660e01b815260040161152591906152bc565b600060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b50506006805460ff60a01b1916600160a01b1790555050565b600080600080606061157c6149c6565b600080600060035461158c6108a1565b670de0b6b3a7640000028161159d57fe5b0490506000600a60050154600a600601540363bbf81e00670de0b6b3a763ffff19840102816115c857fe5b049050600080600660009054906101000a90046001600160a01b03166001600160a01b0316630c056a316040518163ffffffff1660e01b8152600401604080518083038186803b15801561161b57600080fd5b505afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190615006565b915091506060670de0b6b3a7640000600960009054906101000a90046001600160a01b03166001600160a01b031663159fb6926040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e89190614fcd565b84026301e1338002816116f757fe5b048160008151811061170557fe5b602090810291909101810191909152601a546040805163becb345160e01b81529051670de0b6b3a7640000936001600160a01b039093169263becb34519260048082019391829003018186803b15801561175e57600080fd5b505afa158015611772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117969190614fcd565b600954601e54604051630edb0f3b60e41b81526001600160a01b039283169263edb0f3b0926117ca92911690600401615200565b60206040518083038186803b1580156117e257600080fd5b505afa1580156117f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181a9190614fcd565b840263bbf81e00028161182957fe5b048161183157fe5b048160018151811061183f57fe5b6020026020010181815250506118536108a1565b85858360018151811061186257fe5b60200260200101518460008151811061187757fe5b6020908102919091010151600654604051630cacd00160e11b8152929091019186916001600160a01b031690631959a002906118b7903090600401615200565b60806040518083038186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119079190614f6f565b600654604051637a0787a960e11b81526001600160a01b039091169063f40f0f5290611937903090600401615200565b60206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119879190614fcd565b6006546040516301605fb960e21b81526001600160a01b03909116906305817ee4906119b7903090600401615200565b60206040518083038186803b1580156119cf57600080fd5b505afa1580156119e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a079190614fcd565b9c509c509c509c509c509c509c509c5050505050509091929394959697565b6007546001600160a01b031681565b602c6020526000908152604090205460ff1681565b6007546001600160a01b03163314611a745760405162461bcd60e51b81526004016109d3906157da565b84600a60040155600880546001600160a01b0319166001600160a01b038416179055620186a08410611ab85760405162461bcd60e51b81526004016109d3906155b6565b600d849055620186a08310611adf5760405162461bcd60e51b81526004016109d390615705565b600c839055620186a08110611b065760405162461bcd60e51b81526004016109d39061562b565b600b5550505050565b60015460ff1615611b325760405162461bcd60e51b81526004016109d390615432565b6001805460ff19168117905560005415611b6b57611b4f33612294565b611b6b5760405162461bcd60e51b81526004016109d390615891565b611b73610c35565b600e5460058054600090611b8357fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190611bbc903090600401615200565b60206040518083038186803b158015611bd457600080fd5b505afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190614fcd565b11611c295760405162461bcd60e51b81526004016109d3906153dd565b611c3233612ef2565b6001805460ff19169055565b60015460ff1615611c615760405162461bcd60e51b81526004016109d390615432565b6001805460ff191681179055600654600160a01b900460ff16611c965760405162461bcd60e51b81526004016109d39061575f565b33600090815260296020526040902054811115611cc55760405162461bcd60e51b81526004016109d3906157ac565b60038054336000818152602960205260408082208054879003905584548690039094559251919291600080516020615c0b83398151915290611d089086906152bc565b60405180910390a3600480546040516370a0823160e01b81526000926001600160a01b03909216916370a0823191611d4291309101615200565b60206040518083038186803b158015611d5a57600080fd5b505afa158015611d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d929190614fcd565b90506000611da4836112028685614880565b6004805460405163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb91611dd6913391869101615238565b602060405180830381600087803b158015611df057600080fd5b505af1158015611e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e289190614f3b565b611e445760405162461bcd60e51b81526004016109d390615866565b50506001805460ff191690555050565b6008546001600160a01b031681565b601154601054601354601254600093849384938493849390920391819003908390836a1a1601fc4ea7109e000000840281611e9a57fe5b0481611ea257fe5b601054601154601254601354949093049c919b5099509097509095509350505050565b6007546001600160a01b03163314611eef5760405162461bcd60e51b81526004016109d3906157da565b604080518082019091526001600160a01b039283168152602081019182526000805460018101825590805290517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b0319169190941617909255517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56490910155565b606083518551148015611f945750845182145b611fb05760405162461bcd60e51b81526004016109d39061540b565b60005b855181101561202457612005868281518110611fcb57fe5b6020026020010151868381518110611fdf57fe5b6020026020010151868685818110611ff357fe5b90506020028101906103289190615b60565b82828151811061201157fe5b6020908102919091010152600101611fb3565b50949350505050565b60296020526000908152604090205481565b6007546000906001600160a01b0316331461206c5760405162461bcd60e51b81526004016109d3906157da565b6004546001600160a01b038481169116141561209a5760405162461bcd60e51b81526004016109d39061582f565b6001600160a01b038316612112576007546040516001600160a01b039091169083906120c5906151fd565b60006040518083038185875af1925050503d8060008114612102576040519150601f19603f3d011682016040523d82523d6000602084013e612107565b606091505b505080915050610884565b6001600160a01b038316156121ae5760075460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb9261215592909116908690600401615238565b602060405180830381600087803b15801561216f57600080fd5b505af1158015612183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a79190614f3b565b9050610884565b506000610884565b600080602b84815481106121c657fe5b906000526020600020906002020190506000602b84815481106121e557fe5b9060005260206000209060020201905060006001905082600101548260010154101561220f575060005b600081156122295783600101548360010154039050612237565b826001015484600101540390505b6000846001015482670de0b6b3a7640000028161225057fe5b8654865492909104925090036000816301dfe20084028161226d57fe5b049050841561228457965061088495505050505050565b6000039998505050505050505050565b600080546122a457506000612388565b60005b60005481101561238257600081815481106122be57fe5b906000526020600020906002020160010154600082815481106122dd57fe5b60009182526020909120600290910201546040516370a0823160e01b81526001600160a01b03909116906370a082319061231b908790600401615200565b60206040518083038186803b15801561233357600080fd5b505afa158015612347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236b9190614fcd565b1061237a576001915050612388565b6001016122a7565b50600090505b919050565b6060600260405160200161080b91906151be565b60006123ae338484610cc0565b9392505050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156124385780601f1061240d57610100808354040283529160200191612438565b820191906000526020600020905b81548152906001019060200180831161241b57829003601f168201915b505050505081565b60015460ff16156124635760405162461bcd60e51b81526004016109d390615432565b6001805460ff191681179055600654600160a01b900460ff16156124995760405162461bcd60e51b81526004016109d39061550d565b6124a1610c35565b600e54600580546000906124b157fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906124ea903090600401615200565b60206040518083038186803b15801561250257600080fd5b505afa158015612516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253a9190614fcd565b11156125495761254930612ef2565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161257b91309101615200565b60206040518083038186803b15801561259357600080fd5b505afa1580156125a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cb9190614fcd565b600654604051630cacd00160e11b81529192506000916001600160a01b0390911690631959a00290612601903090600401615200565b60806040518083038186803b15801561261957600080fd5b505afa15801561262d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126519190614f6f565b60200151600480546040516323b872dd60e01b81529293506001600160a01b0316916323b872dd916126899133913091899101615214565b602060405180830381600087803b1580156126a357600080fd5b505af11580156126b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126db9190614f3b565b6126f75760405162461bcd60e51b81526004016109d390615554565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161272991309101615200565b60206040518083038186803b15801561274157600080fd5b505afa158015612755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127799190614fcd565b905060006127b7846040518060400160405280600d81526020016c111a5c9d1e4819195c1bdcda5d609a1b815250846148fc9092919063ffffffff16565b60065460405163b6b55f2560e01b81529192506001600160a01b03169063b6b55f25906127e89084906004016152bc565b600060405180830381600087803b15801561280257600080fd5b505af1158015612816573d6000803e3d6000fd5b5050600654604051630cacd00160e11b8152600093506001600160a01b039091169150631959a0029061284d903090600401615200565b60806040518083038186803b15801561286557600080fd5b505afa158015612879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289d9190614f6f565b60200151905060006128dd856040518060400160405280600b81526020016a4469727479207374616b6560a81b815250846148fc9092919063ffffffff16565b9050600080600354116128f25750808061290f565b61290b866112026003548561488090919063ffffffff16565b9050805b506003805482019055600b54600090156129535761292c33612294565b61294d57612948620f4240611202600a60015b01548590614880565b612950565b60005b90505b80156129aa57600880546001600160a01b03908116600090815260296020526040808220805486019055925492519290911691600080516020615c0b833981519152906129a19085906152bc565b60405180910390a35b6129b48282614928565b33600081815260296020526040902080549092019091557f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158a6129f78585614928565b604051612a05929190615a91565b60405180910390a2336000600080516020615c0b833981519152612a298585614928565b604051612a3691906152bc565b60405180910390a350506001805460ff1916905550505050505050565b60148160138110612a6357600080fd5b01546001600160a01b0316905081565b600654600160a01b900460ff1681565b6006546001600160a01b031681565b60006108848260001961081f565b602a60209081526000928352604080842090915290825290205481565b600954602254602854604051631f29a8cd60e31b81526000936001600160a01b0390811693859391169163f94d466891612af9916004016152bc565b60006040518083038186803b158015612b1157600080fd5b505afa158015612b25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b4d9190810190614e3e565b50602354604080516318160ddd60e01b81529051929450600093506001600160a01b03909116916318160ddd91600480820192602092909190829003018186803b158015612b9a57600080fd5b505afa158015612bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd29190614fcd565b9050670de0b6b3a76400006001600160a01b03841663edb0f3b06014601201546040516001600160e01b031960e084901b168152612c1c916001600160a01b031690600401615200565b60206040518083038186803b158015612c3457600080fd5b505afa158015612c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6c9190614fcd565b82612c756108a1565b85600181518110612c8257fe5b60200260200101510281612c9257fe5b040281612c9b57fe5b04670de0b6b3a76400006001600160a01b03851663edb0f3b06014600c01546040516001600160e01b031960e084901b168152612ce4916001600160a01b031690600401615200565b60206040518083038186803b158015612cfc57600080fd5b505afa158015612d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d349190614fcd565b83612d3d6108a1565b86600081518110612d4a57fe5b60200260200101510281612d5a57fe5b040281612d6357fe5b0401935050505090565b60058181548110612d7d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b03163314612dc15760405162461bcd60e51b81526004016109d3906157da565b600080546000198101908110612dd357fe5b906000526020600020906002020160008281548110612dee57fe5b600091825260208220835460029092020180546001600160a01b0319166001600160a01b03909216919091178155600192830154920191909155805480612e3157fe5b60008281526020812060026000199093019283020180546001600160a01b031916815560010155905550565b602b8181548110612e6d57600080fd5b60009182526020909120600290910201805460019091015490915082565b602b5460009060021115612e9e57600080fd5b602b546000908190600019015b600081118015612eba57508482125b15612edf57612ecc60018203826121b6565b9092019160019091019060001901612eab565b50808281612ee957fe5b05949350505050565b600654600160a01b900460ff1615612f1c5760405162461bcd60e51b81526004016109d39061564e565b601a546040805163a5e992bb60e01b815290516001600160a01b039092169163a5e992bb9160048082019260009290919082900301818387803b158015612f6257600080fd5b505af1158015612f76573d6000803e3d6000fd5b50505050600060405180606001604052806014600360138110612f9557fe5b01546040516370a0823160e01b81526001600160a01b03909116906370a0823190612fc4903090600401615200565b60206040518083038186803b158015612fdc57600080fd5b505afa158015612ff0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130149190614fcd565b8152601754601e546040516370a0823160e01b81526020909301926001600160a01b03928316926370a082319261305092911690600401615200565b60206040518083038186803b15801561306857600080fd5b505afa15801561307c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130a09190614fcd565b8152601754601f546040516370a0823160e01b81526020909301926001600160a01b03928316926370a08231926130dc92911690600401615200565b60206040518083038186803b1580156130f457600080fd5b505afa158015613108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312c9190614fcd565b90529050606060146003015481516001600160a01b0390911690829060009061315157fe5b6001600160a01b03928316602091820292909201015260155482519116908290600190811061317c57fe5b6001600160a01b03928316602091820292909201810191909152601b5460408501519185015185519190931692635c11d7959281019102816131ba57fe5b0460018430426040518663ffffffff1660e01b81526004016131e0959493929190615993565b600060405180830381600087803b1580156131fa57600080fd5b505af115801561320e573d6000803e3d6000fd5b50505050601460086013811061322057fe5b01546040830151602084015184516001600160a01b0390931692635c11d7959291820191028161324c57fe5b0460018430426040518663ffffffff1660e01b8152600401613272959493929190615993565b600060405180830381600087803b15801561328c57600080fd5b505af11580156132a0573d6000803e3d6000fd5b5050505050506000604051806060016040528060146004601381106132c157fe5b01546040516370a0823160e01b81526001600160a01b03909116906370a08231906132f0903090600401615200565b60206040518083038186803b15801561330857600080fd5b505afa15801561331c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133409190614fcd565b81526020016014600401546001600160a01b03166370a082316014600c01546040516001600160e01b031960e084901b168152613389916001600160a01b031690600401615200565b60206040518083038186803b1580156133a157600080fd5b505afa1580156133b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d99190614fcd565b81526001602090910152602154602754604051631f29a8cd60e31b81529293506000926001600160a01b039092169163f94d46689161341a916004016152bc565b60006040518083038186803b15801561343257600080fd5b505afa158015613446573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261346e9190810190614e3e565b509150508060008151811061347f57fe5b60200260200101518260026003811061349457fe5b6020020152604080516060818101909252806014600101546001600160a01b031681526020016014600401546001600160a01b031681526000602090910181905282518391906134e057fe5b602090810291909101810191909152601d5460408501519185015185516001600160a01b039092169263f41766d89290820191028161351b57fe5b0460018430426040518663ffffffff1660e01b8152600401613541959493929190615a03565b600060405180830381600087803b15801561355b57600080fd5b505af115801561356f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135979190810190614f09565b5060408051608080820183523080835260006020808501829052848601929092526060808501829052855160c08101875260275481528084018390526015546001600160a01b039081168289015260185416918101919091529488015191880151885194959194919384019290810191028161360f57fe5b048152602001600060405160200161362791906153a0565b60408051808303601f19018152918152915260215490516352bbbe2960e01b81529192506001600160a01b0316906352bbbe299061367090849086906001904290600401615907565b602060405180830381600087803b15801561368a57600080fd5b505af115801561369e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c29190614fcd565b50505050505060006014600e601381106136d857fe5b0154602854604051631f29a8cd60e31b81526001600160a01b039092169163f94d466891613708916004016152bc565b60006040518083038186803b15801561372057600080fd5b505afa158015613734573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261375c9190810190614e3e565b506018546040516370a0823160e01b8152919350600092506001600160a01b0316906370a0823190613792903090600401615200565b60206040518083038186803b1580156137aa57600080fd5b505afa1580156137be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137e29190614fcd565b9050816001815181106137f157fe5b60200260200101518260008151811061380657fe5b60200260200101511015613d24578160008151811061382157fe5b60200260200101518260018151811061383657fe5b6020026020010151038110156139d257604080516002808252606082018352600092602083019080368337505060185482519293506001600160a01b03169183915060009061388157fe5b6001600160a01b0392831660209182029290920101526019548251911690829060019081106138ac57fe5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050905082816000815181106138f557fe5b60200260200101818152505060008160018151811061391057fe5b60200260200101818152505060006001826001604051602001613935939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac289161399791903090819087906004016152c5565b600060405180830381600087803b1580156139b157600080fd5b505af11580156139c5573d6000803e3d6000fd5b5050505050505050613d24565b816000815181106139df57fe5b6020026020010151826001815181106139f457fe5b602002602001015103811115613d245760195482516001600160a01b039091169063b6b55f25906002908590600090613a2957fe5b602002602001015185600181518110613a3e57fe5b602002602001015103840381613a5057fe5b046040518263ffffffff1660e01b8152600401613a6d91906152bc565b600060405180830381600087803b158015613a8757600080fd5b505af1158015613a9b573d6000803e3d6000fd5b50506040805160028082526060820183526000945090925090602083019080368337505060185482519293506001600160a01b031691839150600090613add57fe5b6001600160a01b039283166020918202929092010152601954825191169082906001908110613b0857fe5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833750506018546040516370a0823160e01b81529293506001600160a01b0316916370a082319150613b71903090600401615200565b60206040518083038186803b158015613b8957600080fd5b505afa158015613b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc19190614fcd565b81600081518110613bce57fe5b60209081029190910101526019546040516370a0823160e01b81526001600160a01b03909116906370a0823190613c09903090600401615200565b60206040518083038186803b158015613c2157600080fd5b505afa158015613c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c599190614fcd565b81600181518110613c6657fe5b60200260200101818152505060006001826001604051602001613c8b939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac2891613ced91903090819087906004016152c5565b600060405180830381600087803b158015613d0757600080fd5b505af1158015613d1b573d6000803e3d6000fd5b50505050505050505b81600181518110613d3157fe5b602002602001015182600081518110613d4657fe5b602002602001015111156143495781600181518110613d6157fe5b602002602001015182600081518110613d7657fe5b602002602001015103811015613ff55760195460405163b6b55f2560e01b81526001600160a01b039091169063b6b55f2590613db69084906004016152bc565b600060405180830381600087803b158015613dd057600080fd5b505af1158015613de4573d6000803e3d6000fd5b50506040805160028082526060820183526000945090925090602083019080368337505060185482519293506001600160a01b031691839150600090613e2657fe5b6001600160a01b039283166020918202929092010152601954825191169082906001908110613e5157fe5b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337019050509050600081600081518110613e9b57fe5b60209081029190910101526019546040516370a0823160e01b81526001600160a01b03909116906370a0823190613ed6903090600401615200565b60206040518083038186803b158015613eee57600080fd5b505afa158015613f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f269190614fcd565b81600181518110613f3357fe5b60200260200101818152505060006001826001604051602001613f58939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac2891613fba91903090819087906004016152c5565b600060405180830381600087803b158015613fd457600080fd5b505af1158015613fe8573d6000803e3d6000fd5b5050505050505050614349565b8160018151811061400257fe5b60200260200101518260008151811061401757fe5b6020026020010151038111156143495760195482516001600160a01b039091169063b6b55f25906002908590600190811061404e57fe5b60200260200101518560008151811061406357fe5b60200260200101518501038161407557fe5b046040518263ffffffff1660e01b815260040161409291906152bc565b600060405180830381600087803b1580156140ac57600080fd5b505af11580156140c0573d6000803e3d6000fd5b50506040805160028082526060820183526000945090925090602083019080368337505060185482519293506001600160a01b03169183915060009061410257fe5b6001600160a01b03928316602091820292909201015260195482519116908290600190811061412d57fe5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833750506018546040516370a0823160e01b81529293506001600160a01b0316916370a082319150614196903090600401615200565b60206040518083038186803b1580156141ae57600080fd5b505afa1580156141c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e69190614fcd565b816000815181106141f357fe5b60209081029190910101526019546040516370a0823160e01b81526001600160a01b03909116906370a082319061422e903090600401615200565b60206040518083038186803b15801561424657600080fd5b505afa15801561425a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427e9190614fcd565b8160018151811061428b57fe5b602002602001018181525050600060018260016040516020016142b0939291906153ae565b60408051808303601f190181526080830182528583526020830185905282820181905260006060840152602254602854925163172b958560e31b81529194506001600160a01b03169163b95cac289161431291903090819087906004016152c5565b600060405180830381600087803b15801561432c57600080fd5b505af1158015614340573d6000803e3d6000fd5b50505050505050505b5050600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161437d91309101615200565b60206040518083038186803b15801561439557600080fd5b505afa1580156143a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143cd9190614fcd565b600654604051630cacd00160e11b81529192506000916001600160a01b0390911690631959a00290614403903090600401615200565b60806040518083038186803b15801561441b57600080fd5b505afa15801561442f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144539190614f6f565b6020015160065460405163b6b55f2560e01b81529192506001600160a01b03169063b6b55f25906144889085906004016152bc565b600060405180830381600087803b1580156144a257600080fd5b505af11580156144b6573d6000803e3d6000fd5b5050600654604051630cacd00160e11b8152600093506001600160a01b039091169150631959a002906144ed903090600401615200565b60806040518083038186803b15801561450557600080fd5b505afa158015614519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061453d9190614f6f565b602001519050600061457d836040518060400160405280600b81526020016a4469727479207374616b6560a81b815250846148fc9092919063ffffffff16565b90506000600a600501546145a457426001600160401b0316600f556145a06108a1565b6012555b60108054601155426001600160401b031690556012546013556145c56108a1565b6012556003546145d7575080806145f4565b6145f0846112026003548561488090919063ffffffff16565b9050805b5061460c620f4240611202600a600201548490614880565b6008546001600160a01b03908116600090815260296020526040812080549093019092558716301461463e578661464b565b6008546001600160a01b03165b9050614660620f4240611202600a600361293f565b6001600160a01b0382166000908152602960205260409020805490910190556146b6614699620f4240611202600a600301548690614880565b6146b0620f4240611202600a600201548790614880565b9061496a565b6003805490910190556008546001600160a01b03166000600080516020615c0b8339815191526146f4620f4240611202600a60025b01548890614880565b60405161470191906152bc565b60405180910390a36001600160a01b0381166000600080516020615c0b833981519152614737620f4240611202600a60036146eb565b60405161474491906152bc565b60405180910390a360006147566108a1565b90506000614762612abd565b600354602b80549293509091600019810190811061477c57fe5b906000526020600020906002020160000154603c0142106147e857602b60405180604001604052804281526020018386670de0b6b3a764000002816147bd57fe5b0490528154600181810184556000938452602093849020835160029093020191825592909101519101555b6001600160a01b038a167f0db7a68b5ae8f9feafd9a896acf42b110c0d2e30c340a7f7accf80a9ce5eec9d8361482b620f4240611202600a600201548b90614880565b614842620f4240611202600a600301548c90614880565b428887888b670de0b6b3a7640000028161485857fe5b0460405161486c9796959493929190615b30565b60405180910390a250505050505050505050565b60008261488f57506000610884565b8282028284828161489c57fe5b04146123ae5760405162461bcd60e51b81526004016109d3906156c4565b60006123ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061498f565b600081848411156149205760405162461bcd60e51b81526004016109d3919061538d565b505050900390565b60006123ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506148fc565b6000828201838110156123ae5760405162461bcd60e51b81526004016109d39061544f565b600081836149b05760405162461bcd60e51b81526004016109d3919061538d565b5060008385816149bc57fe5b0495945050505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b600082601f8301126149fe578081fd5b81356020614a13614a0e83615bc7565b615ba4565b8281528181019085830183850287018401881015614a2f578586fd5b855b85811015614a56578135614a4481615be4565b84529284019290840190600101614a31565b5090979650505050505050565b60008083601f840112614a74578182fd5b5081356001600160401b03811115614a8a578182fd5b6020830191508360208083028501011115614aa457600080fd5b9250929050565b600082601f830112614abb578081fd5b81516020614acb614a0e83615bc7565b8281528181019085830183850287018401881015614ae7578586fd5b855b85811015614a5657815184529284019290840190600101614ae9565b60008083601f840112614b16578182fd5b5081356001600160401b03811115614b2c578182fd5b602083019150836020828501011115614aa457600080fd5b600060208284031215614b55578081fd5b81356123ae81615be4565b60008060408385031215614b72578081fd5b8235614b7d81615be4565b91506020830135614b8d81615be4565b809150509250929050565b600080600060608486031215614bac578081fd5b8335614bb781615be4565b92506020840135614bc781615be4565b929592945050506040919091013590565b600080600060408486031215614bec578081fd5b8335614bf781615be4565b925060208401356001600160401b03811115614c11578182fd5b614c1d86828701614b05565b9497909650939450505050565b60008060408385031215614c3c578182fd5b8235614c4781615be4565b946020939093013593505050565b60008060008060608587031215614c6a578182fd5b8435614c7581615be4565b93506020850135925060408501356001600160401b03811115614c96578283fd5b614ca287828801614b05565b95989497509550505050565b60008060408385031215614cc0578182fd5b82356001600160401b0380821115614cd6578384fd5b614ce2868387016149ee565b9350602091508185013581811115614cf8578384fd5b85019050601f81018613614d0a578283fd5b8035614d18614a0e82615bc7565b81815283810190838501858402850186018a1015614d34578687fd5b8694505b83851015614d5f578035614d4b81615bfc565b835260019490940193918501918501614d38565b5080955050505050509250929050565b60008060008060608587031215614d84578182fd5b84356001600160401b0380821115614d9a578384fd5b614da6888389016149ee565b9550602091508187013581811115614dbc578485fd5b8701601f81018913614dcc578485fd5b8035614dda614a0e82615bc7565b81815284810190838601868402850187018d1015614df6578889fd5b8894505b83851015614e18578035835260019490940193918601918601614dfa565b5097505050506040870135915080821115614e31578384fd5b50614ca287828801614a63565b600080600060608486031215614e52578081fd5b83516001600160401b0380821115614e68578283fd5b818601915086601f830112614e7b578283fd5b81516020614e8b614a0e83615bc7565b82815281810190858301838502870184018c1015614ea7578788fd5b8796505b84871015614ed2578051614ebe81615be4565b835260019690960195918301918301614eab565b5091890151919750909350505080821115614eeb578283fd5b50614ef886828701614aab565b925050604084015190509250925092565b600060208284031215614f1a578081fd5b81516001600160401b03811115614f2f578182fd5b61089984828501614aab565b600060208284031215614f4c578081fd5b81516123ae81615bfc565b600060208284031215614f68578081fd5b5035919050565b600060808284031215614f80578081fd5b604051608081018181106001600160401b0382111715614f9c57fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215614fde578081fd5b5051919050565b60008060408385031215614ff7578182fd5b50508035926020909101359150565b60008060408385031215615018578182fd5b505080516020909101519092909150565b600080600080600060a08688031215615040578283fd5b853594506020860135935060408601359250606086013561506081615be4565b949793965091946080013592915050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156150ad57815187529582019590820190600101615091565b509495945050505050565b15159052565b60008151808452815b818110156150e3576020818501810151868301820152016150c7565b818111156150f45782602083870101525b50601f01601f19169290920160200192915050565b60008154600180821660008114615127576001811461513e57615170565b60ff198316865260028304607f1686019350615170565b600283048560005260208060002060005b838110156151685781548a82015290850190820161514f565b505050860193505b50505092915050565b80516001600160a01b039081168352602080830151151590840152604080830151909116908301526060908101511515910152565b6000828483379101908152919050565b600065475241494e2360d01b82526123ae6006830184615109565b60006e66746d2e677572752f475241494e2f60881b82526123ae600f830184615109565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156152a457603f198886030184526152928583516150be565b94509285019290850190600101615276565b5092979650505050505050565b901515815260200190565b90815260200190565b6000858252602060018060a01b0380871682850152808616604085015260806060850152610100840185516080808701528181518084526101208801915085830193508692505b8083101561532e5783518516825292850192600192909201919085019061530c565b50848801519450607f199350838782030160a088015261534e818661507e565b94505050506040850151818584030160c086015261536c83826150be565b92505050606084015161538260e08501826150b8565b509695505050505050565b6000602082526123ae60208301846150be565b60ff91909116815260200190565b600060ff85168252606060208301526153ca606083018561507e565b905060ff83166040830152949350505050565b6020808252601490820152734e6f74206d75636820776f726b20746f20646f2160601b604082015260600190565b6020808252600d908201526c082e4cee6409ad2e6dac2e8c6d609b1b604082015260600190565b60208082526003908201526221524760e81b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526030908201527f536f7272792c20746f756368696e6720757365722773204c502069732070726f60408201526f3434b134ba32b21030b9903bb2b6361760811b606082015260800190565b6020808252601c908201527f53657220796f7520617265204e4f5420617574686f72697a6564212100000000604082015260600190565b60208082526027908201527f49747320616e20656d657267656e63792e20506c6561736520646f6e2774206460408201526632b837b9b4ba1760c91b606082015260800190565b602080825260119082015270155b98589b19481d1bc81bdb989bd85c99607a1b604082015260600190565b6020808252601b908201527f456d657267656e637920616c7265616479206465636c617265642e0000000000604082015260600190565b602080825260099082015268042eed27440d0d2ced60bb1b604082015260600190565b60208082526032908201527f536f7272792c20746f756368696e67206f75722075736572277320706f73697460408201527134b7b71034b990383937b434b134ba32b21760711b606082015260800190565b602080825260099082015268042c8cc7440d0d2ced60bb1b604082015260600190565b60208082526031908201527f49747320616e20656d657267656e63792e2055736520656d657267656e63795760408201527034ba34323930bb941490383632b0b9b29760791b606082015260800190565b6020808252600b908201526a43433a204661696c65642160a81b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260099082015268042e0cc7440d0d2ced60bb1b604082015260600190565b60208082526017908201527f456d657267656e6379206e6f74206465636c617265642e000000000000000000604082015260600190565b6020808252602d908201527f497473206e6f7420616e20656d657267656e63792e205573652077697468647260408201526c30bb94149034b739ba32b0b21760991b606082015260800190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b60208082526035908201527f4f6e6c7920452e4c2e492e542e452e20442e412e4f2e2054726561737572792060408201527463616e20726573637565207472656173757265732160581b606082015260800190565b6020808252601c908201527f46756e647320617265205361667520696e20656d657267656e63792100000000604082015260600190565b602080825260119082015270155b98589b19481d1bc81919589bd85c99607a1b604082015260600190565b6020808252600c908201526b456c69746573206f6e6c792160a01b604082015260600190565b60208082526030908201527f536f7272792c20746f756368696e6720796f757273656c662066726f6d20746860408201526f32903130b1b59034b99033b937b9b99760811b606082015260800190565b600060e08252855160e083015260208601516002811061592357fe5b61010083015260408601516001600160a01b03908116610120840152606087015116610140830152608086015161016083015260a086015160c06101808401526159716101a08401826150be565b9150506159816020830186615179565b60a082019390935260c0015292915050565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156159e25784516001600160a01b0316835293830193918301916001016159bd565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a0820187835260208781850152604060a08186015282885180855260c087019150838a019450855b81811015615a6b57855180516001600160a01b03908116855286820151168685015284015115158484015294840194606090920191600101615a2e565b505080945050505050615a816060830185615071565b8260808301529695505050505050565b918252602082015260400190565b60006101608a8352896020840152886040840152876060840152806080840152615acb8184018861507e565b865160a0850152602087015160c0850152604087015160e085015260609096015161010084015250506101208101929092526101409091015295945050505050565b948552602085019390935260408401919091526060830152608082015260a00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b6000808335601e19843603018112615b76578283fd5b8301803591506001600160401b03821115615b8f578283fd5b602001915036819003821315614aa457600080fd5b6040518181016001600160401b0381118282101715615bbf57fe5b604052919050565b60006001600160401b03821115615bda57fe5b5060209081020190565b6001600160a01b0381168114615bf957600080fd5b50565b8015158114615bf957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ea6ec4c7f984017e7a64af2b5d888f374b8d9c78baa654abb64a52ab5cec6e9364736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000043534303100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _id (string): 5401

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 3534303100000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

14624:26826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17448:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20995:160;;;;;;;;;;-1:-1:-1;20995:160:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39940:128::-;;;;;;:::i;:::-;;:::i;35895:135::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40441:998::-;;;;;;:::i;:::-;;:::i;17729:26::-;;;;;;;;;;;;;:::i;15898:25::-;;;;;;;;;;-1:-1:-1;15898:25:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;39731:157::-;;;;;;;;;;-1:-1:-1;39731:157:0;;;;;:::i;:::-;;:::i;:::-;;24568:66;;;;;;;;;;;;;:::i;20159:221::-;;;;;;;;;;-1:-1:-1;20159:221:0;;;;;:::i;:::-;;:::i;17759:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21279:408::-;;;;;;;;;;-1:-1:-1;21279:408:0;;;;;:::i;:::-;;:::i;18347:418::-;;;;;;;;;;-1:-1:-1;18347:418:0;;;;;:::i;:::-;;:::i;33400:178::-;;;;;;;;;;;;;:::i;17913:19::-;;;;;;;;;;;;;:::i;37558:94::-;;;;;;;;;;;;;:::i;23363:954::-;;;;;;;;;;-1:-1:-1;23363:954:0;;;;;:::i;:::-;;:::i;17663:61::-;;;;;;;;;;;;;:::i;33137:258::-;;;;;;;;;;;;;:::i;35005:885::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;17864:18::-;;;;;;;;;;;;;:::i;39677:50::-;;;;;;;;;;-1:-1:-1;39677:50:0;;;;;:::i;:::-;;:::i;16555:329::-;;;;;;;;;;-1:-1:-1;16555:329:0;;;;;:::i;:::-;;:::i;24322:241::-;;;;;;;;;;;;;:::i;33583:516::-;;;;;;;;;;-1:-1:-1;33583:516:0;;;;;:::i;:::-;;:::i;17886:23::-;;;;;;;;;;;;;:::i;36035:466::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;15929:122::-;;;;;;;;;;-1:-1:-1;15929:122:0;;;;;:::i;:::-;;:::i;40074:361::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20782:43::-;;;;;;;;;;-1:-1:-1;20782:43:0;;;;;:::i;:::-;;:::i;34110:830::-;;;;;;;;;;-1:-1:-1;34110:830:0;;;;;:::i;:::-;;:::i;38381:1019::-;;;;;;;;;;-1:-1:-1;38381:1019:0;;;;;:::i;:::-;;:::i;16222:328::-;;;;;;;;;;-1:-1:-1;16222:328:0;;;;;:::i;:::-;;:::i;17559:101::-;;;;;;;;;;;;;:::i;21160:114::-;;;;;;;;;;-1:-1:-1;21160:114:0;;;;;:::i;:::-;;:::i;17341:16::-;;;;;;;;;;;;;:::i;21692:1666::-;;;;;;;;;;-1:-1:-1;21692:1666:0;;;;;:::i;:::-;;:::i;18771:1331::-;;;;;;;;;;-1:-1:-1;18771:1331:0;;;;;:::i;:::-;;:::i;17831:29::-;;;;;;;;;;;;;:::i;17806:21::-;;;;;;;;;;;;;:::i;20899:91::-;;;;;;;;;;-1:-1:-1;20899:91:0;;;;;:::i;:::-;;:::i;20829:64::-;;;;;;;;;;-1:-1:-1;20829:64:0;;;;;:::i;:::-;;:::i;36637:521::-;;;;;;;;;;;;;:::i;17781:21::-;;;;;;;;;;-1:-1:-1;17781:21:0;;;;;:::i;:::-;;:::i;16056:109::-;;;;;;;;;;-1:-1:-1;16056:109:0;;;;;:::i;:::-;;:::i;37525:27::-;;;;;;;;;;-1:-1:-1;37525:27:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;37873:390::-;;;;;;;;;;-1:-1:-1;37873:390:0;;;;;:::i;:::-;;:::i;17448:108::-;17484:13;17549:2;17513:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;17499:55;;17448:108;:::o;20995:160::-;21072:10;21051:4;21062:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;21062:26:0;;;;;;;;;;:32;;;21104:30;21051:4;;21062:26;;21104:30;;;;21091:3;;21104:30;:::i;:::-;;;;;;;;-1:-1:-1;21146:4:0;20995:160;;;;;:::o;39940:128::-;40018:12;40040:25;40051:3;40056:1;40059:5;;40040:10;:25::i;:::-;40033:32;39940:128;-1:-1:-1;;;;39940:128:0:o;35895:135::-;35995:4;;;35988:37;;-1:-1:-1;;;35988:37:0;;35931:7;;-1:-1:-1;;;;;35995:4:0;;;;35988:22;;:37;;36019:4;;35988:37;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35952:2;;:26;;-1:-1:-1;;;35952:26:0;;-1:-1:-1;;;;;35952:2:0;;;;:11;;:26;;35972:4;;35952:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;:73;35945:80;;35895:135;:::o;40441:998::-;16928:2;;40537:12;;16928:2;;:7;16920:22;;;;-1:-1:-1;;;16920:22:0;;;;;;;:::i;:::-;;;;;;;;;16952:1;16947:6;;-1:-1:-1;;16947:6:0;;;;;40645:3:::1;::::0;-1:-1:-1;;;;;40645:3:0::1;40633:10;:15;::::0;:50:::1;;-1:-1:-1::0;40672:10:0::1;40652:31;::::0;;;:19:::1;:31;::::0;;;;;::::1;;40633:50;40625:90;;;;-1:-1:-1::0;;;40625:90:0::1;;;;;;;:::i;:::-;40742:2;::::0;-1:-1:-1;;;;;40728:17:0;;::::1;40742:2:::0;::::1;40728:17;;40720:80;;;;-1:-1:-1::0;;;40720:80:0::1;;;;;;;:::i;:::-;40827:4;::::0;-1:-1:-1;;;;;40813:19:0;;::::1;40827:4:::0;::::1;40813:19;;40805:80;;;;-1:-1:-1::0;;;40805:80:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40898:19:0;::::1;40912:4;40898:19;;40890:80;;;;-1:-1:-1::0;;;40890:80:0::1;;;;;;;:::i;:::-;40982:12;40996:23:::0;41023:2:::1;-1:-1:-1::0;;;;;41023:7:0::1;41037:6;41045:5;;41023:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40981:70;;;;41067:7;41062:370;;41095:17:::0;;:21;41091:280:::1;;41198:10;41192:17;41259:15;41246:10;41242:2;41238:19;41231:44;41146:148;41334:21;;-1:-1:-1::0;;;41334:21:0::1;;;;;;;:::i;41062:370::-;41410:10:::0;-1:-1:-1;41403:17:0::1;::::0;-1:-1:-1;41403:17:0::1;16958:1;16964:2:::0;:6;;-1:-1:-1;;16964:6:0;;;40441:998;;-1:-1:-1;;;;40441:998:0:o;17729:26::-;;;;:::o;15898:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15898:25:0;;;;-1:-1:-1;15898:25:0;:::o;39731:157::-;15772:3;;-1:-1:-1;;;;;15772:3:0;15760:10;:15;15752:80;;;;-1:-1:-1;;;15752:80:0;;;;;;;:::i;:::-;39813:6:::1;39809:75;39822:2;:9;39820:1;:11;39809:75;;;39873:2;39876:1;39873:5;;;;;;;;;;;;;;39843:19;:26;39863:2;39866:1;39863:5;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;39843:26:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;39843:26:0;:35;;-1:-1:-1;;39843:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;39832:3:0::1;39809:75;;;;39731:157:::0;;:::o;24568:66::-;24616:2;;:13;;-1:-1:-1;;;24616:13:0;;-1:-1:-1;;;;;24616:2:0;;;;:10;;:13;;:2;;:13;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24568:66::o;20159:221::-;;;;;;;;;;;;;;;-1:-1:-1;20159:221:0;:::o;17759:18::-;;;-1:-1:-1;;;;;17759:18:0;;:::o;21279:408::-;-1:-1:-1;;;;;21374:14:0;;21353:4;21374:14;;;:9;:14;;;;;;:21;-1:-1:-1;21374:21:0;21366:53;;;;-1:-1:-1;;;21366:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21428:17:0;;21435:10;21428:17;;;;:59;;-1:-1:-1;;;;;;21449:14:0;;;;;;:9;:14;;;;;;;;21464:10;21449:26;;;;;;;;-1:-1:-1;;21449:38:0;;21428:59;21424:158;;;-1:-1:-1;;;;;21503:14:0;;;;;;:9;:14;;;;;;;;21518:10;21503:26;;;;;;;;:33;-1:-1:-1;21503:33:0;21495:42;;;;;;-1:-1:-1;;;;;21543:14:0;;;;;;:9;:14;;;;;;;;21558:10;21543:26;;;;;;;:33;;;;;;;21424:158;-1:-1:-1;;;;;21586:14:0;;;;;;;:9;:14;;;;;;:21;;;;;;;21612:14;;;;;;;;;;:21;;;;;;21643:23;;-1:-1:-1;;;;;;;;;;;21643:23:0;;;21604:3;;21643:23;:::i;:::-;;;;;;;;-1:-1:-1;21678:4:0;21279:408;;;;;:::o;18347:418::-;;;;;;;;;;;33400:178;15772:3;;-1:-1:-1;;;;;15772:3:0;15760:10;:15;15752:80;;;;-1:-1:-1;;;15752:80:0;;;;;;;:::i;:::-;33453:9:::1;::::0;-1:-1:-1;;;33453:9:0;::::1;;;33445:44;;;;-1:-1:-1::0;;;33445:44:0::1;;;;;;;:::i;:::-;33506:4;::::0;;:29:::1;::::0;-1:-1:-1;;;33506:29:0;;33494:9:::1;::::0;-1:-1:-1;;;;;33506:4:0;;::::1;::::0;:14:::1;::::0;:29:::1;::::0;33529:4:::1;::::0;33506:29:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33540:2;::::0;:13:::1;::::0;-1:-1:-1;;;33540:13:0;;33494:41;;-1:-1:-1;;;;;;33540:2:0::1;::::0;:10:::1;::::0;:13:::1;::::0;33494:41;;33540:13:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33558:9:0::1;:15:::0;;-1:-1:-1;;;;33558:15:0::1;::::0;;-1:-1:-1;;;33400:178:0:o;17913:19::-;;;-1:-1:-1;;;;;17913:19:0;;:::o;37558:94::-;37630:10;:17;37558:94;:::o;23363:954::-;16928:2;;;;:7;16920:22;;;;-1:-1:-1;;;16920:22:0;;;;;;;:::i;:::-;16952:1;16947:6;;-1:-1:-1;;16947:6:0;;;;;23421:9:::1;::::0;-1:-1:-1;;;23421:9:0;::::1;16947:6:::0;23421:9:::1;23420:10;23412:71;;;;-1:-1:-1::0;;;23412:71:0::1;;;;;;;:::i;:::-;23506:10;23496:21;::::0;;;:9:::1;:21;::::0;;;;;:29;-1:-1:-1;23496:29:0::1;23488:61;;;;-1:-1:-1::0;;;23488:61:0::1;;;;;;;:::i;:::-;23622:9;:7;:9::i;:::-;23682:10:::0;;23646:4:::1;:7:::0;;23651:1:::1;::::0;23646:7:::1;;;;;::::0;;;::::1;::::0;;;::::1;::::0;23639:40:::1;::::0;-1:-1:-1;;;23639:40:0;;-1:-1:-1;;;;;23646:7:0;;::::1;::::0;23639:25:::1;::::0;:40:::1;::::0;23673:4:::1;::::0;23639:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;23636:80;;;23695:19;23708:4;23695;:19::i;:::-;23763:10;23753:21;::::0;;;:9:::1;:21;::::0;;;;;:29;;;;::::1;::::0;;23800:11:::1;::::0;;23840:19;;::::1;::::0;;;23869:38;;23800:11;;23763:10;-1:-1:-1;;;;;;;;;;;23869:38:0;::::1;::::0;23778:4;;23869:38:::1;:::i;:::-;;;;;;;;23926:4;::::0;;:29:::1;::::0;-1:-1:-1;;;23926:29:0;;23912:11:::1;::::0;-1:-1:-1;;;;;23926:4:0;;::::1;::::0;:14:::1;::::0;:29:::1;::::0;23949:4:::1;::::0;23926:29:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23975:2;::::0;:26:::1;::::0;-1:-1:-1;;;23975:26:0;;23912:43;;-1:-1:-1;23960:12:0::1;::::0;-1:-1:-1;;;;;23975:2:0;;::::1;::::0;:11:::1;::::0;:26:::1;::::0;23995:4:::1;::::0;23975:26:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;::::0;;-1:-1:-1;24055:9:0::1;24067:26;24090:2:::0;24069:14:::1;:4:::0;23975:33;24069:8:::1;:14::i;:::-;24067:22:::0;::::1;:26::i;:::-;24098:2;::::0;:14:::1;::::0;-1:-1:-1;;;24098:14:0;;24055:38;;-1:-1:-1;;;;;;24098:2:0::1;::::0;:11:::1;::::0;:14:::1;::::0;24055:38;;24098:14:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24131:4:0::1;::::0;;:29:::1;::::0;-1:-1:-1;;;24131:29:0;;24117:11:::1;::::0;-1:-1:-1;;;;;;24131:4:0;;::::1;::::0;-1:-1:-1;24131:14:0::1;::::0;:29:::1;::::0;24154:4:::1;::::0;24131:29:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24117:43;;24165:9;24177:31;24185:3;24177:31;;;;;;;;;;;;;-1:-1:-1::0;;;24177:31:0::1;;::::0;:3:::1;:7;;:31;;;;;:::i;:::-;24224:4;::::0;;:27:::1;::::0;-1:-1:-1;;;24224:27:0;;24165:43;;-1:-1:-1;;;;;;24224:4:0::1;::::0;:13:::1;::::0;:27:::1;::::0;24238:10:::1;::::0;24165:43;;24224:27:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24216:57;;;;-1:-1:-1::0;;;24216:57:0::1;;;;;;;:::i;:::-;24292:10;-1:-1:-1::0;;;;;24283:29:0::1;;24304:1;24307:4;24283:29;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;16964:2:0;:6;;-1:-1:-1;;16964:6:0;;;-1:-1:-1;;;;;23363:954:0:o;17663:61::-;17719:2;17663:61;:::o;33137:258::-;15772:3;;-1:-1:-1;;;;;15772:3:0;15760:10;:15;15752:80;;;;-1:-1:-1;;;15752:80:0;;;;;;;:::i;:::-;33190:9:::1;::::0;-1:-1:-1;;;33190:9:0;::::1;;;33189:10;33181:49;;;;-1:-1:-1::0;;;33181:49:0::1;;;;;;;:::i;:::-;33323:2;::::0;33336:26:::1;::::0;-1:-1:-1;;;33336:26:0;;-1:-1:-1;;;;;33323:2:0;;::::1;::::0;:11:::1;::::0;:2;;33336:11:::1;::::0;:26:::1;::::0;33356:4:::1;::::0;33336:26:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;33323:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33376:9:0::1;:14:::0;;-1:-1:-1;;;;33376:14:0::1;-1:-1:-1::0;;;33376:14:0::1;::::0;;-1:-1:-1;;33137:258:0:o;35005:885::-;35042:7;35051;35060;35069;35078:16;35096:27;;:::i;:::-;35125:7;35134;35253:11;35278;;35267:5;:3;:5::i;:::-;35273:4;35267:10;:22;;;;;;;-1:-1:-1;35312:11:0;35367:7;35375:1;35367:10;;35356:7;35364:1;35356:10;;:21;35327:26;-1:-1:-1;;35328:8:0;;35327:26;35356:21;35326:52;;;;;35312:66;;35402:7;35411;35422:2;;;;;;;;;-1:-1:-1;;;;;35422:2:0;-1:-1:-1;;;;;35422:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35401:40;;;;35491:18;35568:4;35535;;;;;;;;;-1:-1:-1;;;;;35535:4:0;-1:-1:-1;;;;;35530:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35527:23;;:37;;35526:46;;;;;;35514:4;35519:1;35514:7;;;;;;;;;;;;;;;;;;:60;;;;35664:10;;35658:33;;;-1:-1:-1;;;35658:33:0;;;;35696:4;;-1:-1:-1;;;;;35664:10:0;;;;35658:31;;:33;;;;;;;;;;;35664:10;35658:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35603:4;;35622:11;;35598:36;;-1:-1:-1;;;35598:36:0;;-1:-1:-1;;;;;35603:4:0;;;;35598:23;;:36;;35622:11;;;35598:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35595:39;;:59;;35593:98;;;;;;35591:109;;;;;;35579:4;35584:1;35579:7;;;;;;;;;;;;;:123;;;;;35719:5;:3;:5::i;:::-;35730:3;35739;35758:4;35763:1;35758:7;;;;;;;;;;;;;;35748:4;35753:1;35748:7;;;;;;;;;;;;;;;;;;35781:2;;:26;;-1:-1:-1;;;35781:26:0;;35748:17;;;;;35771:4;;-1:-1:-1;;;;;35781:2:0;;:11;;:26;;35801:4;;35781:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35813:2;;:31;;-1:-1:-1;;;35813:31:0;;-1:-1:-1;;;;;35813:2:0;;;;:16;;:31;;35838:4;;35813:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35850:2;;:30;;-1:-1:-1;;;35850:30:0;;-1:-1:-1;;;;;35850:2:0;;;;:15;;:30;;35874:4;;35850:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35707:178;;;;;;;;;;;;;;;;;;;;;35005:885;;;;;;;;:::o;17864:18::-;;;-1:-1:-1;;;;;17864:18:0;;:::o;39677:50::-;;;;;;;;;;;;;;;:::o;16555:329::-;15772:3;;-1:-1:-1;;;;;15772:3:0;15760:10;:15;15752:80;;;;-1:-1:-1;;;15752:80:0;;;;;;;:::i;:::-;16683:3;16670:7:::1;16678:1;16670:10;:16:::0;16691:8:::1;:13:::0;;-1:-1:-1;;;;;;16691:13:0::1;-1:-1:-1::0;;;;;16691:13:0;::::1;;::::0;;16746:3:::1;16742:7:::0;::::1;16734:28;;;;-1:-1:-1::0;;;16734:28:0::1;;;;;;;:::i;:::-;16763:10:::0;:16;;;16796:3:::1;16792:7:::0;::::1;16784:28;;;;-1:-1:-1::0;;;16784:28:0::1;;;;;;;:::i;:::-;16813:10:::0;:16;;;16846:3:::1;16842:7:::0;::::1;16834:28;;;;-1:-1:-1::0;;;16834:28:0::1;;;;;;;:::i;:::-;16863:10:::0;:16;-1:-1:-1;;;;16555:329:0:o;24322:241::-;16928:2;;;;:7;16920:22;;;;-1:-1:-1;;;16920:22:0;;;;;;;:::i;:::-;16952:1;16947:6;;-1:-1:-1;;16947:6:0;;;;;:2;24364:16;:20;24361:72:::1;;24394:21;24404:10;24394:9;:21::i;:::-;24386:45;;;;-1:-1:-1::0;;;24386:45:0::1;;;;;;;:::i;:::-;24437:9;:7;:9::i;:::-;24502:10:::0;;24466:4:::1;:7:::0;;24471:1:::1;::::0;24466:7:::1;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24459:40:::1;::::0;-1:-1:-1;;;24459:40:0;;-1:-1:-1;;;;;24466:7:0;;::::1;::::0;24459:25:::1;::::0;:40:::1;::::0;24493:4:::1;::::0;24459:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;24451:86;;;;-1:-1:-1::0;;;24451:86:0::1;;;;;;;:::i;:::-;24542:16;24547:10;24542:4;:16::i;:::-;16964:2:::0;:6;;-1:-1:-1;;16964:6:0;;;24322:241::o;33583:516::-;16928:2;;;;:7;16920:22;;;;-1:-1:-1;;;16920:22:0;;;;;;;:::i;:::-;16952:1;16947:6;;-1:-1:-1;;16947:6:0;;;;;33649:9:::1;::::0;-1:-1:-1;;;33649:9:0;::::1;16947:6:::0;33649:9:::1;33641:66;;;;-1:-1:-1::0;;;33641:66:0::1;;;;;;;:::i;:::-;33730:10;33720:21;::::0;;;:9:::1;:21;::::0;;;;;:29;-1:-1:-1;33720:29:0::1;33712:61;;;;-1:-1:-1::0;;;33712:61:0::1;;;;;;;:::i;:::-;33791:11;::::0;;33848:10:::1;33778;33838:21:::0;;;:9:::1;:21;::::0;;;;;:29;;;;::::1;::::0;;33872:19;;;;::::1;::::0;;;33901:38;;33791:11;;33778:10;-1:-1:-1;;;;;;;;;;;33901:38:0;::::1;::::0;33863:4;;33901:38:::1;:::i;:::-;;;;;;;;33958:4;::::0;;:29:::1;::::0;-1:-1:-1;;;33958:29:0;;33944:11:::1;::::0;-1:-1:-1;;;;;33958:4:0;;::::1;::::0;:14:::1;::::0;:29:::1;::::0;33981:4:::1;::::0;33958:29:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33944:43:::0;-1:-1:-1;33992:9:0::1;34004:25;34026:2:::0;34006:13:::1;:4:::0;33944:43;34006:8:::1;:13::i;34004:25::-;34045:4;::::0;;:27:::1;::::0;-1:-1:-1;;;34045:27:0;;33992:37;;-1:-1:-1;;;;;;34045:4:0::1;::::0;:13:::1;::::0;:27:::1;::::0;34059:10:::1;::::0;33992:37;;34045:27:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34037:57;;;;-1:-1:-1::0;;;34037:57:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;16964:2:0;:6;;-1:-1:-1;;16964:6:0;;;-1:-1:-1;;33583:516:0:o;17886:23::-;;;-1:-1:-1;;;;;17886:23:0;;:::o;36035:466::-;36149:10;;36138;;36192;;36181;;36072:7;;;;;;;;;;36138:21;;;;36181;;;;36072:7;;36138:21;36226:24;;;36138:21;36225:36;;;;;36223:52;;;;;36452:10;;36463;;36474;;36485;;36223:52;;;;;36452:10;;-1:-1:-1;36463:10:0;-1:-1:-1;36474:10:0;;-1:-1:-1;36485:10:0;;-1:-1:-1;36035:466:0;-1:-1:-1;;;;36035:466:0:o;15929:122::-;15772:3;;-1:-1:-1;;;;;15772:3:0;15760:10;:15;15752:80;;;;-1:-1:-1;;;15752:80:0;;;;;;;:::i;:::-;16010:35:::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;16010:35:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;15995:51:0;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;15995:51:0::1;::::0;;;::::1;;::::0;;;;;;;;;15929:122::o;40074:361::-;40192:22;40250:8;:15;40237:4;:11;:28;:56;;;;-1:-1:-1;40267:11:0;;:26;;40237:56;40229:81;;;;-1:-1:-1;;;40229:81:0;;;;;;;:::i;:::-;40322:6;40318:110;40333:4;:11;40331:1;:13;40318:110;;;40378:41;40389:4;40394:1;40389:7;;;;;;;;;;;;;;40397:8;40406:1;40397:11;;;;;;;;;;;;;;40409:6;;40416:1;40409:9;;;;;;;;;;;;;;;;;;:::i;40378:41::-;40365:7;40373:1;40365:10;;;;;;;;;;;;;;;;;:54;40345:3;;40318:110;;;;40074:361;;;;;;:::o;20782:43::-;;;;;;;;;;;;;:::o;34110:830::-;15772:3;;34184:12;;-1:-1:-1;;;;;15772:3:0;15760:10;:15;15752:80;;;;-1:-1:-1;;;15752:80:0;;;;;;;:::i;:::-;34694:4:::1;::::0;-1:-1:-1;;;;;34670:29:0;;::::1;34694:4:::0;::::1;34670:29;;34662:70;;;;-1:-1:-1::0;;;34662:70:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34740:24:0;::::1;34737:198;;34781:3;::::0;:26:::1;::::0;-1:-1:-1;;;;;34781:3:0;;::::1;::::0;34796:6;;34781:26:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34767:40;;;;;34808:14;;34737:198;-1:-1:-1::0;;;;;34836:24:0;::::1;::::0;34833:102:::1;;34900:3;::::0;34870:42:::1;::::0;-1:-1:-1;;;34870:42:0;;-1:-1:-1;;;;;34870:29:0;;::::1;::::0;::::1;::::0;:42:::1;::::0;34900:3;;::::1;::::0;34905:6;;34870:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34863:49;;;;34833:102;-1:-1:-1::0;34930:5:0::1;34923:12;;38381:1019:::0;38473:6;38486:21;38510:10;38521:11;38510:23;;;;;;;;;;;;;;;;;;38486:47;;38538:19;38560:10;38571:9;38560:21;;;;;;;;;;;;;;;;;;38538:43;;38586:15;38604:4;38586:22;;38629:5;:11;;;38617:3;:9;;;:23;38613:98;;;-1:-1:-1;38661:5:0;38613:98;38717:32;38758:10;38754:146;;;38815:5;:11;;;38803:3;:9;;;:23;38776:50;;38754:146;;;38885:3;:9;;;38871:5;:11;;;:23;38844:50;;38754:146;38906:32;38977:5;:11;;;38942:24;38969:4;38942:31;38941:47;;;;;39034:15;;39018:13;;38941:47;;;;;-1:-1:-1;39018:31:0;;38993:22;39018:31;39126:8;39098:37;;39018:31;39097:56;;;;;39056:97;;39274:10;39270:73;;;39306:30;-1:-1:-1;39292:45:0;;-1:-1:-1;;;;;;39292:45:0;39270:73;39356:39;;;38381:1019;-1:-1:-1;;;;;;;;;38381:1019:0:o;16222:328::-;16272:4;16288:16;;16285:39;;-1:-1:-1;16316:5:0;16309:13;;16285:39;16392:6;16388:140;16401:9;:16;16399:18;;16388:140;;;16472:9;16482:1;16472:12;;;;;;;;;;;;;;;;;;:19;;;16438:9;16448:1;16438:12;;;;;;;;;;;;;;;;;;;;;:18;16431:39;;-1:-1:-1;;;16431:39:0;;-1:-1:-1;;;;;16438:18:0;;;;16431:36;;:39;;16468:1;;16431:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;16428:95;;16511:4;16504:12;;;;;16428:95;16418:3;;16388:140;;;;16539:5;16532:13;;16222:328;;;;:::o;17559:101::-;17597:13;17653:2;17626:30;;;;;;;;:::i;21160:114::-;21217:4;21235:34;21248:10;21260:3;21265;21235:12;:34::i;:::-;21228:41;21160:114;-1:-1:-1;;;21160:114:0:o;17341:16::-;;;;;;;;;;;;;;-1:-1:-1;;17341:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21692:1666::-;16928:2;;;;:7;16920:22;;;;-1:-1:-1;;;16920:22:0;;;;;;;:::i;:::-;16952:1;16947:6;;-1:-1:-1;;16947:6:0;;;;;21749:9:::1;::::0;-1:-1:-1;;;21749:9:0;::::1;16947:6:::0;21749:9:::1;21748:10;21740:61;;;;-1:-1:-1::0;;;21740:61:0::1;;;;;;;:::i;:::-;21984:9;:7;:9::i;:::-;22044:10:::0;;22008:4:::1;:7:::0;;22013:1:::1;::::0;22008:7:::1;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22001:40:::1;::::0;-1:-1:-1;;;22001:40:0;;-1:-1:-1;;;;;22008:7:0;;::::1;::::0;22001:25:::1;::::0;:40:::1;::::0;22035:4:::1;::::0;22001:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;21998:80;;;22057:19;22070:4;22057;:19::i;:::-;22158:4;::::0;;:29:::1;::::0;-1:-1:-1;;;22158:29:0;;22144:11:::1;::::0;-1:-1:-1;;;;;22158:4:0;;::::1;::::0;:14:::1;::::0;:29:::1;::::0;22181:4:::1;::::0;22158:29:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22207:2;::::0;:26:::1;::::0;-1:-1:-1;;;22207:26:0;;22144:43;;-1:-1:-1;22192:12:0::1;::::0;-1:-1:-1;;;;;22207:2:0;;::::1;::::0;:11:::1;::::0;:26:::1;::::0;22227:4:::1;::::0;22207:26:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;::::0;22253:4:::1;::::0;;:48:::1;::::0;-1:-1:-1;;;22253:48:0;;22207:33;;-1:-1:-1;;;;;;22253:4:0::1;::::0;:17:::1;::::0;:48:::1;::::0;22271:10:::1;::::0;22290:4:::1;::::0;22296;;22253:48:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22245:78;;;;-1:-1:-1::0;;;22245:78:0::1;;;;;;;:::i;:::-;22342:4;::::0;;:29:::1;::::0;-1:-1:-1;;;22342:29:0;;22328:11:::1;::::0;-1:-1:-1;;;;;22342:4:0;;::::1;::::0;:14:::1;::::0;:29:::1;::::0;22365:4:::1;::::0;22342:29:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22328:43;;22376:9;22388:28;22396:3;22388:28;;;;;;;;;;;;;-1:-1:-1::0;;;22388:28:0::1;;::::0;:3:::1;:7;;:28;;;;;:::i;:::-;22421:2;::::0;:13:::1;::::0;-1:-1:-1;;;22421:13:0;;22376:40;;-1:-1:-1;;;;;;22421:2:0::1;::::0;:10:::1;::::0;:13:::1;::::0;22376:40;;22421:13:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22508:2:0::1;::::0;:26:::1;::::0;-1:-1:-1;;;22508:26:0;;22493:12:::1;::::0;-1:-1:-1;;;;;;22508:2:0;;::::1;::::0;-1:-1:-1;22508:11:0::1;::::0;:26:::1;::::0;22528:4:::1;::::0;22508:26:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;22493:48;;22546:9;22558:28;22567:4;22558:28;;;;;;;;;;;;;-1:-1:-1::0;;;22558:28:0::1;;::::0;:4:::1;:8;;:28;;;;;:::i;:::-;22546:40;;22633:13;22670:1:::0;22656:11:::1;;:15;22655:247;;-1:-1:-1::0;22901:1:0;;22655:247:::1;;;22854:32;22881:4;22856:18;22862:11;;22856:1;:5;;:18;;;;:::i;22854:32::-;22846:40;;;22655:247;-1:-1:-1::0;22907:11:0::1;:20:::0;;;::::1;::::0;;22986:10;;-1:-1:-1;;22986:12:0;22983:85:::1;;23007:21;23017:10;23007:9;:21::i;:::-;:59;;23034:32;23062:3;23035:21;23045:7;23053:1;23045:10;;::::0;23035:5;;:9:::1;:21::i;23034:32::-;23007:59;;;23030:1;23007:59;23000:66;;22983:85;23088:6:::0;;23085:113:::1;;23128:8;::::0;;-1:-1:-1;;;;;23128:8:0;;::::1;23118:19;::::0;;;:9:::1;:19;::::0;;;;;:27;;;::::1;::::0;;23177:8;;23156:36;;23177:8;;;::::1;::::0;-1:-1:-1;;;;;;;;;;;23156:36:0;::::1;::::0;23141:4;;23156:36:::1;:::i;:::-;;;;;;;;23085:113;23227:15;:5:::0;23237:4;23227:9:::1;:15::i;:::-;23212:10;23202:21;::::0;;;:9:::1;:21;::::0;;;;:40;;;;::::1;::::0;;;23252:42:::1;23272:4:::0;23278:15:::1;:5:::0;23288:4;23278:9:::1;:15::i;:::-;23252:42;;;;;;;:::i;:::-;;;;;;;;23325:10;23321:1;-1:-1:-1::0;;;;;;;;;;;23337:15:0::1;:5:::0;23347:4;23337:9:::1;:15::i;:::-;23304:49;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;16964:2:0;:6;;-1:-1:-1;;16964:6:0;;;-1:-1:-1;;;;;;;21692:1666:0:o;18771:1331::-;;;;;;;;;;;;;;-1:-1:-1;;;;;18771:1331:0;;-1:-1:-1;18771:1331:0;:::o;17831:29::-;;;-1:-1:-1;;;17831:29:0;;;;;:::o;17806:21::-;;;-1:-1:-1;;;;;17806:21:0;;:::o;20899:91::-;20945:4;20963:22;20971:3;-1:-1:-1;;20963:7:0;:22::i;20829:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;36637:521::-;36703:4;;36900:11;;36928:9;;36895:43;;-1:-1:-1;;;36895:43:0;;36672:7;;-1:-1:-1;;;;;36703:4:0;;;;36672:7;;36900:11;;;36895:32;;:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36895:43:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;36961:11:0;;36954:33;;;-1:-1:-1;;;36954:33:0;;;;36867:71;;-1:-1:-1;36943:8:0;;-1:-1:-1;;;;;;36961:11:0;;;;36954:31;;:33;;;;;;;;;;;;;;;36961:11;36954:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36943:44;-1:-1:-1;37144:4:0;-1:-1:-1;;;;;37111:15:0;;;37127:7;37135:2;37127:11;;37111:28;;-1:-1:-1;;;;;;37111:28:0;;;;;;;;;-1:-1:-1;;;;;37127:11:0;;37111:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37103:3;37095:5;:3;:5::i;:::-;37087:2;37090:1;37087:5;;;;;;;;;;;;;;:13;:19;;;;;;37085:54;37083:65;;;;;;37068:4;-1:-1:-1;;;;;37035:15:0;;;37051:7;37059:2;37051:11;;37035:28;;-1:-1:-1;;;;;;37035:28:0;;;;;;;;;-1:-1:-1;;;;;37051:11:0;;37035:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37027:3;37019:5;:3;:5::i;:::-;37011:2;37014:1;37011:5;;;;;;;;;;;;;;:13;:19;;;;;;37009:54;37007:65;;;;;;:141;36994:159;;;;;36637:521;:::o;17781:21::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17781:21:0;;-1:-1:-1;17781:21:0;:::o;16056:109::-;15772:3;;-1:-1:-1;;;;;15772:3:0;15760:10;:15;15752:80;;;;-1:-1:-1;;;15752:80:0;;;;;;;:::i;:::-;16115:9:::1;16125:16:::0;;-1:-1:-1;;16125:18:0;;;16115:29;::::1;;;;;;;;;;;;;;;16102:9;16112:1;16102:12;;;;;;;;;::::0;;;::::1;::::0;;:42;;:12:::1;::::0;;::::1;;:42:::0;;-1:-1:-1;;;;;;16102:42:0::1;-1:-1:-1::0;;;;;16102:42:0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;16145:15;;;::::1;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;16145:15:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;16145:15:0::1;::::0;;::::1;;::::0;;;-1:-1:-1;16056:109:0:o;37525:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37525:27:0;:::o;37873:390::-;37967:10;:17;37946:6;;37988:1;-1:-1:-1;37967:22:0;37959:31;;;;;;38069:10;:17;37997:20;;;;-1:-1:-1;;38069:21:0;38052:161;38096:1;38092;:5;:30;;;;;38120:2;38101:16;:21;38092:30;38052:161;;;38152:31;38178:1;38174;:5;38181:1;38152:21;:31::i;:::-;38135:48;;;;38189:18;;;;;-1:-1:-1;;38124:3:0;38052:161;;;;38242:16;38226:13;:32;;;;;;;37873:390;-1:-1:-1;;;;37873:390:0:o;24639:8485::-;24691:9;;-1:-1:-1;;;24691:9:0;;;;24690:10;24682:71;;;;-1:-1:-1;;;24682:71:0;;;;;;;:::i;:::-;24866:10;;24861:26;;;-1:-1:-1;;;24861:26:0;;;;-1:-1:-1;;;;;24866:10:0;;;;24861:24;;:26;;;;;24866:10;;24861:26;;;;;;;;24866:10;;24861:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25013:23;:268;;;;;;;;25053:7;25061:1;25053:10;;;;;;;;;25046:43;;-1:-1:-1;;;25046:43:0;;-1:-1:-1;;;;;25053:10:0;;;;25046:28;;:43;;25083:4;;25046:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25013:268;;25131:10;;25154:11;;25124:43;;-1:-1:-1;;;25124:43:0;;25013:268;;;;;-1:-1:-1;;;;;25131:10:0;;;;25124:28;;:43;;25154:11;;;25124:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25013:268;;25209:10;;25232:11;;25202:43;;-1:-1:-1;;;25202:43:0;;25013:268;;;;;-1:-1:-1;;;;;25209:10:0;;;;25202:28;;:43;;25232:11;;;25202:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25013:268;;;-1:-1:-1;25289:22:0;25328:7;25336:1;25328:10;;25317:8;;-1:-1:-1;;;;;25328:10:0;;;;25317:5;;25328:10;;25317:8;;;;-1:-1:-1;;;;;25317:21:0;;;:8;;;;;;;;;:21;25355:10;;25344:8;;25355:10;;;25344:8;;25363:1;;25344:8;;;;;;-1:-1:-1;;;;;25344:21:0;;;:8;;;;;;;;;;:21;;;;25379:10;;25504:11;;;;25490;;;;25458;;25379:10;;;;;25371:78;;25490:25;;;25458;25490;25456:61;;;;;25539:1;25547:5;25567:4;25579:15;25371:229;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25616:7;25624:1;25616:10;;;;;;;;;25741:11;;;;;25727;;;25695;;-1:-1:-1;;;;;25616:10:0;;;;25608:78;;25727:25;;;;25695;25727;25693:61;;;;;25776:1;25784:5;25804:4;25816:15;25608:229;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24639:8485;;25962:22;:224;;;;;;;;26001:7;26009:1;26001:10;;;;;;;;;25994:43;;-1:-1:-1;;;25994:43:0;;-1:-1:-1;;;;;26001:10:0;;;;25994:28;;:43;;26031:4;;25994:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25962:224;;;;26080:7;26088:1;26080:10;;-1:-1:-1;;;;;26080:10:0;26073:28;26103:7;26111:2;26103:11;;26073:43;;-1:-1:-1;;;;;;26073:43:0;;;;;;;;;-1:-1:-1;;;;;26103:11:0;;26073:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25962:224;;26144:1;25962:224;;;;;26226:11;;26253:6;:9;26222:41;;-1:-1:-1;;;26222:41:0;;25962:224;;-1:-1:-1;;;;;;;;26226:11:0;;;;26222:30;;:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26222:41:0;;;;;;;;;;;;:::i;:::-;26194:69;;;;26282:4;26287:1;26282:7;;;;;;;;;;;;;;26269;26277:1;26269:10;;;;;;;;;;:20;26342:85;;;26297:28;26342:85;;;;;;;26369:7;26377:1;26369:10;;-1:-1:-1;;;;;26369:10:0;26342:85;;;;26390:7;26398:1;26390:10;;-1:-1:-1;;;;;26390:10:0;26342:85;;26390:10;26342:85;;;;;;;26331:8;;:5;;26390:10;26331:8;;;;;;;;;;;;;;:96;;;;26441:10;;26534;;;;26521;;;;26491;;-1:-1:-1;;;;;26441:10:0;;;;26433:49;;26521:23;;;;26491;26521;26489:57;;;;;26568:1;26576:5;26596:4;26608:15;26433:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26433:196:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;26669:179:0;;;;;;;;;26723:4;26669:179;;;-1:-1:-1;26669:179:0;;;;;;;;;;;;;;;;;;;;;26882:266;;;;;;;26913:6;:9;26882:266;;;;;;;;26979:10;;-1:-1:-1;;;;;26979:10:0;;;26882:266;;;;27008:10;;;26882:266;;;;;;;27082:10;;;;27069;;;;27039;;26669:179;;-1:-1:-1;;26882:266:0;;;;;27069:23;;;;27039;27069;27037:57;;;;;26882:266;;;;27139:1;27128:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;27128:13:0;;;;;;26882:266;;27158:11;;27154:51;;-1:-1:-1;;;27154:51:0;;26854:294;;-1:-1:-1;;;;;;27158:11:0;;27154:21;;:51;;26854:294;;27181:3;;27158:11;;27189:15;;27154:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24639:8485;;;;;27267:18;27294:7;27302:2;27294:11;;;;;;;;;27321:9;;27290:41;;-1:-1:-1;;;27290:41:0;;-1:-1:-1;;;;;27294:11:0;;;;27290:30;;:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27290:41:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;27353:10:0;;27346:43;;-1:-1:-1;;;27346:43:0;;27265:66;;-1:-1:-1;27337:6:0;;-1:-1:-1;;;;;;27353:10:0;;27346:28;;:43;;27383:4;;27361:1;27346:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27337:52;;27467:1;27469;27467:4;;;;;;;;;;;;;;27460:1;27462;27460:4;;;;;;;;;;;;;;:11;27457:1680;;;27495:1;27497;27495:4;;;;;;;;;;;;;;27490:1;27492;27490:4;;;;;;;;;;;;;;:9;27486:1;:13;27482:1649;;;27538:15;;;27551:1;27538:15;;;;;;;;27518:17;;27538:15;;;;;;;;-1:-1:-1;;27581:10:0;;27567:4;;;;-1:-1:-1;;;;;;27581:10:0;;27567:4;;-1:-1:-1;27581:10:0;;27567:4;;;;-1:-1:-1;;;;;27567:25:0;;;:4;;;;;;;;;:25;27620:10;;27606:4;;27620:10;;;27606:4;;27620:10;;27606:4;;;;;;-1:-1:-1;;;;;27606:25:0;;;;:4;;;;;;;;;;:25;27660:16;;;27674:1;27660:16;;;;;;;;27639:18;;27660:16;;27674:1;;27660:16;;;;;;;;;-1:-1:-1;27660:16:0;27639:37;;27697:1;27690;27692;27690:4;;;;;;;;;;;;;:8;;;;;27719:1;27712;27714;27712:4;;;;;;;;;;;;;:8;;;;;27730:14;27758:1;27761;27764;27747:19;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;27747:19:0;;;27914:211;;;;;;;;27747:19;27914:211;;;;;;;;;;;-1:-1:-1;27914:211:0;;;;28139:11;;28162:9;;28135:70;;-1:-1:-1;;;28135:70:0;;27747:19;;-1:-1:-1;;;;;;28139:11:0;;28135:25;;:70;;28162:9;28181:4;;;;27747:19;;28135:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27482:1649;;;;;;;28240:1;28242;28240:4;;;;;;;;;;;;;;28235:1;28237;28235:4;;;;;;;;;;;;;;:9;28231:1;:13;28226:905;;;28264:10;;28300:4;;-1:-1:-1;;;;;28264:10:0;;;;28257:27;;28310:1;;28300:4;;28264:10;;28300:4;;;;;;;;;;28293:1;28295;28293:4;;;;;;;;;;;;;;:11;28288:1;:17;28286:25;;;;;;28257:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28349:15:0;;;28362:1;28349:15;;;;;;;;28329:17;;-1:-1:-1;28349:15:0;;-1:-1:-1;28362:1:0;28349:15;;;;;;;;-1:-1:-1;;28392:10:0;;28378:4;;;;-1:-1:-1;;;;;;28392:10:0;;28378:4;;-1:-1:-1;28392:10:0;;28378:4;;;;-1:-1:-1;;;;;28378:25:0;;;:4;;;;;;;;;:25;28431:10;;28417:4;;28431:10;;;28417:4;;28431:10;;28417:4;;;;;;-1:-1:-1;;;;;28417:25:0;;;;:4;;;;;;;;;;:25;28471:16;;;28485:1;28471:16;;;;;;;;28450:18;;28471:16;;28485:1;;28471:16;;;;;;;-1:-1:-1;;28516:10:0;;28508:45;;-1:-1:-1;;;28508:45:0;;28450:37;;-1:-1:-1;;;;;;28516:10:0;;28508:30;;-1:-1:-1;28508:45:0;;28547:4;;28524:1;28508:45;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28501:1;28503;28501:4;;;;;;;;;;;;;;;;;:52;28582:10;;28574:45;;-1:-1:-1;;;28574:45:0;;-1:-1:-1;;;;;28582:10:0;;;;28574:30;;:45;;28613:4;;28574:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28567:1;28569;28567:4;;;;;;;;;;;;;:52;;;;;28629:14;28657:1;28660;28663;28646:19;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;28646:19:0;;;28813:211;;;;;;;;28646:19;28813:211;;;;;;;;;;;-1:-1:-1;28813:211:0;;;;29038:11;;29061:9;;29034:70;;-1:-1:-1;;;29034:70:0;;28646:19;;-1:-1:-1;;;;;;29038:11:0;;29034:25;;:70;;29061:9;29080:4;;;;28646:19;;29034:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28226:905;;;;;29221:1;29223;29221:4;;;;;;;;;;;;;;29216:1;29218;29216:4;;;;;;;;;;;;;;:9;29213:1753;;;29248:1;29250;29248:4;;;;;;;;;;;;;;29243:1;29245;29243:4;;;;;;;;;;;;;;:9;29239:1;:13;29236:1724;;;29271:10;;29264:32;;-1:-1:-1;;;29264:32:0;;-1:-1:-1;;;;;29271:10:0;;;;29264:27;;:32;;29293:1;;29264:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29332:15:0;;;29345:1;29332:15;;;;;;;;29312:17;;-1:-1:-1;29332:15:0;;-1:-1:-1;29345:1:0;29332:15;;;;;;;;-1:-1:-1;;29375:10:0;;29361:4;;;;-1:-1:-1;;;;;;29375:10:0;;29361:4;;-1:-1:-1;29375:10:0;;29361:4;;;;-1:-1:-1;;;;;29361:25:0;;;:4;;;;;;;;;:25;29414:10;;29400:4;;29414:10;;;29400:4;;29414:10;;29400:4;;;;;;-1:-1:-1;;;;;29400:25:0;;;;:4;;;;;;;;;;:25;29454:16;;;29468:1;29454:16;;;;;;;;29433:18;;29454:16;;29468:1;;29454:16;;;;;;;;;-1:-1:-1;29454:16:0;29433:37;;29491:1;29484;29486;29484:4;;;;;;;;;;;;;;;;;:8;29521:10;;29513:45;;-1:-1:-1;;;29513:45:0;;-1:-1:-1;;;;;29521:10:0;;;;29513:30;;:45;;29552:4;;29513:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29506:1;29508;29506:4;;;;;;;;;;;;;:52;;;;;29568:14;29596:1;29599;29602;29585:19;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;29585:19:0;;;29752:211;;;;;;;;29585:19;29752:211;;;;;;;;;;;-1:-1:-1;29752:211:0;;;;29977:11;;30000:9;;29973:70;;-1:-1:-1;;;29973:70:0;;29585:19;;-1:-1:-1;;;;;;29977:11:0;;29973:25;;:70;;30000:9;30019:4;;;;29585:19;;29973:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29236:1724;;;;;;;30076:1;30078;30076:4;;;;;;;;;;;;;;30071:1;30073;30071:4;;;;;;;;;;;;;;:9;30067:1;:13;30064:896;;;30099:10;;30131:4;;-1:-1:-1;;;;;30099:10:0;;;;30092:27;;30139:1;;30131:4;;30099:10;;30131:4;;;;;;;;;;;;30126:1;30128;30126:4;;;;;;;;;;;;;;30122:1;:8;:13;30121:19;;;;;;30092:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30178:15:0;;;30191:1;30178:15;;;;;;;;30158:17;;-1:-1:-1;30178:15:0;;-1:-1:-1;30191:1:0;30178:15;;;;;;;;-1:-1:-1;;30221:10:0;;30207:4;;;;-1:-1:-1;;;;;;30221:10:0;;30207:4;;-1:-1:-1;30221:10:0;;30207:4;;;;-1:-1:-1;;;;;30207:25:0;;;:4;;;;;;;;;:25;30260:10;;30246:4;;30260:10;;;30246:4;;30260:10;;30246:4;;;;;;-1:-1:-1;;;;;30246:25:0;;;;:4;;;;;;;;;;:25;30300:16;;;30314:1;30300:16;;;;;;;;30279:18;;30300:16;;30314:1;;30300:16;;;;;;;-1:-1:-1;;30345:10:0;;30337:45;;-1:-1:-1;;;30337:45:0;;30279:37;;-1:-1:-1;;;;;;30345:10:0;;30337:30;;-1:-1:-1;30337:45:0;;30376:4;;30353:1;30337:45;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30330:1;30332;30330:4;;;;;;;;;;;;;;;;;:52;30411:10;;30403:45;;-1:-1:-1;;;30403:45:0;;-1:-1:-1;;;;;30411:10:0;;;;30403:30;;:45;;30442:4;;30403:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30396:1;30398;30396:4;;;;;;;;;;;;;:52;;;;;30458:14;30486:1;30489;30492;30475:19;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;30475:19:0;;;30642:211;;;;;;;;30475:19;30642:211;;;;;;;;;;;-1:-1:-1;30642:211:0;;;;30867:11;;30890:9;;30863:70;;-1:-1:-1;;;30863:70:0;;30475:19;;-1:-1:-1;;;;;;30867:11:0;;30863:25;;:70;;30890:9;30909:4;;;;30475:19;;30863:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30064:896;;;;;-1:-1:-1;;30997:4:0;;;:29;;-1:-1:-1;;;30997:29:0;;30985:9;;-1:-1:-1;;;;;30997:4:0;;;;:14;;:29;;31020:4;;30997:29;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31046:2;;:26;;-1:-1:-1;;;31046:26:0;;30985:41;;-1:-1:-1;31031:12:0;;-1:-1:-1;;;;;31046:2:0;;;;:11;;:26;;31066:4;;31046:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;31084:2;;:13;;-1:-1:-1;;;31084:13:0;;31046:33;;-1:-1:-1;;;;;;31084:2:0;;:10;;:13;;31095:1;;31084:13;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31117:2:0;;:26;;-1:-1:-1;;;31117:26:0;;31102:12;;-1:-1:-1;;;;;;31117:2:0;;;;-1:-1:-1;31117:11:0;;:26;;31137:4;;31117:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;31102:48;;31155:9;31167:28;31176:4;31167:28;;;;;;;;;;;;;-1:-1:-1;;;31167:28:0;;;:4;:8;;:28;;;;;:::i;:::-;31155:40;-1:-1:-1;31241:13:0;31368:7;31376:1;31368:10;;31365:71;;31401:15;-1:-1:-1;;;;;31383:34:0;:10;:34;31429:5;:3;:5::i;:::-;31418:10;:16;31365:71;31474:10;;;31463;:21;31503:15;-1:-1:-1;;;;;31485:34:0;;;31535:10;;31524;:21;31557:5;:3;:5::i;:::-;31546:10;:16;31568:11;;31567:247;;-1:-1:-1;31813:1:0;;31567:247;;;31766:32;31793:4;31768:18;31774:11;;31768:1;:5;;:18;;;;:::i;31766:32::-;31758:40;;;31567:247;-1:-1:-1;31882:32:0;31910:3;31883:21;31893:7;31901:1;31893:10;;31883:5;;:9;:21::i;31882:32::-;31869:8;;-1:-1:-1;;;;;31869:8:0;;;31859:19;;;;:9;:19;;;;;:55;;;;;;;;31978:20;;31993:4;31978:20;:37;;32012:3;31978:37;;;32001:8;;-1:-1:-1;;;;;32001:8:0;31978:37;31961:54;-1:-1:-1;32082:32:0;32110:3;32083:21;32093:7;32101:1;32093:10;;32082:32;-1:-1:-1;;;;;32061:17:0;;;;;;:9;:17;;;;;:53;;;;;;;32134:74;32174:32;32202:3;32175:21;32185:7;32193:1;32185:10;;32175:5;;:9;:21::i;32174:32::-;32135;32163:3;32136:21;32146:7;32154:1;32146:10;;32136:5;;:9;:21::i;32135:32::-;32134:38;;:74::i;:::-;32119:11;:89;;;;;;;32239:8;;-1:-1:-1;;;;;32239:8:0;32119:11;-1:-1:-1;;;;;;;;;;;32249:32:0;32277:3;32250:21;32260:7;32268:1;32260:10;;;32250:5;;:9;:21::i;32249:32::-;32218:64;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;32292:62:0;;32309:1;-1:-1:-1;;;;;;;;;;;32321:32:0;32349:3;32322:21;32332:7;32340:1;32332:10;;32321:32;32292:62;;;;;;:::i;:::-;;;;;;;;32363:10;32376:5;:3;:5::i;:::-;32363:18;;32386:10;32399:5;:3;:5::i;:::-;32421:11;;32460:10;32471:17;;32386:18;;-1:-1:-1;32421:11:0;;-1:-1:-1;;32471:21:0;;;32460:33;;;;;;;;;;;;;;;;:43;;;32506:2;32460:48;32441:15;:67;32437:382;;32525:10;32559:233;;;;;;;;32601:15;32559:233;;;;32734:4;32720:5;32726:4;32720:10;32719:19;;;;;;32559:233;;32525:282;;;;;;;;-1:-1:-1;32525:282:0;;;;;;;;;;;;;;;;;;;;;;;;;;32437:382;-1:-1:-1;;;;;32870:247:0;;;32907:5;32918:32;32946:3;32919:21;32929:7;32937:1;32929:10;;32919:5;;:9;:21::i;32918:32::-;32973;33001:3;32974:21;32984:7;32992:1;32984:10;;32974:5;;:9;:21::i;32973:32::-;33030:15;33072:5;33083:4;33108;33094:5;33100:4;33094:10;33093:19;;;;;;32870:247;;;;;;;;;;;;:::i;:::-;;;;;;;;24639:8485;;;;;;;;;;:::o;11753:407::-;11811:7;12032:6;12028:32;;-1:-1:-1;12053:1:0;12046:8;;12028:32;12076:5;;;12080:1;12076;:5;:1;12094:5;;;;;:10;12086:56;;;;-1:-1:-1;;;12086:56:0;;;;;;;:::i;12592:123::-;12650:7;12671:39;12675:1;12678;12671:39;;;;;;;;;;;;;;;;;:3;:39::i;11363:169::-;11449:7;11479:12;11471:6;;;;11463:29;;;;-1:-1:-1;;;11463:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11509:5:0;;;11363:169::o;10971:127::-;11029:7;11050:43;11054:1;11057;11050:43;;;;;;;;;;;;;;;;;:3;:43::i;10568:158::-;10626:7;10652:5;;;10670:6;;;;10662:46;;;;-1:-1:-1;;;10662:46:0;;;;;;;:::i;13167:310::-;13253:7;13343:12;13336:5;13328:28;;;;-1:-1:-1;;;13328:28:0;;;;;;;;:::i;:::-;;13361:9;13377:1;13373;:5;;;;;;;13167:310;-1:-1:-1;;;;;13167:310:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:782:1:-;;127:3;120:4;112:6;108:17;104:27;94:2;;149:5;142;135:20;94:2;189:6;176:20;215:4;239:65;254:49;300:2;254:49;:::i;:::-;239:65;:::i;:::-;338:15;;;369:12;;;;401:15;;;447:11;;;435:24;;431:33;;428:42;-1:-1:-1;425:2:1;;;487:5;480;473:20;425:2;513:5;527:240;541:2;538:1;535:9;527:240;;;612:3;599:17;629:33;656:5;629:33;:::i;:::-;675:18;;713:12;;;;745;;;;559:1;552:9;527:240;;;-1:-1:-1;785:5:1;;84:712;-1:-1:-1;;;;;;;84:712:1:o;801:411::-;;;941:3;934:4;926:6;922:17;918:27;908:2;;966:8;956;949:26;908:2;-1:-1:-1;996:20:1;;-1:-1:-1;;;;;1028:30:1;;1025:2;;;1078:8;1068;1061:26;1025:2;1122:4;1114:6;1110:17;1098:29;;1185:3;1178:4;1170;1162:6;1158:17;1150:6;1146:30;1142:41;1139:50;1136:2;;;1202:1;1199;1192:12;1136:2;898:314;;;;;:::o;1217:702::-;;1341:3;1334:4;1326:6;1322:17;1318:27;1308:2;;1363:5;1356;1349:20;1308:2;1396:6;1390:13;1422:4;1446:65;1461:49;1507:2;1461:49;:::i;1446:65::-;1545:15;;;1576:12;;;;1608:15;;;1654:11;;;1642:24;;1638:33;;1635:42;-1:-1:-1;1632:2:1;;;1694:5;1687;1680:20;1632:2;1720:5;1734:156;1748:2;1745:1;1742:9;1734:156;;;1805:10;;1793:23;;1836:12;;;;1868;;;;1766:1;1759:9;1734:156;;1924:377;;;2041:3;2034:4;2026:6;2022:17;2018:27;2008:2;;2066:8;2056;2049:26;2008:2;-1:-1:-1;2096:20:1;;-1:-1:-1;;;;;2128:30:1;;2125:2;;;2178:8;2168;2161:26;2125:2;2222:4;2214:6;2210:17;2198:29;;2274:3;2267:4;2258:6;2250;2246:19;2242:30;2239:39;2236:2;;;2291:1;2288;2281:12;2306:259;;2418:2;2406:9;2397:7;2393:23;2389:32;2386:2;;;2439:6;2431;2424:22;2386:2;2483:9;2470:23;2502:33;2529:5;2502:33;:::i;2570:402::-;;;2699:2;2687:9;2678:7;2674:23;2670:32;2667:2;;;2720:6;2712;2705:22;2667:2;2764:9;2751:23;2783:33;2810:5;2783:33;:::i;:::-;2835:5;-1:-1:-1;2892:2:1;2877:18;;2864:32;2905:35;2864:32;2905:35;:::i;:::-;2959:7;2949:17;;;2657:315;;;;;:::o;2977:470::-;;;;3123:2;3111:9;3102:7;3098:23;3094:32;3091:2;;;3144:6;3136;3129:22;3091:2;3188:9;3175:23;3207:33;3234:5;3207:33;:::i;:::-;3259:5;-1:-1:-1;3316:2:1;3301:18;;3288:32;3329:35;3288:32;3329:35;:::i;:::-;3081:366;;3383:7;;-1:-1:-1;;;3437:2:1;3422:18;;;;3409:32;;3081:366::o;3452:568::-;;;;3600:2;3588:9;3579:7;3575:23;3571:32;3568:2;;;3621:6;3613;3606:22;3568:2;3665:9;3652:23;3684:33;3711:5;3684:33;:::i;:::-;3736:5;-1:-1:-1;3792:2:1;3777:18;;3764:32;-1:-1:-1;;;;;3808:30:1;;3805:2;;;3856:6;3848;3841:22;3805:2;3900:60;3952:7;3943:6;3932:9;3928:22;3900:60;:::i;:::-;3558:462;;3979:8;;-1:-1:-1;3874:86:1;;-1:-1:-1;;;;3558:462:1:o;4025:327::-;;;4154:2;4142:9;4133:7;4129:23;4125:32;4122:2;;;4175:6;4167;4160:22;4122:2;4219:9;4206:23;4238:33;4265:5;4238:33;:::i;:::-;4290:5;4342:2;4327:18;;;;4314:32;;-1:-1:-1;;;4112:240:1:o;4357:636::-;;;;;4522:2;4510:9;4501:7;4497:23;4493:32;4490:2;;;4543:6;4535;4528:22;4490:2;4587:9;4574:23;4606:33;4633:5;4606:33;:::i;:::-;4658:5;-1:-1:-1;4710:2:1;4695:18;;4682:32;;-1:-1:-1;4765:2:1;4750:18;;4737:32;-1:-1:-1;;;;;4781:30:1;;4778:2;;;4829:6;4821;4814:22;4778:2;4873:60;4925:7;4916:6;4905:9;4901:22;4873:60;:::i;:::-;4480:513;;;;-1:-1:-1;4952:8:1;-1:-1:-1;;;;4480:513:1:o;4998:1287::-;;;5174:2;5162:9;5153:7;5149:23;5145:32;5142:2;;;5195:6;5187;5180:22;5142:2;5240:9;5227:23;-1:-1:-1;;;;;5310:2:1;5302:6;5299:14;5296:2;;;5331:6;5323;5316:22;5296:2;5359:67;5418:7;5409:6;5398:9;5394:22;5359:67;:::i;:::-;5349:77;;5445:2;5435:12;;5500:2;5489:9;5485:18;5472:32;5529:2;5519:8;5516:16;5513:2;;;5550:6;5542;5535:22;5513:2;5578:24;;;-1:-1:-1;5633:4:1;5625:13;;5621:27;-1:-1:-1;5611:2:1;;5667:6;5659;5652:22;5611:2;5708;5695:16;5731:65;5746:49;5792:2;5746:49;:::i;5731:65::-;5830:15;;;5861:12;;;;5893:11;;;5931;;;5923:20;;5919:29;;5916:42;-1:-1:-1;5913:2:1;;;5976:6;5968;5961:22;5913:2;6003:6;5994:15;;6018:237;6032:2;6029:1;6026:9;6018:237;;;6103:3;6090:17;6120:30;6144:5;6120:30;:::i;:::-;6163:18;;6050:1;6043:9;;;;;6201:12;;;;6233;;6018:237;;;6022:3;6274:5;6264:15;;;;;;;5132:1153;;;;;:::o;6290:1565::-;;;;;6532:2;6520:9;6511:7;6507:23;6503:32;6500:2;;;6553:6;6545;6538:22;6500:2;6598:9;6585:23;-1:-1:-1;;;;;6668:2:1;6660:6;6657:14;6654:2;;;6689:6;6681;6674:22;6654:2;6717:67;6776:7;6767:6;6756:9;6752:22;6717:67;:::i;:::-;6707:77;;6803:2;6793:12;;6858:2;6847:9;6843:18;6830:32;6887:2;6877:8;6874:16;6871:2;;;6908:6;6900;6893:22;6871:2;6936:24;;6991:4;6983:13;;6979:27;-1:-1:-1;6969:2:1;;7025:6;7017;7010:22;6969:2;7066;7053:16;7089:65;7104:49;7150:2;7104:49;:::i;7089:65::-;7188:15;;;7219:12;;;;7251:11;;;7289;;;7281:20;;7277:29;;7274:42;-1:-1:-1;7271:2:1;;;7334:6;7326;7319:22;7271:2;7361:6;7352:15;;7376:163;7390:2;7387:1;7384:9;7376:163;;;7447:17;;7435:30;;7408:1;7401:9;;;;;7485:12;;;;7517;;7376:163;;;-1:-1:-1;7558:5:1;-1:-1:-1;;;;7616:2:1;7601:18;;7588:32;;-1:-1:-1;7632:16:1;;;7629:2;;;7666:6;7658;7651:22;7629:2;;7710:85;7787:7;7776:8;7765:9;7761:24;7710:85;:::i;7860:1350::-;;;;8067:2;8055:9;8046:7;8042:23;8038:32;8035:2;;;8088:6;8080;8073:22;8035:2;8126:9;8120:16;-1:-1:-1;;;;;8196:2:1;8188:6;8185:14;8182:2;;;8217:6;8209;8202:22;8182:2;8260:6;8249:9;8245:22;8235:32;;8305:7;8298:4;8294:2;8290:13;8286:27;8276:2;;8332:6;8324;8317:22;8276:2;8366;8360:9;8388:4;8412:65;8427:49;8473:2;8427:49;:::i;8412:65::-;8511:15;;;8542:12;;;;8574:11;;;8612;;;8604:20;;8600:29;;8597:42;-1:-1:-1;8594:2:1;;;8657:6;8649;8642:22;8594:2;8684:6;8675:15;;8699:233;8713:2;8710:1;8707:9;8699:233;;;8777:3;8771:10;8794:33;8821:5;8794:33;:::i;:::-;8840:18;;8731:1;8724:9;;;;;8878:12;;;;8910;;8699:233;;;-1:-1:-1;8987:18:1;;;8981:25;8951:5;;-1:-1:-1;8981:25:1;;-1:-1:-1;;;9018:16:1;;;9015:2;;;9052:6;9044;9037:22;9015:2;;9080:80;9152:7;9141:8;9130:9;9126:24;9080:80;:::i;:::-;9070:90;;;9200:2;9189:9;9185:18;9179:25;9169:35;;8025:1185;;;;;:::o;9215:389::-;;9363:2;9351:9;9342:7;9338:23;9334:32;9331:2;;;9384:6;9376;9369:22;9331:2;9422:9;9416:16;-1:-1:-1;;;;;9447:6:1;9444:30;9441:2;;;9492:6;9484;9477:22;9441:2;9520:78;9590:7;9581:6;9570:9;9566:22;9520:78;:::i;9609:257::-;;9729:2;9717:9;9708:7;9704:23;9700:32;9697:2;;;9750:6;9742;9735:22;9697:2;9787:9;9781:16;9806:30;9830:5;9806:30;:::i;9871:189::-;;9982:2;9970:9;9961:7;9957:23;9953:32;9950:2;;;10003:6;9995;9988:22;9950:2;-1:-1:-1;10031:23:1;;9940:120;-1:-1:-1;9940:120:1:o;10065:621::-;;10212:3;10200:9;10191:7;10187:23;10183:33;10180:2;;;10234:6;10226;10219:22;10180:2;10272;10266:9;10314:3;10306:6;10302:16;10384:6;10372:10;10369:22;-1:-1:-1;;;;;10336:10:1;10333:34;10330:62;10327:2;;;10395:9;10327:2;10426:10;10422:2;10415:22;;10467:9;10461:16;10453:6;10446:32;10532:2;10521:9;10517:18;10511:25;10506:2;10498:6;10494:15;10487:50;10591:2;10580:9;10576:18;10570:25;10565:2;10557:6;10553:15;10546:50;10650:2;10639:9;10635:18;10629:25;10624:2;10616:6;10612:15;10605:50;10674:6;10664:16;;;10170:516;;;;:::o;10886:194::-;;11009:2;10997:9;10988:7;10984:23;10980:32;10977:2;;;11030:6;11022;11015:22;10977:2;-1:-1:-1;11058:16:1;;10967:113;-1:-1:-1;10967:113:1:o;11085:258::-;;;11214:2;11202:9;11193:7;11189:23;11185:32;11182:2;;;11235:6;11227;11220:22;11182:2;-1:-1:-1;;11263:23:1;;;11333:2;11318:18;;;11305:32;;-1:-1:-1;11172:171:1:o;11348:255::-;;;11488:2;11476:9;11467:7;11463:23;11459:32;11456:2;;;11509:6;11501;11494:22;11456:2;-1:-1:-1;;11537:16:1;;11593:2;11578:18;;;11572:25;11537:16;;11572:25;;-1:-1:-1;11446:157:1:o;11608:533::-;;;;;;11788:3;11776:9;11767:7;11763:23;11759:33;11756:2;;;11810:6;11802;11795:22;11756:2;11851:9;11838:23;11828:33;;11908:2;11897:9;11893:18;11880:32;11870:42;;11959:2;11948:9;11944:18;11931:32;11921:42;;12013:2;12002:9;11998:18;11985:32;12026:33;12053:5;12026:33;:::i;:::-;11746:395;;;;-1:-1:-1;11746:395:1;;12130:3;12115:19;12102:33;;11746:395;-1:-1:-1;;11746:395:1:o;12146:106::-;-1:-1:-1;;;;;12214:31:1;12202:44;;12192:60::o;12257:443::-;;12354:5;12348:12;12381:6;12376:3;12369:19;12407:4;12436:2;12431:3;12427:12;12420:19;;12473:2;12466:5;12462:14;12494:3;12506:169;12520:6;12517:1;12514:13;12506:169;;;12581:13;;12569:26;;12615:12;;;;12650:15;;;;12542:1;12535:9;12506:169;;;-1:-1:-1;12691:3:1;;12324:376;-1:-1:-1;;;;;12324:376:1:o;12705:93::-;12777:13;12770:21;12758:34;;12748:50::o;12803:477::-;;12884:5;12878:12;12911:6;12906:3;12899:19;12936:3;12948:162;12962:6;12959:1;12956:13;12948:162;;;13024:4;13080:13;;;13076:22;;13070:29;13052:11;;;13048:20;;13041:59;12977:12;12948:162;;;13128:6;13125:1;13122:13;13119:2;;;13194:3;13187:4;13178:6;13173:3;13169:16;13165:27;13158:40;13119:2;-1:-1:-1;13262:2:1;13241:15;-1:-1:-1;;13237:29:1;13228:39;;;;13269:4;13224:50;;12854:426;-1:-1:-1;;12854:426:1:o;13285:702::-;;13378:5;13372:12;13403:1;13435:2;13424:9;13420:18;13452:1;13447:126;;;;13587:1;13582:399;;;;13413:568;;13447:126;-1:-1:-1;;13480:24:1;;13468:37;;13553:1;13538:17;;13557:4;13534:28;13525:38;;;-1:-1:-1;13447:126:1;;13582:399;13632:1;13621:9;13617:17;13657:5;13654:1;13647:16;13686:4;13731:2;13728:1;13718:16;13756:1;13770:165;13784:6;13781:1;13778:13;13770:165;;;13862:14;;13849:11;;;13842:35;13905:16;;;;13799:10;;13770:165;;;-1:-1:-1;;;13955:16:1;;;-1:-1:-1;13413:568:1;;;;13345:642;;;;:::o;13992:358::-;14117:12;;-1:-1:-1;;;;;14113:21:1;;;14101:34;;14198:4;14187:16;;;14181:23;14174:31;14167:39;14151:14;;;14144:63;14260:4;14249:16;;;14243:23;14239:32;;;14223:14;;;14216:56;14335:4;14324:16;;;14318:23;14311:31;14304:39;14288:14;;14281:63;14053:297::o;14355:273::-;;14538:6;14530;14525:3;14512:33;14564:16;;14589:15;;;14564:16;14502:126;-1:-1:-1;14502:126:1:o;14633:338::-;;-1:-1:-1;;;14887:3:1;14880:21;14917:48;14962:1;14957:3;14953:11;14945:6;14917:48;:::i;14976:348::-;;-1:-1:-1;;;15230:3:1;15223:30;15269:49;15314:2;15309:3;15305:12;15297:6;15269:49;:::i;15329:205::-;15529:3;15520:14::o;15539:203::-;-1:-1:-1;;;;;15703:32:1;;;;15685:51;;15673:2;15658:18;;15640:102::o;15747:383::-;-1:-1:-1;;;;;16013:15:1;;;15995:34;;16065:15;;;;16060:2;16045:18;;16038:43;16112:2;16097:18;;16090:34;;;;15945:2;15930:18;;15912:218::o;16135:282::-;-1:-1:-1;;;;;16335:32:1;;;;16317:51;;16399:2;16384:18;;16377:34;16305:2;16290:18;;16272:145::o;16701:806::-;;16890:2;16930;16919:9;16915:18;16960:2;16949:9;16942:21;16983:6;17018;17012:13;17049:6;17041;17034:22;17087:2;17076:9;17072:18;17065:25;;17150:2;17144;17136:6;17132:15;17121:9;17117:31;17113:40;17099:54;;17188:2;17180:6;17176:15;17209:4;17222:256;17236:6;17233:1;17230:13;17222:256;;;17329:2;17325:7;17313:9;17305:6;17301:22;17297:36;17292:3;17285:49;17357:41;17391:6;17382;17376:13;17357:41;:::i;:::-;17347:51;-1:-1:-1;17456:12:1;;;;17421:15;;;;17258:1;17251:9;17222:256;;;-1:-1:-1;17495:6:1;;16870:637;-1:-1:-1;;;;;;;16870:637:1:o;17512:187::-;17677:14;;17670:22;17652:41;;17640:2;17625:18;;17607:92::o;17704:177::-;17850:25;;;17838:2;17823:18;;17805:76::o;17886:1555::-;;18163:6;18152:9;18145:25;18189:2;18227:1;18223;18218:3;18214:11;18210:19;18277:2;18269:6;18265:15;18260:2;18249:9;18245:18;18238:43;18329:2;18321:6;18317:15;18312:2;18301:9;18297:18;18290:43;18369:3;18364:2;18353:9;18349:18;18342:31;18411:3;18400:9;18396:19;18450:6;18444:13;18494:3;18488;18477:9;18473:19;18466:32;18518:6;18553:12;18547:19;18590:6;18582;18575:22;18628:3;18617:9;18613:19;18606:26;;18673:2;18659:12;18655:21;18641:35;;18694:4;18685:13;;18707:178;18721:6;18718:1;18715:13;18707:178;;;18786:13;;18782:22;;18770:35;;18860:15;;;;18743:1;18736:9;;;;;18825:12;;;;18707:178;;;18711:3;18934:2;18926:6;18922:15;18916:22;18894:44;;18961:3;18957:8;18947:18;;19027:2;19015:9;19010:3;19006:19;19002:28;18996:3;18985:9;18981:19;18974:57;19054:55;19105:3;19089:14;19054:55;:::i;:::-;19040:69;;;;;19158:2;19150:6;19146:15;19140:22;19227:2;19215:9;19207:6;19203:22;19199:31;19193:3;19182:9;19178:19;19171:60;19254:42;19289:6;19273:14;19254:42;:::i;:::-;19240:56;;;;19345:2;19337:6;19333:15;19327:22;19358:54;19407:3;19396:9;19392:19;19376:14;19358:54;:::i;:::-;-1:-1:-1;19429:6:1;18135:1306;-1:-1:-1;;;;;;18135:1306:1:o;19446:219::-;;19593:2;19582:9;19575:21;19613:46;19655:2;19644:9;19640:18;19632:6;19613:46;:::i;20488:194::-;20670:4;20658:17;;;;20640:36;;20628:2;20613:18;;20595:87::o;20687:443::-;;20946:4;20938:6;20934:17;20923:9;20916:36;20988:2;20983;20972:9;20968:18;20961:30;21008:62;21066:2;21055:9;21051:18;21043:6;21008:62;:::i;:::-;21000:70;;21118:4;21110:6;21106:17;21101:2;21090:9;21086:18;21079:45;20906:224;;;;;;:::o;21361:344::-;21563:2;21545:21;;;21602:2;21582:18;;;21575:30;-1:-1:-1;;;21636:2:1;21621:18;;21614:50;21696:2;21681:18;;21535:170::o;21710:337::-;21912:2;21894:21;;;21951:2;21931:18;;;21924:30;-1:-1:-1;;;21985:2:1;21970:18;;21963:43;22038:2;22023:18;;21884:163::o;22052:326::-;22254:2;22236:21;;;22293:1;22273:18;;;22266:29;-1:-1:-1;;;22326:2:1;22311:18;;22304:33;22369:2;22354:18;;22226:152::o;22383:351::-;22585:2;22567:21;;;22624:2;22604:18;;;22597:30;22663:29;22658:2;22643:18;;22636:57;22725:2;22710:18;;22557:177::o;22739:412::-;22941:2;22923:21;;;22980:2;22960:18;;;22953:30;23019:34;23014:2;22999:18;;22992:62;-1:-1:-1;;;23085:2:1;23070:18;;23063:46;23141:3;23126:19;;22913:238::o;23156:352::-;23358:2;23340:21;;;23397:2;23377:18;;;23370:30;23436;23431:2;23416:18;;23409:58;23499:2;23484:18;;23330:178::o;23513:403::-;23715:2;23697:21;;;23754:2;23734:18;;;23727:30;23793:34;23788:2;23773:18;;23766:62;-1:-1:-1;;;23859:2:1;23844:18;;23837:37;23906:3;23891:19;;23687:229::o;23921:341::-;24123:2;24105:21;;;24162:2;24142:18;;;24135:30;-1:-1:-1;;;24196:2:1;24181:18;;24174:47;24253:2;24238:18;;24095:167::o;24267:351::-;24469:2;24451:21;;;24508:2;24488:18;;;24481:30;24547:29;24542:2;24527:18;;24520:57;24609:2;24594:18;;24441:177::o;24623:332::-;24825:2;24807:21;;;24864:1;24844:18;;;24837:29;-1:-1:-1;;;24897:2:1;24882:18;;24875:39;24946:2;24931:18;;24797:158::o;24960:414::-;25162:2;25144:21;;;25201:2;25181:18;;;25174:30;25240:34;25235:2;25220:18;;25213:62;-1:-1:-1;;;25306:2:1;25291:18;;25284:48;25364:3;25349:19;;25134:240::o;25379:332::-;25581:2;25563:21;;;25620:1;25600:18;;;25593:29;-1:-1:-1;;;25653:2:1;25638:18;;25631:39;25702:2;25687:18;;25553:158::o;25716:413::-;25918:2;25900:21;;;25957:2;25937:18;;;25930:30;25996:34;25991:2;25976:18;;25969:62;-1:-1:-1;;;26062:2:1;26047:18;;26040:47;26119:3;26104:19;;25890:239::o;26134:335::-;26336:2;26318:21;;;26375:2;26355:18;;;26348:30;-1:-1:-1;;;26409:2:1;26394:18;;26387:41;26460:2;26445:18;;26308:161::o;26474:397::-;26676:2;26658:21;;;26715:2;26695:18;;;26688:30;26754:34;26749:2;26734:18;;26727:62;-1:-1:-1;;;26820:2:1;26805:18;;26798:31;26861:3;26846:19;;26648:223::o;26876:332::-;27078:2;27060:21;;;27117:1;27097:18;;;27090:29;-1:-1:-1;;;27150:2:1;27135:18;;27128:39;27199:2;27184:18;;27050:158::o;27213:347::-;27415:2;27397:21;;;27454:2;27434:18;;;27427:30;27493:25;27488:2;27473:18;;27466:53;27551:2;27536:18;;27387:173::o;27565:409::-;27767:2;27749:21;;;27806:2;27786:18;;;27779:30;27845:34;27840:2;27825:18;;27818:62;-1:-1:-1;;;27911:2:1;27896:18;;27889:43;27964:3;27949:19;;27739:235::o;27979:344::-;28181:2;28163:21;;;28220:2;28200:18;;;28193:30;-1:-1:-1;;;28254:2:1;28239:18;;28232:50;28314:2;28299:18;;28153:170::o;28328:417::-;28530:2;28512:21;;;28569:2;28549:18;;;28542:30;28608:34;28603:2;28588:18;;28581:62;-1:-1:-1;;;28674:2:1;28659:18;;28652:51;28735:3;28720:19;;28502:243::o;28750:352::-;28952:2;28934:21;;;28991:2;28971:18;;;28964:30;29030;29025:2;29010:18;;29003:58;29093:2;29078:18;;28924:178::o;29107:341::-;29309:2;29291:21;;;29348:2;29328:18;;;29321:30;-1:-1:-1;;;29382:2:1;29367:18;;29360:47;29439:2;29424:18;;29281:167::o;29453:336::-;29655:2;29637:21;;;29694:2;29674:18;;;29667:30;-1:-1:-1;;;29728:2:1;29713:18;;29706:42;29780:2;29765:18;;29627:162::o;29794:412::-;29996:2;29978:21;;;30035:2;30015:18;;;30008:30;30074:34;30069:2;30054:18;;30047:62;-1:-1:-1;;;30140:2:1;30125:18;;30118:46;30196:3;30181:19;;29968:238::o;30211:1174::-;;30548:3;30537:9;30530:22;30595:6;30589:13;30583:3;30572:9;30568:19;30561:42;30650:4;30642:6;30638:17;30632:24;30692:1;30678:12;30675:19;30665:2;;30698:9;30665:2;30740:3;30725:19;;30718:41;30808:4;30796:17;;30790:24;-1:-1:-1;;;;;30889:23:1;;;30883:3;30868:19;;30861:52;30972:4;30960:17;;30954:24;30950:33;30944:3;30929:19;;30922:62;31039:4;31027:17;;31021:24;31015:3;31000:19;;30993:53;30841:3;31083:17;;31077:24;31138:4;31132:3;31117:19;;31110:33;31160:55;31210:3;31195:19;;31077:24;31160:55;:::i;:::-;31152:63;;;31224:65;31283:4;31272:9;31268:20;31260:6;31224:65;:::i;:::-;31320:4;31305:20;;31298:36;;;;31365:4;31350:20;31343:36;30520:865;;-1:-1:-1;;30520:865:1:o;31572:983::-;;31882:3;31871:9;31867:19;31913:6;31902:9;31895:25;31939:2;31977:6;31972:2;31961:9;31957:18;31950:34;32020:3;32015:2;32004:9;32000:18;31993:31;32044:6;32079;32073:13;32110:6;32102;32095:22;32148:3;32137:9;32133:19;32126:26;;32187:2;32179:6;32175:15;32161:29;;32208:4;32221:195;32235:6;32232:1;32229:13;32221:195;;;32300:13;;-1:-1:-1;;;;;32296:39:1;32284:52;;32391:15;;;;32356:12;;;;32332:1;32250:9;32221:195;;;-1:-1:-1;;;;;;;32472:32:1;;;;32467:2;32452:18;;32445:60;-1:-1:-1;;;32536:3:1;32521:19;32514:35;32433:3;31843:712;-1:-1:-1;;;31843:712:1:o;32560:1228::-;;32914:3;32903:9;32899:19;32945:6;32934:9;32927:25;32971:2;33009:6;33004:2;32993:9;32989:18;32982:34;33035:2;33073:3;33068:2;33057:9;33053:18;33046:31;33097:6;33132;33126:13;33163:6;33155;33148:22;33201:3;33190:9;33186:19;33179:26;;33240:2;33232:6;33228:15;33214:29;;33261:4;33274:385;33288:6;33285:1;33282:13;33274:385;;;33347:13;;33431:9;;-1:-1:-1;;;;;33427:18:1;;;33415:31;;33490:11;;;33484:18;33480:27;33466:12;;;33459:49;33562:11;;33556:18;33549:26;33542:34;33528:12;;;33521:56;33634:15;;;;33606:4;33597:14;;;;33400:1;33303:9;33274:385;;;33278:3;;33676;33668:11;;;;;;33688:50;33732:4;33721:9;33717:20;33709:6;33688:50;:::i;:::-;33775:6;33769:3;33758:9;33754:19;33747:35;32875:913;;;;;;;;:::o;33793:248::-;33967:25;;;34023:2;34008:18;;34001:34;33955:2;33940:18;;33922:119::o;34046:1025::-;;34461:3;34491:6;34480:9;34473:25;34534:6;34529:2;34518:9;34514:18;34507:34;34577:6;34572:2;34561:9;34557:18;34550:34;34620:6;34615:2;34604:9;34600:18;34593:34;34664:2;34658:3;34647:9;34643:19;34636:31;34684:62;34742:2;34731:9;34727:18;34719:6;34684:62;:::i;:::-;34783:13;;34777:3;34762:19;;34755:42;34852:2;34840:15;;34834:22;34828:3;34813:19;;34806:51;34912:2;34900:15;;34894:22;34888:3;34873:19;;34866:51;34972:2;34960:15;;;34954:22;34948:3;34933:19;;34926:51;-1:-1:-1;;35008:3:1;34993:19;;34986:35;;;;35052:3;35037:19;;;35030:35;34676:70;34441:630;-1:-1:-1;;;;;34441:630:1:o;35076:463::-;35335:25;;;35391:2;35376:18;;35369:34;;;;35434:2;35419:18;;35412:34;;;;35477:2;35462:18;;35455:34;35520:3;35505:19;;35498:35;35322:3;35307:19;;35289:250::o;35544:607::-;35859:25;;;35915:2;35900:18;;35893:34;;;;35958:2;35943:18;;35936:34;;;;36001:2;35986:18;;35979:34;;;;36044:3;36029:19;;36022:35;36088:3;36073:19;;36066:35;36132:3;36117:19;;36110:35;35846:3;35831:19;;35813:338::o;36156:533::-;;;36299:11;36286:25;36393:2;36389:7;36378:8;36362:14;36358:29;36354:43;36334:18;36330:68;36320:2;;36415:4;36409;36402:18;36320:2;36445:33;;36497:20;;;-1:-1:-1;;;;;;36529:30:1;;36526:2;;;36575:4;36569;36562:18;36526:2;36611:4;36599:17;;-1:-1:-1;36642:14:1;36638:27;;;36628:38;;36625:2;;;36679:1;36676;36669:12;36694:242;36764:2;36758:9;36794:17;;;-1:-1:-1;;;;;36826:34:1;;36862:22;;;36823:62;36820:2;;;36888:9;36820:2;36915;36908:22;36738:198;;-1:-1:-1;36738:198:1:o;36941:183::-;;-1:-1:-1;;;;;37032:6:1;37029:30;37026:2;;;37062:9;37026:2;-1:-1:-1;37113:4:1;37094:17;;;37090:28;;37016:108::o;37129:133::-;-1:-1:-1;;;;;37206:31:1;;37196:42;;37186:2;;37252:1;37249;37242:12;37186:2;37176:86;:::o;37267:120::-;37355:5;37348:13;37341:21;37334:5;37331:32;37321:2;;37377:1;37374;37367:12

Swarm Source

ipfs://ea6ec4c7f984017e7a64af2b5d888f374b8d9c78baa654abb64a52ab5cec6e93

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.