Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator:
Sponsored
Latest 25 from a total of 387 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Harvest With Reb... | 22869667 | 826 days ago | IN | 0 MATIC | 0.00315933 | ||||
Migrate Stake | 22792572 | 827 days ago | IN | 0 MATIC | 0.00440967 | ||||
Deposit | 22551427 | 834 days ago | IN | 0 MATIC | 0.00066554 | ||||
Migrate Stake | 22461123 | 836 days ago | IN | 0 MATIC | 0.00440967 | ||||
Migrate Stake | 22327565 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327560 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327555 | 839 days ago | IN | 0 MATIC | 0.01145211 | ||||
Migrate Stake | 22327535 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327518 | 839 days ago | IN | 0 MATIC | 0.01597535 | ||||
Migrate Stake | 22327518 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327517 | 839 days ago | IN | 0 MATIC | 0.00958521 | ||||
Migrate Stake | 22327517 | 839 days ago | IN | 0 MATIC | 0.00958521 | ||||
Migrate Stake | 22327517 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327413 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327409 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327315 | 839 days ago | IN | 0 MATIC | 0.01145211 | ||||
Migrate Stake | 22327310 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327300 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327296 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327290 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327282 | 839 days ago | IN | 0 MATIC | 0.01145211 | ||||
Migrate Stake | 22327273 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327269 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327255 | 839 days ago | IN | 0 MATIC | 0.01145247 | ||||
Migrate Stake | 22327253 | 839 days ago | IN | 0 MATIC | 0.01145247 |
Loading...
Loading
Contract Name:
XVMCtimeDeposit
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-31 */ /** *Submitted for verification at polygonscan.com on 2021-10-16 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; // File: @openzeppelin/contracts/utils/Context.sol /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function decentralizeXVMC() public virtual { require(block.timestamp > 1636974732, "15th november"); emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/math/SafeMath.sol /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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); function burn(uint256 amount) external; function mint(address to, uint256 amount) external; /** * @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); } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/Pausable.sol /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } interface IMasterChef { function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function pendingEgg(uint256 _pid, address _user) external view returns (uint256); function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256); function emergencyWithdraw(uint256 _pid) external; } interface IacPool { function hopDeposit(uint256 _amount, address _recipientAddress, uint256 previousLastDepositedTime) external; function getUserShares(address wallet) external view returns (uint256); } interface IGovernance { function rebalancePools() external; //function costToVote() external view returns (uint256); function getRollBonus(address _bonusForPool) external view returns (uint256); function stakeRolloverBonus(address _giftTo, address _depositToPool, uint256 _bonusToPay) external; } /** * XVMC time-locked deposit * 1 Month Deposit * Auto-compounding pool */ contract XVMCtimeDeposit is Ownable, Pausable { using SafeERC20 for IERC20; using SafeMath for uint256; struct UserInfo { uint256 shares; // number of shares for a user uint256 lastDepositedTime; // keeps track of deposited time for potential penalty uint256 cakeAtLastUserAction; // keeps track of XVMC deposited at the last user action uint256 lastUserActionTime; // keeps track of the last user action time uint256 delegatingSharesToProposalID; //the proposal ID the user is voting for } struct ProposalVotes { uint256 value; // number of shares the vote has received } IERC20 public immutable token; // XVMC token IERC20 public immutable dummyToken; // Dummy token that we keep 1:1 reserve to XVMC IMasterChef public immutable masterchef; uint256 public immutable poolID; uint256 public immutable withdrawFeePeriod = 30 days; // roughly 1 month uint256 public immutable gracePeriod = 3 days; mapping(address => UserInfo) public userInfo; mapping(uint256 => ProposalVotes) public totalVotesForID; //address governanceContract; // our governing contract ..now admin uint256 public totalShares; uint256 public lastHarvestedTime; address public admin; address public treasury; address public migrationPool; //if pools are to change address public oldPool = 0x5E126F2d2483ce77e8c7D51ef1134e078A24849b; //old pool we can migrate from //address public trustedSender1; //no trusted sender for pool 1 address public trustedPool2; address public trustedPool3; address public trustedPool4; address public trustedPool5; address public trustedPool6; //no performance fees uint256 public constant MAX_CALL_FEE = 100; // 1% uint256 public callFee = 15; // 0.25% uint256 public callFeeWithBonus = 30; // bonus for rebalancing pools in governance contract bool public giftsAllowed; //disable gifts until migration is complete address public distributionAddress = 0x2c5Cb972A943b189F4F83628225Aa7F6B3c2ef6A; event Deposit(address indexed sender, uint256 amount, uint256 shares, uint256 lastDepositedTime); event GiftDeposit(address indexed sender, address indexed recipient, uint256 amount, uint256 shares, uint256 lastDepositedTime); event Withdraw(address indexed sender, uint256 amount, uint256 penalty, uint256 shares); event TransferStake(address indexed sender, address indexed recipient, uint256 shares); event HopPool(address indexed sender, uint256 XVMCamount, uint256 shares, address indexed newPool, address indexed recipient); event HopDeposit(address indexed recipient, uint256 amount, uint256 shares, uint256 previousLastDepositedTime); event Harvest(address indexed sender, uint256 callFee, bool withBonus); event RemoveVotes(address indexed voter, uint256 proposalID, uint256 change); event AddVotes(address indexed voter, uint256 proposalID, uint256 change); event Allowance(address trustedPool); event Pause(); event Unpause(); /** * @notice Constructor * @param _token: Cake token contract * @param _dummyToken: Syrup token contract * @param _masterchef: MasterChef contract * @param _admin: address of the admin * @param _treasury: address of the treasury (collects fees) */ constructor( IERC20 _token, IERC20 _dummyToken, IMasterChef _masterchef, address _admin, address _treasury, uint256 _poolID ) public { token = _token; dummyToken = _dummyToken; masterchef = _masterchef; admin = _admin; treasury = _treasury; poolID = _poolID; IERC20(_dummyToken).safeApprove(address(_masterchef), uint256(-1)); } /** * @notice Checks if the msg.sender is the owner or admin */ modifier adminOrOwner() { require(msg.sender == admin || msg.sender == owner(), "admin: wut?"); _; } /** * @notice Checks if the msg.sender is a contract or a proxy */ modifier notContract() { if(msg.sender != admin) { require(!_isContract(msg.sender), "contract not allowed"); require(msg.sender == tx.origin, "proxy contract not allowed"); } _; } /** * @notice Checks if the msg.sender is a proxy */ modifier notProxy() { require(msg.sender == tx.origin, "proxy contract not allowed"); _; } /** * @notice Deposits funds into the XVMC time-locked vault * @dev Only possible when contract not paused. * @param _amount: number of tokens to deposit (in XVMC) */ function deposit(uint256 _amount) external whenNotPaused notContract { require(_amount > 0, "Nothing to deposit"); uint256 pool = balanceOf(); token.safeTransferFrom(msg.sender, address(this), _amount); uint256 currentShares = 0; if (totalShares != 0) { currentShares = (_amount.mul(totalShares)).div(pool); } else { currentShares = _amount; } UserInfo storage user = userInfo[msg.sender]; user.shares = user.shares.add(currentShares); user.lastDepositedTime = block.timestamp; totalShares = totalShares.add(currentShares); user.cakeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares); user.lastUserActionTime = block.timestamp; if(user.delegatingSharesToProposalID != 0) { _updateVotingAddDiff(msg.sender, user.delegatingSharesToProposalID, currentShares); } _earn(); emit Deposit(msg.sender, _amount, currentShares, block.timestamp); } /** * Equivalent to Deposit * Instead of crediting the msg.sender, it credits custom recipient * A mechanism to gift a time-locked stake to another wallet * The recipient must have no active stake */ function giftDeposit(uint256 _amount, address _recipientAddress) external whenNotPaused notContract { if(!giftsAllowed) { require(msg.sender == distributionAddress); } require(_amount > 0, "Nothing to deposit"); UserInfo storage user = userInfo[_recipientAddress]; if(msg.sender != admin) { require(user.shares == 0, "User already has an active stake"); //require(_amount >= IGovernance(admin).costToVote(), "below min deposit"); } uint256 pool = balanceOf(); token.safeTransferFrom(msg.sender, address(this), _amount); uint256 currentShares = 0; if (totalShares != 0) { currentShares = (_amount.mul(totalShares)).div(pool); } else { currentShares = _amount; } user.shares = user.shares.add(currentShares); user.lastDepositedTime = block.timestamp; totalShares = totalShares.add(currentShares); user.cakeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares); user.lastUserActionTime = block.timestamp; if(user.delegatingSharesToProposalID != 0) { _updateVotingAddDiff(msg.sender, user.delegatingSharesToProposalID, currentShares); } _earn(); emit GiftDeposit(msg.sender, _recipientAddress, _amount, currentShares, block.timestamp); } /** * Users are encouraged to keep staking (ideally forever) * Governor pays bonuses to re-commit and roll over your stake * Higher bonuses available for hopping into pools with longer lockup period */ function stakeRollover(address _poolInto) external whenNotPaused notContract { UserInfo storage user = userInfo[msg.sender]; require(block.timestamp > user.lastDepositedTime.add(withdrawFeePeriod), "stake not yet mature"); uint256 currentAmount = (balanceOf().mul(user.shares)).div(totalShares); //require the governor to hold that amount uint256 toPay = currentAmount.mul(IGovernance(admin).getRollBonus(_poolInto)).div(10000); if(_poolInto == address(this)) { IGovernance(admin).stakeRolloverBonus(msg.sender, _poolInto, toPay); //gov sends tokens to extend the stake } else { require(IERC20(token).balanceOf(admin) >= toPay, "governor is broke"); hopStakeToAnotherPool(user.shares, msg.sender, _poolInto); //will revert if pool is wrong IGovernance(admin).stakeRolloverBonus(msg.sender, _poolInto, toPay); } } /** * @notice Withdraws all funds for a user */ function withdrawAll() external notContract { withdraw(userInfo[msg.sender].shares); } /** * @notice Backs dummyToken 1:1 to XVMC and re-deposits into masterchef * @dev Only possible when contract not paused. */ function harvest() external notContract whenNotPaused { IMasterChef(masterchef).withdraw(poolID, 0); uint256 bal = available(); uint256 currentCallFee = bal.mul(callFee).div(10000); token.safeTransfer(msg.sender, currentCallFee); _earn(); lastHarvestedTime = block.timestamp; emit Harvest(msg.sender, currentCallFee, false); } /** * Equivalent to harvest, but gives user the bonus * for paying transaction fees for rebalancing the pools */ function harvestWithRebalance() external notContract whenNotPaused { IMasterChef(masterchef).withdraw(poolID, 0); uint256 bal = available(); uint256 currentCallFee = bal.mul(callFeeWithBonus).div(10000); IGovernance(admin).rebalancePools(); token.safeTransfer(msg.sender, currentCallFee); _earn(); lastHarvestedTime = block.timestamp; emit Harvest(msg.sender, currentCallFee, true); } /** * @notice Sets admin address and treasury * @dev Only callable by the contract admin or owner. * curently the same, but might change in the future */ function setAdmin(address _admin, address _treasury) external adminOrOwner { require(_admin != address(0), "Cannot be zero address"); admin = _admin; treasury = _treasury; } /** * @notice Sets call fee and call fee with bonus * @dev Only callable by the contract admin. */ function setCallFee(uint256 _callFee, uint256 _callFeeWithBonus) external adminOrOwner { require(_callFee <= MAX_CALL_FEE, "callFee cannot be more than MAX_CALL_FEE"); require(_callFeeWithBonus <= 2 * MAX_CALL_FEE); callFee = _callFee; callFeeWithBonus = _callFeeWithBonus; } /** * set trusted pools, the smart contracts that we can send the tokens to without penalty */ function setTrustedPools(address _pool6, address _pool5, address _pool4, address _pool3, address _pool2) external adminOrOwner { trustedPool6 = _pool6; trustedPool5 = _pool5; trustedPool4 = _pool4; trustedPool3 = _pool3; trustedPool2 = _pool2; /** * approval is needed for hopping stakes between pools * 100% safe After ownership is renounced * emits an event when allowance is granted for extra transparency */ _setAllowance(_pool6); _setAllowance(_pool5); _setAllowance(_pool4); _setAllowance(_pool3); _setAllowance(_pool2); } function _setAllowance(address _giveAllowanceTo) private { if(IERC20(token).allowance(address(this), _giveAllowanceTo) == 0) { IERC20(token).safeApprove(_giveAllowanceTo, uint256(-1)); emit Allowance(_giveAllowanceTo); } else { IERC20(token).safeIncreaseAllowance(_giveAllowanceTo, uint256(-1)); emit Allowance(_giveAllowanceTo); } } /** * set address of new pool that we can migrate into */ function setMigrationPool(address _newPool) external adminOrOwner { _setAllowance(_newPool); migrationPool = _newPool; } /** * set trusted senders, other pools that we can receive from * that are guaranteed to be trusted (they rely lastDepositTime) No trusted senders in pool 1 function setTrustedSenders(address _sender1) external adminOrOwner { trustedSender1 = _sender1; } */ /** * @notice Withdraws from MasterChef to Vault without caring about rewards. * @dev EMERGENCY ONLY. Only callable by the contract admin. */ function emergencyWithdraw() external adminOrOwner { IMasterChef(masterchef).emergencyWithdraw(poolID); } /** * if migration Pool is set * anyone can be a "good Samaritan" * and transfer the stake to the new pool * we must have trusted sender set(old pool) * Function only for simplicity * Can be handled directly through hopStakeToAnotherPool */ function migrateStake(address _staker) external { require(migrationPool != address(0), "migration not activated"); UserInfo storage user = userInfo[_staker]; hopStakeToAnotherPool(user.shares, _staker, migrationPool); } /** * If pools are migrated * somebody could gift small stakes to users * and prevent user-friendly, hassle-free migration * Disable gifts * Until users are migrated into new pool * * For the first iteration we need to prevent * gift deposits and transfer stakes * until tokens are distributed */ function enableGifts() external { require(msg.sender == distributionAddress, "Only distribution address"); giftsAllowed = true; } /** * @notice Triggers stopped state * @dev Only possible when contract not paused. */ function pause() external adminOrOwner whenNotPaused { _pause(); emit Pause(); } /** * @notice Returns to normal state * @dev Only possible when contract is paused. */ function unpause() external adminOrOwner whenPaused { _unpause(); emit Unpause(); } /** * @notice Calculates the expected harvest reward from third party * @return Expected reward to collect in CAKE */ function calculateHarvestCakeRewards() external view returns (uint256) { uint256 amount = IMasterChef(masterchef).pendingEgg(poolID, address(this)); amount = amount.add(available()); uint256 currentCallFee = amount.mul(callFee).div(10000); return currentCallFee; } /** * @notice Calculates the total pending rewards that can be restaked * @return Returns total pending cake rewards */ function calculateTotalPendingCakeRewards() external view returns (uint256) { uint256 amount = IMasterChef(masterchef).pendingEgg(poolID, address(this)); amount = amount.add(available()); return amount; } /** * @notice Calculates the price per share */ function getPricePerFullShare() external view returns (uint256) { return totalShares == 0 ? 1e18 : balanceOf().mul(1e18).div(totalShares); } /** * @notice returns shares for user */ function getUserShares(address wallet) public view returns (uint256) { UserInfo storage user = userInfo[wallet]; return user.shares; } /** * @notice Withdraws from funds from the XVMC time-locked vault * @param _shares: Number of shares to withdraw */ function withdraw(uint256 _shares) public notContract { UserInfo storage user = userInfo[msg.sender]; require(_shares > 0, "Nothing to withdraw"); require(_shares <= user.shares, "Withdraw amount exceeds balance"); uint256 currentAmount = (balanceOf().mul(_shares)).div(totalShares); user.shares = user.shares.sub(_shares); totalShares = totalShares.sub(_shares); uint256 burnAmount = currentAmount; IMasterChef(masterchef).withdraw(poolID, currentAmount); if (block.timestamp < user.lastDepositedTime.add(withdrawFeePeriod)) { uint256 withdrawFee = uint256(2500).sub(((block.timestamp - user.lastDepositedTime).div(86400)).mul(786).div(10)); uint256 currentWithdrawFee = currentAmount.mul(withdrawFee).div(10000); token.safeTransfer(treasury, currentWithdrawFee); currentAmount = currentAmount.sub(currentWithdrawFee); } else if(block.timestamp > user.lastDepositedTime.add(withdrawFeePeriod).add(gracePeriod)) { uint256 withdrawFee = block.timestamp.sub(user.lastDepositedTime.add(withdrawFeePeriod)).div(86400).mul(786).div(10); if(withdrawFee > 2500) { withdrawFee = 2500; } uint256 currentWithdrawFee = currentAmount.mul(withdrawFee).div(10000); token.safeTransfer(treasury, currentWithdrawFee); currentAmount = currentAmount.sub(currentWithdrawFee); } if (user.shares > 0) { user.cakeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares); } else { user.cakeAtLastUserAction = 0; } user.lastUserActionTime = block.timestamp; if(user.delegatingSharesToProposalID != 0) { _updateVotingSubDiff(msg.sender, user.delegatingSharesToProposalID, _shares); } IERC20(dummyToken).burn(burnAmount); token.safeTransfer(msg.sender, currentAmount); emit Withdraw(msg.sender, currentAmount, (burnAmount - currentAmount), _shares); } /** * Transfer stake to another account(another wallet address) * Note: Voting does not get transferred */ function transferStakeToAnotherWallet(uint256 _shares, address _recipientAddress) public notProxy { if(!giftsAllowed) { require(msg.sender == distributionAddress); } UserInfo storage user = userInfo[msg.sender]; require(_shares > 0, "Nothing to withdraw"); require(_shares <= user.shares, "Withdraw amount exceeds balance"); UserInfo storage recipient = userInfo[_recipientAddress]; require(recipient.shares == 0, "Must have no active stake"); user.shares = user.shares.sub(_shares); recipient.shares = _shares; recipient.lastDepositedTime = user.lastDepositedTime; recipient.lastUserActionTime = block.timestamp; user.lastUserActionTime = block.timestamp; if (user.shares > 0) { user.cakeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares); } else { user.cakeAtLastUserAction = 0; } if(user.delegatingSharesToProposalID != 0) { _updateVotingSubDiff(msg.sender, user.delegatingSharesToProposalID, _shares); } recipient.cakeAtLastUserAction = recipient.shares.mul(balanceOf()).div(totalShares); emit TransferStake(msg.sender, _recipientAddress, _shares); } /** * Users can transfer their stake to another pool * Can only transfer to pool with longer lock-up period(trusted pools) * Equivalent to withdrawing, but it deposits the stake into another pool as hopDeposit * Users can transfer stake without penalty * Time served gets transferred * The pool is "registered" as a "trustedSender" to another pool * * Same Function is used for migration to new pools */ function hopStakeToAnotherPool(uint256 _shares, address _recipient, address _poolAddress) public notContract { UserInfo storage user; if(_poolAddress == migrationPool) { require(migrationPool != address(0), "migration not active"); user = userInfo[_recipient]; require(_shares == user.shares); } else { require(_recipient == msg.sender); require( (_poolAddress == trustedPool2 || _poolAddress == trustedPool3 || _poolAddress == trustedPool4 || _poolAddress == trustedPool5 || _poolAddress == trustedPool6), "can only hop into pre-set Pools" ); user = userInfo[msg.sender]; } require(IacPool(_poolAddress).getUserShares(_recipient) == 0, "can only hop if no activeStake"); require(_shares > 0, "Nothing to withdraw"); require(_shares <= user.shares, "Withdraw amount exceeds balance"); uint256 currentAmount = (balanceOf().mul(_shares)).div(totalShares); user.shares = user.shares.sub(_shares); totalShares = totalShares.sub(_shares); user.lastUserActionTime = block.timestamp; IMasterChef(masterchef).withdraw(poolID, currentAmount); if (user.shares > 0) { user.cakeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares); } else { user.cakeAtLastUserAction = 0; } if(user.delegatingSharesToProposalID != 0) { _updateVotingSubDiff(_recipient, user.delegatingSharesToProposalID, _shares); } IERC20(dummyToken).burn(currentAmount); IacPool(_poolAddress).hopDeposit(currentAmount, _recipient, user.lastDepositedTime); emit HopPool(msg.sender, currentAmount, _shares, _poolAddress, _recipient); } /** * hopDeposit is equivalent to gift deposit, exception being that the time served can be passed * The msg.sender can only be a trusted contract * The checks are already made in the hopStakeToAnotherPool function */ function hopDeposit(uint256 _amount, address _recipientAddress, uint256 previousLastDepositedTime) external whenNotPaused { require(msg.sender == oldPool, "only trusted senders(other pools)"); UserInfo storage user = userInfo[_recipientAddress]; uint256 pool = balanceOf(); token.safeTransferFrom(msg.sender, address(this), _amount); uint256 currentShares = 0; if (totalShares != 0) { currentShares = (_amount.mul(totalShares)).div(pool); } else { currentShares = _amount; } user.shares = currentShares; user.lastDepositedTime = previousLastDepositedTime; totalShares = totalShares.add(currentShares); user.cakeAtLastUserAction = user.shares.mul(balanceOf()).div(totalShares); user.lastUserActionTime = block.timestamp; _earn(); emit HopDeposit(_recipientAddress, _amount, currentShares, previousLastDepositedTime); } /** * user delegates their shares to cast a vote on a proposal */ function voteForProposal(uint256 proposalID) external notContract { UserInfo storage user = userInfo[msg.sender]; require(user.shares > 0, "must have shares to vote"); require( proposalID != user.delegatingSharesToProposalID, "Already delegating to this proposalID" ); if(user.delegatingSharesToProposalID != 0) { _updateVotingSubDiff(msg.sender, user.delegatingSharesToProposalID, user.shares); _updateVotingAddDiff(msg.sender, proposalID, user.shares); user.delegatingSharesToProposalID = proposalID; } else { user.delegatingSharesToProposalID = proposalID; totalVotesForID[proposalID].value = totalVotesForID[proposalID].value.add(user.shares); emit AddVotes(msg.sender, proposalID, user.shares); } } /** * @notice Custom logic for how much the vault allows to be borrowed * @dev The contract puts 100% of the tokens to work. */ function available() public view returns (uint256) { return token.balanceOf(address(this)).sub(dummyToken.totalSupply()); } /** * @notice Calculates the total underlying tokens * @dev It includes tokens held by the contract and held in MasterChef */ function balanceOf() public view returns (uint256) { uint256 amount = IMasterChef(masterchef).pendingEgg(poolID, address(this)); return token.balanceOf(address(this)).add(amount); } /** * @notice Deposits tokens into MasterChef to earn staking rewards */ function _earn() internal { uint256 bal = available(); if (bal > 0) { IERC20(dummyToken).mint(address(this), bal); IMasterChef(masterchef).deposit(poolID, bal); } } /** * @notice Checks if address is a contract * @dev It prevents contract from being targetted */ function _isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } /** * Returns votes for a proposal ID */ function totalVotesFor(uint256 proposalID) external view returns (uint256) { return totalVotesForID[proposalID].value; } /** * updates votes(whenever there is transfer of funds) */ function _updateVotingAddDiff(address voter, uint256 proposalID, uint256 diff) private { totalVotesForID[proposalID].value = totalVotesForID[proposalID].value.add(diff); emit AddVotes(voter, proposalID, diff); } function _updateVotingSubDiff(address voter, uint256 proposalID, uint256 diff) private { totalVotesForID[proposalID].value = totalVotesForID[proposalID].value.sub(diff); emit RemoveVotes(voter, proposalID, diff); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"contract IERC20","name":"_dummyToken","type":"address"},{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_poolID","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trustedPool","type":"address"}],"name":"Allowance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"GiftDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"callFee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"withBonus","type":"bool"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"}],"name":"HopDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"XVMCamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":true,"internalType":"address","name":"newPool","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"HopPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"RemoveVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"TransferStake","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_CALL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateHarvestCakeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateTotalPendingCakeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callFeeWithBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decentralizeXVMC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dummyToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getUserShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"}],"name":"giftDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giftsAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestWithRebalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"}],"name":"hopDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_poolAddress","type":"address"}],"name":"hopStakeToAnotherPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastHarvestedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"migrateStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_callFee","type":"uint256"},{"internalType":"uint256","name":"_callFeeWithBonus","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPool","type":"address"}],"name":"setMigrationPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool6","type":"address"},{"internalType":"address","name":"_pool5","type":"address"},{"internalType":"address","name":"_pool4","type":"address"},{"internalType":"address","name":"_pool3","type":"address"},{"internalType":"address","name":"_pool2","type":"address"}],"name":"setTrustedPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolInto","type":"address"}],"name":"stakeRollover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"totalVotesFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalVotesForID","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"}],"name":"transferStakeToAnotherWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPool2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPool3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPool4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPool5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPool6","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"cakeAtLastUserAction","type":"uint256"},{"internalType":"uint256","name":"lastUserActionTime","type":"uint256"},{"internalType":"uint256","name":"delegatingSharesToProposalID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"voteForProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61014060405262278d00610100526203f48061012052600880546001600160a01b031916735e126f2d2483ce77e8c7d51ef1134e078a24849b179055600f600e819055601e905560108054742c5cb972a943b189f4f83628225aa7f6b3c2ef6a00610100600160a81b03199091161790553480156200007d57600080fd5b5060405162004c8338038062004c83833981810160405260c0811015620000a357600080fd5b508051602082015160408301516060840151608085015160a09095015193949293919290916000620000d4620001ac565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b191690556001600160601b0319606087811b821660805286811b821660a05285901b1660c052600580546001600160a01b038581166001600160a01b03199283161790925560068054858416921691909117905560e0829052620001a090861685600019620037ab620001b0602090811b91909117901c565b505050505050620005c3565b3390565b8015806200023a575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156200020a57600080fd5b505afa1580156200021f573d6000803e3d6000fd5b505050506040513d60208110156200023657600080fd5b5051155b620002775760405162461bcd60e51b815260040180806020018281038252603681526020018062004c4d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620002cf918591620002d416565b505050565b606062000330826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166200039060201b620038c3179092919060201c565b805190915015620002cf578080602001905160208110156200035157600080fd5b5051620002cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018062004c23602a913960400191505060405180910390fd5b6060620003a18484600085620003ab565b90505b9392505050565b606082471015620003ee5760405162461bcd60e51b815260040180806020018281038252602681526020018062004bfd6026913960400191505060405180910390fd5b620003f98562000513565b6200044b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106200048c5780518252601f1990920191602091820191016200046b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114620004f0576040519150601f19603f3d011682016040523d82523d6000602084013e620004f5565b606091505b5090925090506200050882828662000519565b979650505050505050565b3b151590565b606083156200052a575081620003a4565b8251156200053b5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005875781810151838201526020016200056d565b50505050905090810190601f168015620005b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60805160601c60a05160601c60c05160601c60e051610100516101205161451a620006e360003980610d0c52806127d0525080610c435280610d305280610d8b52806129f25280613574525080610b9f5280611198528061140c5280611b635280611d9f528061214352806126df52806132c152806135095280613d0a525080610bd852806111d152806114475280611b9a5280611dda528061271a52806132fa52806134da52806137655280613cdb525080610e8652806112dc528061176c5280611c485280613c7a525080610ccb5280610dfb5280610f0f5280611264528061137f52806116815280611e7552806123755280612bbb5280612e6952806133f552806137895280613e635280613f1c5280613f93525061451a6000f3fe608060405234801561001057600080fd5b506004361061035d5760003560e01c8063955afa6c116101d3578063c55b6bb711610104578063e56d607d116100a2578063f2fde38b1161007c578063f2fde38b14610787578063f851a440146107ad578063fb1db278146107b5578063fc0c546a146107bd5761035d565b8063e56d607d1461073c578063e7165f4e14610759578063f0e71c841461077f5761035d565b8063d693f834116100de578063d693f834146106fe578063d8bef13b14610724578063db2e21bc1461072c578063df10b4e6146107345761035d565b8063c55b6bb7146106c0578063c86c6097146106ee578063cf9eae16146106f65761035d565b8063a26678aa11610171578063b60f05311161014b578063b60f05311461066d578063b6b55f2514610675578063ba0cb22b14610692578063c1ddc81d146106b85761035d565b8063a26678aa14610622578063a805f1ca14610648578063abff1c78146106655761035d565b80639d72596b116101ad5780639d72596b146105c25780639f2c79d1146105ca578063a06db7dc146105d2578063a15d1ba1146105da5761035d565b8063955afa6c1461056257806397b505201461056a5780639b2eb9f2146105965761035d565b80635c975abb116102ad57806377c7b8fc1161024b578063853828b611610225578063853828b6146105425780638d9344851461054a5780638da5cb5b1461055257806390321e1a1461055a5761035d565b806377c7b8fc1461052a578063807db7f0146105325780638456cb591461053a5761035d565b80636207c278116102875780636207c278146104b457806367479ec5146104e65780637131cc53146104ee578063722713f7146105225761035d565b80635c975abb1461046d57806360b2d1211461048957806361d027b3146104ac5761035d565b806337fb7e211161031a57806345b54574116102f457806345b545741461044d5780634641257d1461045557806348a0d7541461045d57806358ebceb6146104655761035d565b806337fb7e21146104355780633a98ef391461043d5780633f4ba83a146104455761035d565b8063045c6ce0146103625780631636105f146103815780631905c405146103a55780631959a002146103ad5780632ad5a53f146103fe5780632e1a7d4d14610418575b600080fd5b61037f6004803603602081101561037857600080fd5b50356107c5565b005b6103896109b3565b604080516001600160a01b039092168252519081900360200190f35b6103896109c2565b6103d3600480360360208110156103c357600080fd5b50356001600160a01b03166109d1565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6104066109ff565b60408051918252519081900360200190f35b61037f6004803603602081101561042e57600080fd5b5035610a04565b610389610f82565b610406610f96565b61037f610f9c565b61038961108f565b61037f61109e565b6104066112d5565b6104066113fc565b6104756114d3565b604080519115158252519081900360200190f35b61037f6004803603604081101561049f57600080fd5b50803590602001356114e3565b6103896115ac565b61037f600480360360608110156104ca57600080fd5b508035906001600160a01b0360208201351690604001356115bb565b61038961176a565b61037f6004803603606081101561050457600080fd5b508035906001600160a01b036020820135811691604001351661178e565b610406611d8f565b610406611eee565b61037f611f26565b61037f611f99565b61037f612089565b610406612141565b610389612165565b610406612174565b61038961217a565b61037f6004803603604081101561058057600080fd5b50803590602001356001600160a01b0316612189565b61037f600480360360408110156105ac57600080fd5b50803590602001356001600160a01b0316612480565b6104066126cf565b6103896127bf565b6104066127ce565b61037f600480360360a08110156105f057600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166127f2565b61037f6004803603602081101561063857600080fd5b50356001600160a01b03166128ec565b6104066004803603602081101561065e57600080fd5b5035612cfb565b610475612d0d565b610406612d16565b61037f6004803603602081101561068b57600080fd5b5035612d1c565b610406600480360360208110156106a857600080fd5b50356001600160a01b0316612f78565b610389612f93565b61037f600480360360408110156106d657600080fd5b506001600160a01b0381358116916020013516612fa2565b610406613094565b61037f61309a565b61037f6004803603602081101561071457600080fd5b50356001600160a01b031661312c565b61037f6131c7565b61037f613468565b610406613572565b6104066004803603602081101561075257600080fd5b5035613596565b61037f6004803603602081101561076f57600080fd5b50356001600160a01b03166135a8565b610389613631565b61037f6004803603602081101561079d57600080fd5b50356001600160a01b0316613640565b610389613754565b610389613763565b610389613787565b6005546001600160a01b03163314610862576107e0336138dc565b15610820576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214610862576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b33600090815260016020526040902080546108c4576040805162461bcd60e51b815260206004820152601860248201527f6d75737420686176652073686172657320746f20766f74650000000000000000604482015290519081900360640190fd5b80600401548214156109075760405162461bcd60e51b81526004018080602001828103825260258152602001806144606025913960400191505060405180910390fd5b60048101541561093f5761092433826004015483600001546138e2565b61093333838360000154613957565b600481018290556109af565b600481018290558054600083815260026020526040902054610960916139cc565b600083815260026020908152604091829020929092558254815185815292830152805133927fdb8549181d0331885cbb0e0d1e36bdd89e38e53990069f6f07a4090a15f74e5d92908290030190a25b5050565b6009546001600160a01b031681565b600d546001600160a01b031681565b6001602081905260009182526040909120805491810154600282015460038301546004909301549192909185565b606481565b6005546001600160a01b03163314610aa157610a1f336138dc565b15610a5f576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214610aa1576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b33600090815260016020526040902081610af8576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b8054821115610b4e576040805162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015290519081900360640190fd5b6000610b6e600354610b6885610b62611d8f565b90613a2f565b90613a88565b8254909150610b7d9084613aef565b8255600354610b8c9084613aef565b60035560408051630441a3e760e41b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052905182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163441a3e709160448082019260009290919082900301818387803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b5050506001840154610c6791507f00000000000000000000000000000000000000000000000000000000000000006139cc565b421015610d07576000610ca3610c9a600a610b68610312610b62620151808a600101544203613a8890919063ffffffff16565b6109c490613aef565b90506000610cb7612710610b688685613a2f565b600654909150610cf4906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683613b4c565b610cfe8482613aef565b93505050610e33565b610d687f0000000000000000000000000000000000000000000000000000000000000000610d627f000000000000000000000000000000000000000000000000000000000000000086600101546139cc90919063ffffffff16565b906139cc565b421115610e33576000610dc4600a610b68610312610b6262015180610b68610dbd7f00000000000000000000000000000000000000000000000000000000000000008c600101546139cc90919063ffffffff16565b4290613aef565b90506109c4811115610dd557506109c45b6000610de7612710610b688685613a2f565b600654909150610e24906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683613b4c565b610e2e8482613aef565b935050505b825415610e5d57610e53600354610b68610e4b611d8f565b865490613a2f565b6002840155610e65565b600060028401555b426003840155600483015415610e8457610e84338460040154866138e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610eea57600080fd5b505af1158015610efe573d6000803e3d6000fd5b50610f389250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690503384613b4c565b604080518381528383036020820152808201869052905133917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a250505050565b60105461010090046001600160a01b031681565b60035481565b6005546001600160a01b0316331480610fcd5750610fb8612165565b6001600160a01b0316336001600160a01b0316145b61100c576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6110146114d3565b61105c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b611064613b9e565b6040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600a546001600160a01b031681565b6005546001600160a01b0316331461113b576110b9336138dc565b156110f9576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b33321461113b576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b6111436114d3565b15611188576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60408051630441a3e760e41b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260006024820181905291516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263441a3e70926044808201939182900301818387803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b5050505060006112366112d5565b90506000611255612710610b68600e5485613a2f90919063ffffffff16565b905061128b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383613b4c565b611293613c41565b426004556040805182815260006020820152815133927fef3401590ce0f1c0559455e9e6b6072004724754ba19062fdbaf801748026cd7928290030190a25050565b60006113f77f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d60208110156113ef57600080fd5b505190613aef565b905090565b6040805163f456426f60e01b81527f00000000000000000000000000000000000000000000000000000000000000006004820152306024820152905160009182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f456426f916044808301926020929190829003018186803b15801561148d57600080fd5b505afa1580156114a1573d6000803e3d6000fd5b505050506040513d60208110156114b757600080fd5b505190506114cd6114c66112d5565b82906139cc565b91505090565b600054600160a01b900460ff1690565b6005546001600160a01b031633148061151457506114ff612165565b6001600160a01b0316336001600160a01b0316145b611553576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b60648211156115935760405162461bcd60e51b81526004018080602001828103825260288152602001806143d66028913960400191505060405180910390fd5b60c88111156115a157600080fd5b600e91909155600f55565b6006546001600160a01b031681565b6115c36114d3565b15611608576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6008546001600160a01b031633146116515760405162461bcd60e51b815260040180806020018281038252602181526020018061441e6021913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040812090611672611d8f565b90506116a96001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333088613d7e565b60006003546000146116d5576116ce82610b6860035489613a2f90919063ffffffff16565b90506116d8565b50845b808355600183018490556003546116ef90826139cc565b600381905561170390610b68610e4b611d8f565b6002840155426003840155611716613c41565b604080518781526020810183905280820186905290516001600160a01b038716917fb5dfa7e0a8dca1c66af0a681b9d56acb2f9e73b3a4b79042be1673cea50eb93b919081900360600190a2505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6005546001600160a01b0316331461182b576117a9336138dc565b156117e9576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b33321461182b576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b6007546000906001600160a01b03838116911614156118c3576007546001600160a01b0316611898576040805162461bcd60e51b81526020600482015260146024820152736d6967726174696f6e206e6f742061637469766560601b604482015290519081900360640190fd5b506001600160a01b0382166000908152600160205260409020805484146118be57600080fd5b6119ab565b6001600160a01b03831633146118d857600080fd5b6009546001600160a01b03838116911614806119015750600a546001600160a01b038381169116145b806119195750600b546001600160a01b038381169116145b806119315750600c546001600160a01b038381169116145b806119495750600d546001600160a01b038381169116145b61199a576040805162461bcd60e51b815260206004820152601f60248201527f63616e206f6e6c7920686f7020696e746f207072652d73657420506f6f6c7300604482015290519081900360640190fd5b503360009081526001602052604090205b816001600160a01b031663ba0cb22b846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156119f857600080fd5b505afa158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b505115611a76576040805162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c7920686f70206966206e6f206163746976655374616b650000604482015290519081900360640190fd5b60008411611ac1576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b8054841115611b17576040805162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015290519081900360640190fd5b6000611b2b600354610b6887610b62611d8f565b8254909150611b3a9086613aef565b8255600354611b499086613aef565b6003908155429083015560408051630441a3e760e41b81527f000000000000000000000000000000000000000000000000000000000000000060048201526024810183905290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163441a3e7091604480830192600092919082900301818387803b158015611be157600080fd5b505af1158015611bf5573d6000803e3d6000fd5b50508354159150611c25905057611c1b600354610b68611c13611d8f565b855490613a2f565b6002830155611c2d565b600060028301555b600482015415611c4657611c46848360040154876138e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cac57600080fd5b505af1158015611cc0573d6000803e3d6000fd5b50505050826001600160a01b0316636207c278828685600101546040518463ffffffff1660e01b815260040180848152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b5050604080518481526020810189905281516001600160a01b03808a1695508816935033927fa558b87c94774fb5dfc50bace78eb8e8fbe078151e3928df569b72ba35f1a1dc928290030190a45050505050565b6040805163f456426f60e01b81527f00000000000000000000000000000000000000000000000000000000000000006004820152306024820152905160009182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f456426f916044808301926020929190829003018186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b5051604080516370a0823160e01b815230600482015290519192506114cd9183916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ebc57600080fd5b505afa158015611ed0573d6000803e3d6000fd5b505050506040513d6020811015611ee657600080fd5b5051906139cc565b6000600354600014611f1957611f14600354610b68670de0b6b3a7640000610b62611d8f565b6113f7565b50670de0b6b3a764000090565b60105461010090046001600160a01b03163314611f8a576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920646973747269627574696f6e206164647265737300000000000000604482015290519081900360640190fd5b6010805460ff19166001179055565b6005546001600160a01b0316331480611fca5750611fb5612165565b6001600160a01b0316336001600160a01b0316145b612009576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6120116114d3565b15612056576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b61205e613dd8565b6040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6005546001600160a01b03163314612126576120a4336138dc565b156120e4576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214612126576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b3360009081526001602052604090205461213f90610a04565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031690565b600e5481565b6007546001600160a01b031681565b6121916114d3565b156121d6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b03163314612273576121f1336138dc565b15612231576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214612273576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b60105460ff166122995760105461010090046001600160a01b0316331461229957600080fd5b600082116122e3576040805162461bcd60e51b8152602060048201526012602482015271139bdd1a1a5b99c81d1bc819195c1bdcda5d60721b604482015290519081900360640190fd5b6001600160a01b038181166000908152600160205260409020600554909116331461235c5780541561235c576040805162461bcd60e51b815260206004820181905260248201527f5573657220616c72656164792068617320616e20616374697665207374616b65604482015290519081900360640190fd5b6000612366611d8f565b905061239d6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333087613d7e565b60006003546000146123c9576123c282610b6860035488613a2f90919063ffffffff16565b90506123cc565b50835b82546123d890826139cc565b83554260018401556003546123ed90826139cc565b600381905561240190610b68610e4b611d8f565b60028401554260038401556004830154156124255761242533846004015483613957565b61242d613c41565b6040805186815260208101839052428183015290516001600160a01b0386169133917f190f4e47df17911728b041870d3cd75008c166bb9d8cde694aaa68f73ad415829181900360600190a35050505050565b3332146124c2576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b60105460ff166124e85760105461010090046001600160a01b031633146124e857600080fd5b3360009081526001602052604090208261253f576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b8054831115612595576040805162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015290519081900360640190fd5b6001600160a01b0382166000908152600160205260409020805415612601576040805162461bcd60e51b815260206004820152601960248201527f4d7573742068617665206e6f20616374697665207374616b6500000000000000604482015290519081900360640190fd5b815461260d9085613aef565b82558381556001808301549082015542600380830182905583015581541561264a57612640600354610b68611c13611d8f565b6002830155612652565b600060028301555b60048201541561266b5761266b338360040154866138e2565b612684600354610b6861267c611d8f565b845490613a2f565b60028201556040805185815290516001600160a01b0385169133917fa5c7720da5835a5d7b6c0afb0047711348a91e86c5edae9c61e40a746a0369589181900360200190a350505050565b6040805163f456426f60e01b81527f00000000000000000000000000000000000000000000000000000000000000006004820152306024820152905160009182916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f456426f916044808301926020929190829003018186803b15801561276057600080fd5b505afa158015612774573d6000803e3d6000fd5b505050506040513d602081101561278a57600080fd5b505190506127996114c66112d5565b905060006127b8612710610b68600e5485613a2f90919063ffffffff16565b9250505090565b600b546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6005546001600160a01b0316331480612823575061280e612165565b6001600160a01b0316336001600160a01b0316145b612862576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b600d80546001600160a01b03199081166001600160a01b0388811691909117909255600c80548216878416179055600b80548216868416179055600a80548216858416179055600980549091169183169190911790556128c185613e61565b6128ca84613e61565b6128d383613e61565b6128dc82613e61565b6128e581613e61565b5050505050565b6128f46114d3565b15612939576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b031633146129d657612954336138dc565b15612994576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b3332146129d6576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b33600090815260016020819052604090912090810154612a16907f00000000000000000000000000000000000000000000000000000000000000006139cc565b4211612a60576040805162461bcd60e51b81526020600482015260146024820152737374616b65206e6f7420796574206d617475726560601b604482015290519081900360640190fd5b6000612a78600354610b688460000154610b62611d8f565b6005546040805163ded6e1c960e01b81526001600160a01b0387811660048301529151939450600093612b099361271093610b689391169163ded6e1c991602480820192602092909190829003018186803b158015612ad657600080fd5b505afa158015612aea573d6000803e3d6000fd5b505050506040513d6020811015612b0057600080fd5b50518590613a2f565b90506001600160a01b038416301415612b9457600554604080516370d3372760e11b81523360048201526001600160a01b038781166024830152604482018590529151919092169163e1a66e4e91606480830192600092919082900301818387803b158015612b7757600080fd5b505af1158015612b8b573d6000803e3d6000fd5b50505050612cf5565b600554604080516370a0823160e01b81526001600160a01b039283166004820152905183927f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b158015612c0157600080fd5b505afa158015612c15573d6000803e3d6000fd5b505050506040513d6020811015612c2b57600080fd5b50511015612c74576040805162461bcd60e51b8152602060048201526011602482015270676f7665726e6f722069732062726f6b6560781b604482015290519081900360640190fd5b8254612c8190338661178e565b600554604080516370d3372760e11b81523360048201526001600160a01b038781166024830152604482018590529151919092169163e1a66e4e91606480830192600092919082900301818387803b158015612cdc57600080fd5b505af1158015612cf0573d6000803e3d6000fd5b505050505b50505050565b60009081526002602052604090205490565b60105460ff1681565b60045481565b612d246114d3565b15612d69576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b03163314612e0657612d84336138dc565b15612dc4576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214612e06576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b60008111612e50576040805162461bcd60e51b8152602060048201526012602482015271139bdd1a1a5b99c81d1bc819195c1bdcda5d60721b604482015290519081900360640190fd5b6000612e5a611d8f565b9050612e916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085613d7e565b6000600354600014612ebd57612eb682610b6860035486613a2f90919063ffffffff16565b9050612ec0565b50815b3360009081526001602052604090208054612edb90836139cc565b8155426001820155600354612ef090836139cc565b6003819055612f0490610b6861267c611d8f565b6002820155426003820155600481015415612f2857612f2833826004015484613957565b612f30613c41565b60408051858152602081018490524281830152905133917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e919081900360600190a250505050565b6001600160a01b031660009081526001602052604090205490565b600c546001600160a01b031681565b6005546001600160a01b0316331480612fd35750612fbe612165565b6001600160a01b0316336001600160a01b0316145b613012576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6001600160a01b038216613066576040805162461bcd60e51b815260206004820152601660248201527543616e6e6f74206265207a65726f206164647265737360501b604482015290519081900360640190fd5b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b600f5481565b636192408c42116130e2576040805162461bcd60e51b815260206004820152600d60248201526c189aba34103737bb32b6b132b960991b604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6005546001600160a01b031633148061315d5750613148612165565b6001600160a01b0316336001600160a01b0316145b61319c576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6131a581613e61565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314613264576131e2336138dc565b15613222576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214613264576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b61326c6114d3565b156132b1576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60408051630441a3e760e41b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260006024820181905291516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263441a3e70926044808201939182900301818387803b15801561333d57600080fd5b505af1158015613351573d6000803e3d6000fd5b50505050600061335f6112d5565b9050600061337e612710610b68600f5485613a2f90919063ffffffff16565b9050600560009054906101000a90046001600160a01b03166001600160a01b031663e0e01a616040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133d057600080fd5b505af11580156133e4573d6000803e3d6000fd5b5061341e9250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690503383613b4c565b613426613c41565b426004556040805182815260016020820152815133927fef3401590ce0f1c0559455e9e6b6072004724754ba19062fdbaf801748026cd7928290030190a25050565b6005546001600160a01b03163314806134995750613484612165565b6001600160a01b0316336001600160a01b0316145b6134d8576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635312ea8e7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561355e57600080fd5b505af1158015612cf5573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020526000908152604090205481565b6007546001600160a01b0316613605576040805162461bcd60e51b815260206004820152601760248201527f6d6967726174696f6e206e6f7420616374697661746564000000000000000000604482015290519081900360640190fd5b6001600160a01b038082166000908152600160205260409020805460075491926109af9285911661178e565b6008546001600160a01b031681565b613648613ffb565b6001600160a01b0316613659612165565b6001600160a01b0316146136b4576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166136f95760405162461bcd60e51b815260040180806020018281038252602681526020018061436a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b801580613831575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561380357600080fd5b505afa158015613817573d6000803e3d6000fd5b505050506040513d602081101561382d57600080fd5b5051155b61386c5760405162461bcd60e51b81526004018080602001828103825260368152602001806144af6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526138be908490613fff565b505050565b60606138d284846000856140b0565b90505b9392505050565b3b151590565b6000828152600260205260409020546138fb9082613aef565b60008381526002602090815260409182902092909255805184815291820183905280516001600160a01b038616927f65b0f2fb4228364e2ac61c432687ae942c732095fc217265116bec6cc441683492908290030190a2505050565b60008281526002602052604090205461397090826139cc565b60008381526002602090815260409182902092909255805184815291820183905280516001600160a01b038616927fdb8549181d0331885cbb0e0d1e36bdd89e38e53990069f6f07a4090a15f74e5d92908290030190a2505050565b600082820183811015613a26576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082613a3e57506000613a29565b82820282848281613a4b57fe5b0414613a265760405162461bcd60e51b815260040180806020018281038252602181526020018061443f6021913960400191505060405180910390fd5b6000808211613ade576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613ae757fe5b049392505050565b600082821115613b46576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526138be908490613fff565b613ba66114d3565b613bee576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613c24613ffb565b604080516001600160a01b039092168252519081900360200190a1565b6000613c4b6112d5565b90508015613d7b57604080516340c10f1960e01b81523060048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916340c10f1991604480830192600092919082900301818387803b158015613cc157600080fd5b505af1158015613cd5573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e2bbb1587f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015613d6757600080fd5b505af11580156128e5573d6000803e3d6000fd5b50565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612cf5908590613fff565b613de06114d3565b15613e25576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613c24613ffb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dd62ed3e30836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613edf57600080fd5b505afa158015613ef3573d6000803e3d6000fd5b505050506040513d6020811015613f0957600080fd5b5051613f8657613f456001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016826000196137ab565b604080516001600160a01b038316815290517f77cb9a7aa1629c8fb5ac9bf9fbe709b7e9fd0c321a01f3f2e6cbc71157972b7f9181900360200190a1613d7b565b613fbc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168260001961420c565b604080516001600160a01b038316815290517f77cb9a7aa1629c8fb5ac9bf9fbe709b7e9fd0c321a01f3f2e6cbc71157972b7f9181900360200190a150565b3390565b6060614054826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138c39092919063ffffffff16565b8051909150156138be5780806020019051602081101561407357600080fd5b50516138be5760405162461bcd60e51b815260040180806020018281038252602a815260200180614485602a913960400191505060405180910390fd5b6060824710156140f15760405162461bcd60e51b81526004018080602001828103825260268152602001806143b06026913960400191505060405180910390fd5b6140fa856138dc565b61414b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061418a5780518252601f19909201916020918201910161416b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146141ec576040519150601f19603f3d011682016040523d82523d6000602084013e6141f1565b606091505b50915091506142018282866142c5565b979650505050505050565b600061427082856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015611ebc57600080fd5b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150612cf5908590613fff565b606083156142d45750816138d5565b8251156142e45782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561432e578181015183820152602001614316565b50505050905090810190601f16801561435b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373636f6e7472616374206e6f7420616c6c6f776564000000000000000000000000416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c63616c6c4665652063616e6e6f74206265206d6f7265207468616e204d41585f43414c4c5f46454570726f787920636f6e7472616374206e6f7420616c6c6f7765640000000000006f6e6c7920747275737465642073656e64657273286f7468657220706f6f6c7329536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416c72656164792064656c65676174696e6720746f20746869732070726f706f73616c49445361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212204dfdf480a9dc1ed7ce419be1cb1ba8c3de04d1551e9e974af9583ec4673f8bfd64736f6c634300060c0033416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d9120000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b850000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e0000000000000000000000007e58a67cd1448eaf468d296013fbdf405d7d6dbf0000000000000000000000007e58a67cd1448eaf468d296013fbdf405d7d6dbf000000000000000000000000000000000000000000000000000000000000001c
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061035d5760003560e01c8063955afa6c116101d3578063c55b6bb711610104578063e56d607d116100a2578063f2fde38b1161007c578063f2fde38b14610787578063f851a440146107ad578063fb1db278146107b5578063fc0c546a146107bd5761035d565b8063e56d607d1461073c578063e7165f4e14610759578063f0e71c841461077f5761035d565b8063d693f834116100de578063d693f834146106fe578063d8bef13b14610724578063db2e21bc1461072c578063df10b4e6146107345761035d565b8063c55b6bb7146106c0578063c86c6097146106ee578063cf9eae16146106f65761035d565b8063a26678aa11610171578063b60f05311161014b578063b60f05311461066d578063b6b55f2514610675578063ba0cb22b14610692578063c1ddc81d146106b85761035d565b8063a26678aa14610622578063a805f1ca14610648578063abff1c78146106655761035d565b80639d72596b116101ad5780639d72596b146105c25780639f2c79d1146105ca578063a06db7dc146105d2578063a15d1ba1146105da5761035d565b8063955afa6c1461056257806397b505201461056a5780639b2eb9f2146105965761035d565b80635c975abb116102ad57806377c7b8fc1161024b578063853828b611610225578063853828b6146105425780638d9344851461054a5780638da5cb5b1461055257806390321e1a1461055a5761035d565b806377c7b8fc1461052a578063807db7f0146105325780638456cb591461053a5761035d565b80636207c278116102875780636207c278146104b457806367479ec5146104e65780637131cc53146104ee578063722713f7146105225761035d565b80635c975abb1461046d57806360b2d1211461048957806361d027b3146104ac5761035d565b806337fb7e211161031a57806345b54574116102f457806345b545741461044d5780634641257d1461045557806348a0d7541461045d57806358ebceb6146104655761035d565b806337fb7e21146104355780633a98ef391461043d5780633f4ba83a146104455761035d565b8063045c6ce0146103625780631636105f146103815780631905c405146103a55780631959a002146103ad5780632ad5a53f146103fe5780632e1a7d4d14610418575b600080fd5b61037f6004803603602081101561037857600080fd5b50356107c5565b005b6103896109b3565b604080516001600160a01b039092168252519081900360200190f35b6103896109c2565b6103d3600480360360208110156103c357600080fd5b50356001600160a01b03166109d1565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6104066109ff565b60408051918252519081900360200190f35b61037f6004803603602081101561042e57600080fd5b5035610a04565b610389610f82565b610406610f96565b61037f610f9c565b61038961108f565b61037f61109e565b6104066112d5565b6104066113fc565b6104756114d3565b604080519115158252519081900360200190f35b61037f6004803603604081101561049f57600080fd5b50803590602001356114e3565b6103896115ac565b61037f600480360360608110156104ca57600080fd5b508035906001600160a01b0360208201351690604001356115bb565b61038961176a565b61037f6004803603606081101561050457600080fd5b508035906001600160a01b036020820135811691604001351661178e565b610406611d8f565b610406611eee565b61037f611f26565b61037f611f99565b61037f612089565b610406612141565b610389612165565b610406612174565b61038961217a565b61037f6004803603604081101561058057600080fd5b50803590602001356001600160a01b0316612189565b61037f600480360360408110156105ac57600080fd5b50803590602001356001600160a01b0316612480565b6104066126cf565b6103896127bf565b6104066127ce565b61037f600480360360a08110156105f057600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166127f2565b61037f6004803603602081101561063857600080fd5b50356001600160a01b03166128ec565b6104066004803603602081101561065e57600080fd5b5035612cfb565b610475612d0d565b610406612d16565b61037f6004803603602081101561068b57600080fd5b5035612d1c565b610406600480360360208110156106a857600080fd5b50356001600160a01b0316612f78565b610389612f93565b61037f600480360360408110156106d657600080fd5b506001600160a01b0381358116916020013516612fa2565b610406613094565b61037f61309a565b61037f6004803603602081101561071457600080fd5b50356001600160a01b031661312c565b61037f6131c7565b61037f613468565b610406613572565b6104066004803603602081101561075257600080fd5b5035613596565b61037f6004803603602081101561076f57600080fd5b50356001600160a01b03166135a8565b610389613631565b61037f6004803603602081101561079d57600080fd5b50356001600160a01b0316613640565b610389613754565b610389613763565b610389613787565b6005546001600160a01b03163314610862576107e0336138dc565b15610820576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214610862576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b33600090815260016020526040902080546108c4576040805162461bcd60e51b815260206004820152601860248201527f6d75737420686176652073686172657320746f20766f74650000000000000000604482015290519081900360640190fd5b80600401548214156109075760405162461bcd60e51b81526004018080602001828103825260258152602001806144606025913960400191505060405180910390fd5b60048101541561093f5761092433826004015483600001546138e2565b61093333838360000154613957565b600481018290556109af565b600481018290558054600083815260026020526040902054610960916139cc565b600083815260026020908152604091829020929092558254815185815292830152805133927fdb8549181d0331885cbb0e0d1e36bdd89e38e53990069f6f07a4090a15f74e5d92908290030190a25b5050565b6009546001600160a01b031681565b600d546001600160a01b031681565b6001602081905260009182526040909120805491810154600282015460038301546004909301549192909185565b606481565b6005546001600160a01b03163314610aa157610a1f336138dc565b15610a5f576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214610aa1576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b33600090815260016020526040902081610af8576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b8054821115610b4e576040805162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015290519081900360640190fd5b6000610b6e600354610b6885610b62611d8f565b90613a2f565b90613a88565b8254909150610b7d9084613aef565b8255600354610b8c9084613aef565b60035560408051630441a3e760e41b81527f000000000000000000000000000000000000000000000000000000000000001c600482015260248101839052905182916001600160a01b037f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e169163441a3e709160448082019260009290919082900301818387803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b5050506001840154610c6791507f0000000000000000000000000000000000000000000000000000000000278d006139cc565b421015610d07576000610ca3610c9a600a610b68610312610b62620151808a600101544203613a8890919063ffffffff16565b6109c490613aef565b90506000610cb7612710610b688685613a2f565b600654909150610cf4906001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d9128116911683613b4c565b610cfe8482613aef565b93505050610e33565b610d687f000000000000000000000000000000000000000000000000000000000003f480610d627f0000000000000000000000000000000000000000000000000000000000278d0086600101546139cc90919063ffffffff16565b906139cc565b421115610e33576000610dc4600a610b68610312610b6262015180610b68610dbd7f0000000000000000000000000000000000000000000000000000000000278d008c600101546139cc90919063ffffffff16565b4290613aef565b90506109c4811115610dd557506109c45b6000610de7612710610b688685613a2f565b600654909150610e24906001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d9128116911683613b4c565b610e2e8482613aef565b935050505b825415610e5d57610e53600354610b68610e4b611d8f565b865490613a2f565b6002840155610e65565b600060028401555b426003840155600483015415610e8457610e84338460040154866138e2565b7f0000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b856001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610eea57600080fd5b505af1158015610efe573d6000803e3d6000fd5b50610f389250506001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d9121690503384613b4c565b604080518381528383036020820152808201869052905133917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a250505050565b60105461010090046001600160a01b031681565b60035481565b6005546001600160a01b0316331480610fcd5750610fb8612165565b6001600160a01b0316336001600160a01b0316145b61100c576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6110146114d3565b61105c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b611064613b9e565b6040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600a546001600160a01b031681565b6005546001600160a01b0316331461113b576110b9336138dc565b156110f9576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b33321461113b576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b6111436114d3565b15611188576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60408051630441a3e760e41b81527f000000000000000000000000000000000000000000000000000000000000001c600482015260006024820181905291516001600160a01b037f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e169263441a3e70926044808201939182900301818387803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b5050505060006112366112d5565b90506000611255612710610b68600e5485613a2f90919063ffffffff16565b905061128b6001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d912163383613b4c565b611293613c41565b426004556040805182815260006020820152815133927fef3401590ce0f1c0559455e9e6b6072004724754ba19062fdbaf801748026cd7928290030190a25050565b60006113f77f0000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91216916370a08231916024808301926020929190829003018186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d60208110156113ef57600080fd5b505190613aef565b905090565b6040805163f456426f60e01b81527f000000000000000000000000000000000000000000000000000000000000001c6004820152306024820152905160009182916001600160a01b037f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e169163f456426f916044808301926020929190829003018186803b15801561148d57600080fd5b505afa1580156114a1573d6000803e3d6000fd5b505050506040513d60208110156114b757600080fd5b505190506114cd6114c66112d5565b82906139cc565b91505090565b600054600160a01b900460ff1690565b6005546001600160a01b031633148061151457506114ff612165565b6001600160a01b0316336001600160a01b0316145b611553576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b60648211156115935760405162461bcd60e51b81526004018080602001828103825260288152602001806143d66028913960400191505060405180910390fd5b60c88111156115a157600080fd5b600e91909155600f55565b6006546001600160a01b031681565b6115c36114d3565b15611608576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6008546001600160a01b031633146116515760405162461bcd60e51b815260040180806020018281038252602181526020018061441e6021913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040812090611672611d8f565b90506116a96001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91216333088613d7e565b60006003546000146116d5576116ce82610b6860035489613a2f90919063ffffffff16565b90506116d8565b50845b808355600183018490556003546116ef90826139cc565b600381905561170390610b68610e4b611d8f565b6002840155426003840155611716613c41565b604080518781526020810183905280820186905290516001600160a01b038716917fb5dfa7e0a8dca1c66af0a681b9d56acb2f9e73b3a4b79042be1673cea50eb93b919081900360600190a2505050505050565b7f0000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b8581565b6005546001600160a01b0316331461182b576117a9336138dc565b156117e9576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b33321461182b576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b6007546000906001600160a01b03838116911614156118c3576007546001600160a01b0316611898576040805162461bcd60e51b81526020600482015260146024820152736d6967726174696f6e206e6f742061637469766560601b604482015290519081900360640190fd5b506001600160a01b0382166000908152600160205260409020805484146118be57600080fd5b6119ab565b6001600160a01b03831633146118d857600080fd5b6009546001600160a01b03838116911614806119015750600a546001600160a01b038381169116145b806119195750600b546001600160a01b038381169116145b806119315750600c546001600160a01b038381169116145b806119495750600d546001600160a01b038381169116145b61199a576040805162461bcd60e51b815260206004820152601f60248201527f63616e206f6e6c7920686f7020696e746f207072652d73657420506f6f6c7300604482015290519081900360640190fd5b503360009081526001602052604090205b816001600160a01b031663ba0cb22b846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156119f857600080fd5b505afa158015611a0c573d6000803e3d6000fd5b505050506040513d6020811015611a2257600080fd5b505115611a76576040805162461bcd60e51b815260206004820152601e60248201527f63616e206f6e6c7920686f70206966206e6f206163746976655374616b650000604482015290519081900360640190fd5b60008411611ac1576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b8054841115611b17576040805162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015290519081900360640190fd5b6000611b2b600354610b6887610b62611d8f565b8254909150611b3a9086613aef565b8255600354611b499086613aef565b6003908155429083015560408051630441a3e760e41b81527f000000000000000000000000000000000000000000000000000000000000001c60048201526024810183905290516001600160a01b037f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e169163441a3e7091604480830192600092919082900301818387803b158015611be157600080fd5b505af1158015611bf5573d6000803e3d6000fd5b50508354159150611c25905057611c1b600354610b68611c13611d8f565b855490613a2f565b6002830155611c2d565b600060028301555b600482015415611c4657611c46848360040154876138e2565b7f0000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b856001600160a01b03166342966c68826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cac57600080fd5b505af1158015611cc0573d6000803e3d6000fd5b50505050826001600160a01b0316636207c278828685600101546040518463ffffffff1660e01b815260040180848152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611d2757600080fd5b505af1158015611d3b573d6000803e3d6000fd5b5050604080518481526020810189905281516001600160a01b03808a1695508816935033927fa558b87c94774fb5dfc50bace78eb8e8fbe078151e3928df569b72ba35f1a1dc928290030190a45050505050565b6040805163f456426f60e01b81527f000000000000000000000000000000000000000000000000000000000000001c6004820152306024820152905160009182916001600160a01b037f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e169163f456426f916044808301926020929190829003018186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b5051604080516370a0823160e01b815230600482015290519192506114cd9183916001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91216916370a0823191602480820192602092909190829003018186803b158015611ebc57600080fd5b505afa158015611ed0573d6000803e3d6000fd5b505050506040513d6020811015611ee657600080fd5b5051906139cc565b6000600354600014611f1957611f14600354610b68670de0b6b3a7640000610b62611d8f565b6113f7565b50670de0b6b3a764000090565b60105461010090046001600160a01b03163314611f8a576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c7920646973747269627574696f6e206164647265737300000000000000604482015290519081900360640190fd5b6010805460ff19166001179055565b6005546001600160a01b0316331480611fca5750611fb5612165565b6001600160a01b0316336001600160a01b0316145b612009576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6120116114d3565b15612056576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b61205e613dd8565b6040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6005546001600160a01b03163314612126576120a4336138dc565b156120e4576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214612126576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b3360009081526001602052604090205461213f90610a04565b565b7f000000000000000000000000000000000000000000000000000000000000001c81565b6000546001600160a01b031690565b600e5481565b6007546001600160a01b031681565b6121916114d3565b156121d6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b03163314612273576121f1336138dc565b15612231576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214612273576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b60105460ff166122995760105461010090046001600160a01b0316331461229957600080fd5b600082116122e3576040805162461bcd60e51b8152602060048201526012602482015271139bdd1a1a5b99c81d1bc819195c1bdcda5d60721b604482015290519081900360640190fd5b6001600160a01b038181166000908152600160205260409020600554909116331461235c5780541561235c576040805162461bcd60e51b815260206004820181905260248201527f5573657220616c72656164792068617320616e20616374697665207374616b65604482015290519081900360640190fd5b6000612366611d8f565b905061239d6001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91216333087613d7e565b60006003546000146123c9576123c282610b6860035488613a2f90919063ffffffff16565b90506123cc565b50835b82546123d890826139cc565b83554260018401556003546123ed90826139cc565b600381905561240190610b68610e4b611d8f565b60028401554260038401556004830154156124255761242533846004015483613957565b61242d613c41565b6040805186815260208101839052428183015290516001600160a01b0386169133917f190f4e47df17911728b041870d3cd75008c166bb9d8cde694aaa68f73ad415829181900360600190a35050505050565b3332146124c2576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b60105460ff166124e85760105461010090046001600160a01b031633146124e857600080fd5b3360009081526001602052604090208261253f576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b8054831115612595576040805162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015290519081900360640190fd5b6001600160a01b0382166000908152600160205260409020805415612601576040805162461bcd60e51b815260206004820152601960248201527f4d7573742068617665206e6f20616374697665207374616b6500000000000000604482015290519081900360640190fd5b815461260d9085613aef565b82558381556001808301549082015542600380830182905583015581541561264a57612640600354610b68611c13611d8f565b6002830155612652565b600060028301555b60048201541561266b5761266b338360040154866138e2565b612684600354610b6861267c611d8f565b845490613a2f565b60028201556040805185815290516001600160a01b0385169133917fa5c7720da5835a5d7b6c0afb0047711348a91e86c5edae9c61e40a746a0369589181900360200190a350505050565b6040805163f456426f60e01b81527f000000000000000000000000000000000000000000000000000000000000001c6004820152306024820152905160009182916001600160a01b037f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e169163f456426f916044808301926020929190829003018186803b15801561276057600080fd5b505afa158015612774573d6000803e3d6000fd5b505050506040513d602081101561278a57600080fd5b505190506127996114c66112d5565b905060006127b8612710610b68600e5485613a2f90919063ffffffff16565b9250505090565b600b546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000003f48081565b6005546001600160a01b0316331480612823575061280e612165565b6001600160a01b0316336001600160a01b0316145b612862576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b600d80546001600160a01b03199081166001600160a01b0388811691909117909255600c80548216878416179055600b80548216868416179055600a80548216858416179055600980549091169183169190911790556128c185613e61565b6128ca84613e61565b6128d383613e61565b6128dc82613e61565b6128e581613e61565b5050505050565b6128f46114d3565b15612939576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b031633146129d657612954336138dc565b15612994576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b3332146129d6576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b33600090815260016020819052604090912090810154612a16907f0000000000000000000000000000000000000000000000000000000000278d006139cc565b4211612a60576040805162461bcd60e51b81526020600482015260146024820152737374616b65206e6f7420796574206d617475726560601b604482015290519081900360640190fd5b6000612a78600354610b688460000154610b62611d8f565b6005546040805163ded6e1c960e01b81526001600160a01b0387811660048301529151939450600093612b099361271093610b689391169163ded6e1c991602480820192602092909190829003018186803b158015612ad657600080fd5b505afa158015612aea573d6000803e3d6000fd5b505050506040513d6020811015612b0057600080fd5b50518590613a2f565b90506001600160a01b038416301415612b9457600554604080516370d3372760e11b81523360048201526001600160a01b038781166024830152604482018590529151919092169163e1a66e4e91606480830192600092919082900301818387803b158015612b7757600080fd5b505af1158015612b8b573d6000803e3d6000fd5b50505050612cf5565b600554604080516370a0823160e01b81526001600160a01b039283166004820152905183927f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91216916370a08231916024808301926020929190829003018186803b158015612c0157600080fd5b505afa158015612c15573d6000803e3d6000fd5b505050506040513d6020811015612c2b57600080fd5b50511015612c74576040805162461bcd60e51b8152602060048201526011602482015270676f7665726e6f722069732062726f6b6560781b604482015290519081900360640190fd5b8254612c8190338661178e565b600554604080516370d3372760e11b81523360048201526001600160a01b038781166024830152604482018590529151919092169163e1a66e4e91606480830192600092919082900301818387803b158015612cdc57600080fd5b505af1158015612cf0573d6000803e3d6000fd5b505050505b50505050565b60009081526002602052604090205490565b60105460ff1681565b60045481565b612d246114d3565b15612d69576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005546001600160a01b03163314612e0657612d84336138dc565b15612dc4576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214612e06576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b60008111612e50576040805162461bcd60e51b8152602060048201526012602482015271139bdd1a1a5b99c81d1bc819195c1bdcda5d60721b604482015290519081900360640190fd5b6000612e5a611d8f565b9050612e916001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91216333085613d7e565b6000600354600014612ebd57612eb682610b6860035486613a2f90919063ffffffff16565b9050612ec0565b50815b3360009081526001602052604090208054612edb90836139cc565b8155426001820155600354612ef090836139cc565b6003819055612f0490610b6861267c611d8f565b6002820155426003820155600481015415612f2857612f2833826004015484613957565b612f30613c41565b60408051858152602081018490524281830152905133917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e919081900360600190a250505050565b6001600160a01b031660009081526001602052604090205490565b600c546001600160a01b031681565b6005546001600160a01b0316331480612fd35750612fbe612165565b6001600160a01b0316336001600160a01b0316145b613012576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6001600160a01b038216613066576040805162461bcd60e51b815260206004820152601660248201527543616e6e6f74206265207a65726f206164647265737360501b604482015290519081900360640190fd5b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b600f5481565b636192408c42116130e2576040805162461bcd60e51b815260206004820152600d60248201526c189aba34103737bb32b6b132b960991b604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6005546001600160a01b031633148061315d5750613148612165565b6001600160a01b0316336001600160a01b0316145b61319c576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b6131a581613e61565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314613264576131e2336138dc565b15613222576040805162461bcd60e51b81526020600482015260146024820152600080516020614390833981519152604482015290519081900360640190fd5b333214613264576040805162461bcd60e51b815260206004820152601a60248201526000805160206143fe833981519152604482015290519081900360640190fd5b61326c6114d3565b156132b1576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60408051630441a3e760e41b81527f000000000000000000000000000000000000000000000000000000000000001c600482015260006024820181905291516001600160a01b037f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e169263441a3e70926044808201939182900301818387803b15801561333d57600080fd5b505af1158015613351573d6000803e3d6000fd5b50505050600061335f6112d5565b9050600061337e612710610b68600f5485613a2f90919063ffffffff16565b9050600560009054906101000a90046001600160a01b03166001600160a01b031663e0e01a616040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133d057600080fd5b505af11580156133e4573d6000803e3d6000fd5b5061341e9250506001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d9121690503383613b4c565b613426613c41565b426004556040805182815260016020820152815133927fef3401590ce0f1c0559455e9e6b6072004724754ba19062fdbaf801748026cd7928290030190a25050565b6005546001600160a01b03163314806134995750613484612165565b6001600160a01b0316336001600160a01b0316145b6134d8576040805162461bcd60e51b815260206004820152600b60248201526a61646d696e3a207775743f60a81b604482015290519081900360640190fd5b7f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e6001600160a01b0316635312ea8e7f000000000000000000000000000000000000000000000000000000000000001c6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561355e57600080fd5b505af1158015612cf5573d6000803e3d6000fd5b7f0000000000000000000000000000000000000000000000000000000000278d0081565b60026020526000908152604090205481565b6007546001600160a01b0316613605576040805162461bcd60e51b815260206004820152601760248201527f6d6967726174696f6e206e6f7420616374697661746564000000000000000000604482015290519081900360640190fd5b6001600160a01b038082166000908152600160205260409020805460075491926109af9285911661178e565b6008546001600160a01b031681565b613648613ffb565b6001600160a01b0316613659612165565b6001600160a01b0316146136b4576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166136f95760405162461bcd60e51b815260040180806020018281038252602681526020018061436a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b7f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e81565b7f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91281565b801580613831575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561380357600080fd5b505afa158015613817573d6000803e3d6000fd5b505050506040513d602081101561382d57600080fd5b5051155b61386c5760405162461bcd60e51b81526004018080602001828103825260368152602001806144af6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526138be908490613fff565b505050565b60606138d284846000856140b0565b90505b9392505050565b3b151590565b6000828152600260205260409020546138fb9082613aef565b60008381526002602090815260409182902092909255805184815291820183905280516001600160a01b038616927f65b0f2fb4228364e2ac61c432687ae942c732095fc217265116bec6cc441683492908290030190a2505050565b60008281526002602052604090205461397090826139cc565b60008381526002602090815260409182902092909255805184815291820183905280516001600160a01b038616927fdb8549181d0331885cbb0e0d1e36bdd89e38e53990069f6f07a4090a15f74e5d92908290030190a2505050565b600082820183811015613a26576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082613a3e57506000613a29565b82820282848281613a4b57fe5b0414613a265760405162461bcd60e51b815260040180806020018281038252602181526020018061443f6021913960400191505060405180910390fd5b6000808211613ade576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613ae757fe5b049392505050565b600082821115613b46576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526138be908490613fff565b613ba66114d3565b613bee576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613c24613ffb565b604080516001600160a01b039092168252519081900360200190a1565b6000613c4b6112d5565b90508015613d7b57604080516340c10f1960e01b81523060048201526024810183905290516001600160a01b037f0000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b8516916340c10f1991604480830192600092919082900301818387803b158015613cc157600080fd5b505af1158015613cd5573d6000803e3d6000fd5b505050507f0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e6001600160a01b031663e2bbb1587f000000000000000000000000000000000000000000000000000000000000001c836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015613d6757600080fd5b505af11580156128e5573d6000803e3d6000fd5b50565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612cf5908590613fff565b613de06114d3565b15613e25576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613c24613ffb565b7f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d9126001600160a01b031663dd62ed3e30836040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613edf57600080fd5b505afa158015613ef3573d6000803e3d6000fd5b505050506040513d6020811015613f0957600080fd5b5051613f8657613f456001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d91216826000196137ab565b604080516001600160a01b038316815290517f77cb9a7aa1629c8fb5ac9bf9fbe709b7e9fd0c321a01f3f2e6cbc71157972b7f9181900360200190a1613d7b565b613fbc6001600160a01b037f0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d912168260001961420c565b604080516001600160a01b038316815290517f77cb9a7aa1629c8fb5ac9bf9fbe709b7e9fd0c321a01f3f2e6cbc71157972b7f9181900360200190a150565b3390565b6060614054826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138c39092919063ffffffff16565b8051909150156138be5780806020019051602081101561407357600080fd5b50516138be5760405162461bcd60e51b815260040180806020018281038252602a815260200180614485602a913960400191505060405180910390fd5b6060824710156140f15760405162461bcd60e51b81526004018080602001828103825260268152602001806143b06026913960400191505060405180910390fd5b6140fa856138dc565b61414b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061418a5780518252601f19909201916020918201910161416b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146141ec576040519150601f19603f3d011682016040523d82523d6000602084013e6141f1565b606091505b50915091506142018282866142c5565b979650505050505050565b600061427082856001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015611ebc57600080fd5b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052909150612cf5908590613fff565b606083156142d45750816138d5565b8251156142e45782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561432e578181015183820152602001614316565b50505050905090810190601f16801561435b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373636f6e7472616374206e6f7420616c6c6f776564000000000000000000000000416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c63616c6c4665652063616e6e6f74206265206d6f7265207468616e204d41585f43414c4c5f46454570726f787920636f6e7472616374206e6f7420616c6c6f7765640000000000006f6e6c7920747275737465642073656e64657273286f7468657220706f6f6c7329536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416c72656164792064656c65676174696e6720746f20746869732070726f706f73616c49445361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212204dfdf480a9dc1ed7ce419be1cb1ba8c3de04d1551e9e974af9583ec4673f8bfd64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d9120000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b850000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e0000000000000000000000007e58a67cd1448eaf468d296013fbdf405d7d6dbf0000000000000000000000007e58a67cd1448eaf468d296013fbdf405d7d6dbf000000000000000000000000000000000000000000000000000000000000001c
-----Decoded View---------------
Arg [0] : _token (address): 0x6d0c966c8A09e354Df9C48b446A474CE3343D912
Arg [1] : _dummyToken (address): 0x0bc03A20208edC7B5941b34585C90D6cF63A2B85
Arg [2] : _masterchef (address): 0x9BD741F077241b594EBdD745945B577d59C8768e
Arg [3] : _admin (address): 0x7E58a67Cd1448eAF468D296013FbDF405D7d6Dbf
Arg [4] : _treasury (address): 0x7E58a67Cd1448eAF468D296013FbDF405D7d6Dbf
Arg [5] : _poolID (uint256): 28
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000006d0c966c8a09e354df9c48b446a474ce3343d912
Arg [1] : 0000000000000000000000000bc03a20208edc7b5941b34585c90d6cf63a2b85
Arg [2] : 0000000000000000000000009bd741f077241b594ebdd745945b577d59c8768e
Arg [3] : 0000000000000000000000007e58a67cd1448eaf468d296013fbdf405d7d6dbf
Arg [4] : 0000000000000000000000007e58a67cd1448eaf468d296013fbdf405d7d6dbf
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001c
Deployed Bytecode Sourcemap
29267:26489:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52742:906;;;;;;;;;;;;;;;;-1:-1:-1;52742:906:0;;:::i;:::-;;30879:27;;;:::i;:::-;;;;-1:-1:-1;;;;;30879:27:0;;;;;;;;;;;;;;31015;;;:::i;30309:44::-;;;;;;;;;;;;;;;;-1:-1:-1;30309:44:0;-1:-1:-1;;;;;30309:44:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31078:42;;;:::i;:::-;;;;;;;;;;;;;;;;45377:2106;;;;;;;;;;;;;;;;-1:-1:-1;45377:2106:0;;:::i;31356:79::-;;;:::i;30504:26::-;;;:::i;43824:106::-;;;:::i;30913:27::-;;;:::i;38465:406::-;;;:::i;53813:137::-;;;:::i;44537:238::-;;;:::i;27060:86::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;40028:316;;;;;;;;;;;;;;;;-1:-1:-1;40028:316:0;;;;;;;:::i;30603:23::-;;;:::i;51638:1011::-;;;;;;;;;;;;;;;;-1:-1:-1;51638:1011:0;;;-1:-1:-1;;;;;51638:1011:0;;;;;;;;;;:::i;29989:34::-;;;:::i;49476:1901::-;;;;;;;;;;;;;;;;-1:-1:-1;49476:1901:0;;;-1:-1:-1;;;;;49476:1901:0;;;;;;;;;;;;:::i;54107:206::-;;;:::i;44848:154::-;;;:::i;43329:152::-;;;:::i;43603:103::-;;;:::i;38207:100::-;;;:::i;30128:31::-;;;:::i;2160:87::-;;;:::i;31135:27::-;;;:::i;30633:28::-;;;:::i;35477:1458::-;;;;;;;;;;;;;;;;-1:-1:-1;35477:1458:0;;;;;;-1:-1:-1;;;;;35477:1458:0;;:::i;47629:1364::-;;;;;;;;;;;;;;;;-1:-1:-1;47629:1364:0;;;;;;-1:-1:-1;;;;;47629:1364:0;;:::i;44079:307::-;;;:::i;30947:27::-;;;:::i;30253:45::-;;;:::i;40467:682::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40467:682:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37178:952::-;;;;;;;;;;;;;;;;-1:-1:-1;37178:952:0;-1:-1:-1;;;;;37178:952:0;;:::i;55031:134::-;;;;;;;;;;;;;;;;-1:-1:-1;55031:134:0;;:::i;31281:24::-;;;:::i;30537:32::-;;;:::i;34154:1070::-;;;;;;;;;;;;;;;;-1:-1:-1;34154:1070:0;;:::i;45072:157::-;;;;;;;;;;;;;;;;-1:-1:-1;45072:157:0;-1:-1:-1;;;;;45072:157:0;;:::i;30981:27::-;;;:::i;39693:205::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39693:205:0;;;;;;;;;;:::i;31178:36::-;;;:::i;2811:202::-;;;:::i;41664:143::-;;;;;;;;;;;;;;;;-1:-1:-1;41664:143:0;-1:-1:-1;;;;;41664:143:0;;:::i;39017:475::-;;;:::i;42290:119::-;;;:::i;30175:52::-;;;:::i;30360:56::-;;;;;;;;;;;;;;;;-1:-1:-1;30360:56:0;;:::i;42705:251::-;;;;;;;;;;;;;;;;-1:-1:-1;42705:251:0;-1:-1:-1;;;;;42705:251:0;;:::i;30693:67::-;;;:::i;3168:244::-;;;;;;;;;;;;;;;;-1:-1:-1;3168:244:0;-1:-1:-1;;;;;3168:244:0;;:::i;30576:20::-;;;:::i;30080:39::-;;;:::i;29933:29::-;;;:::i;52742:906::-;33566:5;;-1:-1:-1;;;;;33566:5:0;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;;;-1:-1:-1;;;33588:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;;;33668:10;33682:9;33668:23;33660:62;;;;;-1:-1:-1;;;33660:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;;;52852:10:::1;52819:21;52843:20:::0;;;:8:::1;:20;::::0;;;;52892:11;;52884:52:::1;;;::::0;;-1:-1:-1;;;52884:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;52983:4;:33;;;52969:10;:47;;52947:139;;;;-1:-1:-1::0;;;52947:139:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53102:33;::::0;::::1;::::0;:38;53099:542:::1;;53157:80;53178:10;53190:4;:33;;;53225:4;:11;;;53157:20;:80::i;:::-;53252:57;53273:10;53285;53297:4;:11;;;53252:20;:57::i;:::-;53324:33;::::0;::::1;:46:::0;;;53099:542:::1;;;53403:33;::::0;::::1;:46:::0;;;53538:11;;::::1;53500:27:::0;;;:15:::1;:27;::::0;;;;:33;:50:::1;::::0;:37:::1;:50::i;:::-;53464:27;::::0;;;:15:::1;:27;::::0;;;;;;;;:86;;;;53617:11;;53584:45;;;;;;;::::1;::::0;;;53593:10:::1;::::0;53584:45:::1;::::0;;;;;;;::::1;53099:542;33744:1;52742:906:::0;:::o;30879:27::-;;;-1:-1:-1;;;;;30879:27:0;;:::o;31015:::-;;;-1:-1:-1;;;;;31015:27:0;;:::o;30309:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31078:42::-;31117:3;31078:42;:::o;45377:2106::-;33566:5;;-1:-1:-1;;;;;33566:5:0;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;;;-1:-1:-1;;;33588:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;;;33668:10;33682:9;33668:23;33660:62;;;;;-1:-1:-1;;;33660:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;;;45475:10:::1;45442:21;45466:20:::0;;;:8:::1;:20;::::0;;;;45505:11;45497:43:::1;;;::::0;;-1:-1:-1;;;45497:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45497:43:0;;;;;;;;;;;;;::::1;;45570:11:::0;;45559:22;::::1;;45551:66;;;::::0;;-1:-1:-1;;;45551:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;45630:21;45654:43;45685:11;;45655:24;45671:7;45655:11;:9;:11::i;:::-;:15:::0;::::1;:24::i;:::-;45654:30:::0;::::1;:43::i;:::-;45722:11:::0;;45630:67;;-1:-1:-1;45722:24:0::1;::::0;45738:7;45722:15:::1;:24::i;:::-;45708:38:::0;;45771:11:::1;::::0;:24:::1;::::0;45787:7;45771:15:::1;:24::i;:::-;45757:11;:38:::0;45853:55:::1;::::0;;-1:-1:-1;;;45853:55:0;;45886:6:::1;45853:55;::::0;::::1;::::0;;;;;;;;;45829:13;;-1:-1:-1;;;;;45865:10:0::1;45853:32;::::0;::::1;::::0;:55;;;;;45808:18:::1;::::0;45853:55;;;;;;;;45808:18;45853:32;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;45951:22:0::1;::::0;::::1;::::0;:45:::1;::::0;-1:-1:-1;45978:17:0::1;45951:26;:45::i;:::-;45933:15;:63;45929:937;;;46013:19;46035:91;46053:72;46122:2;46053:64;46113:3;46054:53;46101:5;46073:4;:22;;;46055:15;:40;46054:46;;:53;;;;:::i;46053:72::-;46043:4;::::0;46035:17:::1;:91::i;:::-;46013:113:::0;-1:-1:-1;46141:26:0::1;46170:41;46205:5;46170:30;:13:::0;46013:113;46170:17:::1;:30::i;:41::-;46245:8;::::0;46141:70;;-1:-1:-1;46226:48:0::1;::::0;-1:-1:-1;;;;;46226:5:0::1;:18:::0;::::1;::::0;46245:8:::1;46141:70:::0;46226:18:::1;:48::i;:::-;46306:37;:13:::0;46324:18;46306:17:::1;:37::i;:::-;46290:53;;45929:937;;;;;46382:62;46432:11;46382:45;46409:17;46382:4;:22;;;:26;;:45;;;;:::i;:::-;:49:::0;::::1;:62::i;:::-;46364:15;:80;46361:505;;;46461:19;46483:94;46574:2;46483:86;46565:3;46483:77;46554:5;46483:66;46503:45;46530:17;46503:4;:22;;;:26;;:45;;;;:::i;:::-;46483:15;::::0;:19:::1;:66::i;:94::-;46461:116;;46609:4;46595:11;:18;46592:46;;;-1:-1:-1::0;46631:4:0::1;46592:46;46652:26;46681:41;46716:5;46681:30;:13:::0;46699:11;46681:17:::1;:30::i;:41::-;46756:8;::::0;46652:70;;-1:-1:-1;46737:48:0::1;::::0;-1:-1:-1;;;;;46737:5:0::1;:18:::0;::::1;::::0;46756:8:::1;46652:70:::0;46737:18:::1;:48::i;:::-;46817:37;:13:::0;46835:18;46817:17:::1;:37::i;:::-;46801:53;;46361:505;;;46882:11:::0;;:15;46878:183:::1;;46942:45;46975:11;;46942:28;46958:11;:9;:11::i;:::-;46942::::0;;;:15:::1;:28::i;:45::-;46914:25;::::0;::::1;:73:::0;46878:183:::1;;;47048:1;47020:25;::::0;::::1;:29:::0;46878:183:::1;47097:15;47071:23;::::0;::::1;:41:::0;47136:33:::1;::::0;::::1;::::0;:38;47133:146:::1;;47191:76;47212:10;47224:4;:33;;;47259:7;47191:20;:76::i;:::-;47298:10;-1:-1:-1::0;;;;;47291:23:0::1;;47315:10;47291:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;47338:45:0::1;::::0;-1:-1:-1;;;;;;;47338:5:0::1;:18;::::0;-1:-1:-1;47357:10:0::1;47369:13:::0;47338:18:::1;:45::i;:::-;47401:74;::::0;;;;;47438:26;;::::1;47401:74;::::0;::::1;::::0;;;;;;;;;47410:10:::1;::::0;47401:74:::1;::::0;;;;;;;;::::1;33744:1;;;45377:2106:::0;:::o;31356:79::-;;;;;;-1:-1:-1;;;;;31356:79:0;;:::o;30504:26::-;;;;:::o;43824:106::-;33347:5;;-1:-1:-1;;;;;33347:5:0;33333:10;:19;;:44;;;33370:7;:5;:7::i;:::-;-1:-1:-1;;;;;33356:21:0;:10;-1:-1:-1;;;;;33356:21:0;;33333:44;33325:68;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;;;;27663:8:::1;:6;:8::i;:::-;27655:41;;;::::0;;-1:-1:-1;;;27655:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27655:41:0;;;;;;;;;;;;;::::1;;43887:10:::2;:8;:10::i;:::-;43913:9;::::0;::::2;::::0;;;::::2;43824:106::o:0;30913:27::-;;;-1:-1:-1;;;;;30913:27:0;;:::o;38465:406::-;33566:5;;-1:-1:-1;;;;;33566:5:0;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;;;-1:-1:-1;;;33588:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;;;33668:10;33682:9;33668:23;33660:62;;;;;-1:-1:-1;;;33660:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;;;27386:8:::1;:6;:8::i;:::-;27385:9;27377:38;;;::::0;;-1:-1:-1;;;27377:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;::::1;;38530:43:::2;::::0;;-1:-1:-1;;;38530:43:0;;38563:6:::2;38530:43;::::0;::::2;::::0;38571:1:::2;38530:43:::0;;;;;;;;-1:-1:-1;;;;;38542:10:0::2;38530:32;::::0;::::2;::::0;:43;;;;;;;;;;;38571:1;38530:32;:43;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38587:11;38601;:9;:11::i;:::-;38587:25;;38626:22;38651:27;38672:5;38651:16;38659:7;;38651:3;:7;;:16;;;;:::i;:27::-;38626:52:::0;-1:-1:-1;38689:46:0::2;-1:-1:-1::0;;;;;38689:5:0::2;:18;38708:10;38626:52:::0;38689:18:::2;:46::i;:::-;38748:7;:5;:7::i;:::-;38788:15;38768:17;:35:::0;38821:42:::2;::::0;;;;;38857:5:::2;38821:42;::::0;::::2;::::0;;;38829:10:::2;::::0;38821:42:::2;::::0;;;;;;::::2;27426:1;;38465:406::o:0;53813:137::-;53855:7;53882:60;53917:10;-1:-1:-1;;;;;53917:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53917:24:0;53882:30;;;-1:-1:-1;;;53882:30:0;;53906:4;53882:30;;;;;;-1:-1:-1;;;;;53882:5:0;:15;;;;:30;;;;;53917:24;;53882:30;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53882:30:0;;:34;:60::i;:::-;53875:67;;53813:137;:::o;44537:238::-;44641:57;;;-1:-1:-1;;;44641:57:0;;44676:6;44641:57;;;;44692:4;44641:57;;;;;;44604:7;;;;-1:-1:-1;;;;;44653:10:0;44641:34;;;;:57;;;;;;;;;;;;;;:34;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44641:57:0;;-1:-1:-1;44718:23:0;44729:11;:9;:11::i;:::-;44718:6;;:10;:23::i;:::-;44709:32;-1:-1:-1;;44537:238:0;:::o;27060:86::-;27107:4;27131:7;-1:-1:-1;;;27131:7:0;;;;;27060:86::o;40028:316::-;33347:5;;-1:-1:-1;;;;;33347:5:0;33333:10;:19;;:44;;;33370:7;:5;:7::i;:::-;-1:-1:-1;;;;;33356:21:0;:10;-1:-1:-1;;;;;33356:21:0;;33333:44;33325:68;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;;;;31117:3:::1;40134:8;:24;;40126:77;;;;-1:-1:-1::0;;;40126:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40243:16:::0;40222:37;::::1;;40214:46;;;::::0;::::1;;40271:7;:18:::0;;;;40300:16:::1;:36:::0;40028:316::o;30603:23::-;;;-1:-1:-1;;;;;30603:23:0;;:::o;51638:1011::-;27386:8;:6;:8::i;:::-;27385:9;27377:38;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;;;51793:7:::1;::::0;-1:-1:-1;;;;;51793:7:0::1;51779:10;:21;51771:67;;;;-1:-1:-1::0;;;51771:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;51883:27:0;::::1;51859:21;51883:27:::0;;;:8:::1;:27;::::0;;;;;51946:11:::1;:9;:11::i;:::-;51931:26:::0;-1:-1:-1;51968:58:0::1;-1:-1:-1::0;;;;;51968:5:0::1;:22;51991:10;52011:4;52018:7:::0;51968:22:::1;:58::i;:::-;52037:21;52077:11;;52092:1;52077:16;52073:157;;52126:36;52157:4;52127:24;52139:11;;52127:7;:11;;:24;;;;:::i;52126:36::-;52110:52;;52073:157;;;-1:-1:-1::0;52211:7:0;52073:157:::1;52242:27:::0;;;52280:22:::1;::::0;::::1;:50:::0;;;52355:11:::1;::::0;:30:::1;::::0;52256:13;52355:15:::1;:30::i;:::-;52341:11;:44:::0;;;52426:45:::1;::::0;:28:::1;52442:11;:9;:11::i;52426:45::-;52398:25;::::0;::::1;:73:::0;52508:15:::1;52482:23;::::0;::::1;:41:::0;52536:7:::1;:5;:7::i;:::-;52561:80;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;52561:80:0;::::1;::::0;::::1;::::0;;;;;;;;::::1;27426:1;;;51638:1011:::0;;;:::o;29989:34::-;;;:::o;49476:1901::-;33566:5;;-1:-1:-1;;;;;33566:5:0;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;;;-1:-1:-1;;;33588:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;;;33668:10;33682:9;33668:23;33660:62;;;;;-1:-1:-1;;;33660:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;;;49647:13:::1;::::0;49596:21:::1;::::0;-1:-1:-1;;;;;49631:29:0;;::::1;49647:13:::0;::::1;49631:29;49628:605;;;49685:13;::::0;-1:-1:-1;;;;;49685:13:0::1;49677:60;;;::::0;;-1:-1:-1;;;49677:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;49677:60:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;;49759:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;49813:11;;49802:22;::::1;49794:31;;;::::0;::::1;;49628:605;;;-1:-1:-1::0;;;;;49866:24:0;::::1;49880:10;49866:24;49858:33;;;::::0;::::1;;49949:12;::::0;-1:-1:-1;;;;;49933:28:0;;::::1;49949:12:::0;::::1;49933:28;::::0;:60:::1;;-1:-1:-1::0;49981:12:0::1;::::0;-1:-1:-1;;;;;49965:28:0;;::::1;49981:12:::0;::::1;49965:28;49933:60;:92;;;-1:-1:-1::0;50013:12:0::1;::::0;-1:-1:-1;;;;;49997:28:0;;::::1;50013:12:::0;::::1;49997:28;49933:92;:142;;;-1:-1:-1::0;50063:12:0::1;::::0;-1:-1:-1;;;;;50047:28:0;;::::1;50063:12:::0;::::1;50047:28;49933:142;:174;;;-1:-1:-1::0;50095:12:0::1;::::0;-1:-1:-1;;;;;50079:28:0;;::::1;50095:12:::0;::::1;50079:28;49933:174;49906:273;;;::::0;;-1:-1:-1;;;49906:273:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;50210:10:0::1;50201:20;::::0;;;:8:::1;:20;::::0;;;;49628:605:::1;50259:12;-1:-1:-1::0;;;;;50251:35:0::1;;50287:10;50251:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;50251:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;50251:47:0;:52;50243:95:::1;;;::::0;;-1:-1:-1;;;50243:95:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;50367:1;50357:7;:11;50349:43;;;::::0;;-1:-1:-1;;;50349:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50349:43:0;;;;;;;;;;;;;::::1;;50422:11:::0;;50411:22;::::1;;50403:66;;;::::0;;-1:-1:-1;;;50403:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;50482:21;50506:43;50537:11;;50507:24;50523:7;50507:11;:9;:11::i;50506:43::-;50574:11:::0;;50482:67;;-1:-1:-1;50574:24:0::1;::::0;50590:7;50574:15:::1;:24::i;:::-;50560:38:::0;;50623:11:::1;::::0;:24:::1;::::0;50639:7;50623:15:::1;:24::i;:::-;50609:11;:38:::0;;;50684:15:::1;50658:23:::0;;::::1;:41:::0;50712:55:::1;::::0;;-1:-1:-1;;;50712:55:0;;50745:6:::1;50712:55;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;50724:10:0::1;50712:32;::::0;::::1;::::0;:55;;;;;-1:-1:-1;;50712:55:0;;;;;;;-1:-1:-1;50712:32:0;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;50784:11:0;;:15;;-1:-1:-1;50780:183:0::1;::::0;-1:-1:-1;50780:183:0::1;50844:45;50877:11;;50844:28;50860:11;:9;:11::i;:::-;50844::::0;;;:15:::1;:28::i;:45::-;50816:25;::::0;::::1;:73:::0;50780:183:::1;;;50950:1;50922:25;::::0;::::1;:29:::0;50780:183:::1;50986:33;::::0;::::1;::::0;:38;50983:146:::1;;51041:76;51062:10;51074:4;:33;;;51109:7;51041:20;:76::i;:::-;51148:10;-1:-1:-1::0;;;;;51141:23:0::1;;51165:13;51141:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51199:12;-1:-1:-1::0;;;;;51191:32:0::1;;51224:13;51239:10;51251:4;:22;;;51191:83;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;51191:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;51300:69:0::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;51300:69:0;;::::1;::::0;-1:-1:-1;51300:69:0;::::1;::::0;-1:-1:-1;51308:10:0::1;::::0;51300:69:::1;::::0;;;;;;::::1;33744:1;;49476:1901:::0;;;:::o;54107:206::-;54186:57;;;-1:-1:-1;;;54186:57:0;;54221:6;54186:57;;;;54237:4;54186:57;;;;;;54149:7;;;;-1:-1:-1;;;;;54198:10:0;54186:34;;;;:57;;;;;;;;;;;;;;:34;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54186:57:0;54262:30;;;-1:-1:-1;;;54262:30:0;;54286:4;54262:30;;;;;;54186:57;;-1:-1:-1;54262:42:0;;54186:57;;-1:-1:-1;;;;;54262:5:0;:15;;;;:30;;;;;54186:57;;54262:30;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54262:30:0;;:34;:42::i;44848:154::-;44903:7;44930:11;;44945:1;44930:16;:64;;44956:38;44982:11;;44956:21;44972:4;44956:11;:9;:11::i;:38::-;44930:64;;;-1:-1:-1;44949:4:0;;44848:154::o;43329:152::-;43394:19;;;;;-1:-1:-1;;;;;43394:19:0;43380:10;:33;43372:71;;;;;-1:-1:-1;;;43372:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43454:12;:19;;-1:-1:-1;;43454:19:0;43469:4;43454:19;;;43329:152::o;43603:103::-;33347:5;;-1:-1:-1;;;;;33347:5:0;33333:10;:19;;:44;;;33370:7;:5;:7::i;:::-;-1:-1:-1;;;;;33356:21:0;:10;-1:-1:-1;;;;;33356:21:0;;33333:44;33325:68;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;;;;27386:8:::1;:6;:8::i;:::-;27385:9;27377:38;;;::::0;;-1:-1:-1;;;27377:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;::::1;;43667:8:::2;:6;:8::i;:::-;43691:7;::::0;::::2;::::0;;;::::2;43603:103::o:0;38207:100::-;33566:5;;-1:-1:-1;;;;;33566:5:0;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;;;-1:-1:-1;;;33588:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;;;33668:10;33682:9;33668:23;33660:62;;;;;-1:-1:-1;;;33660:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;;;38280:10:::1;38271:20;::::0;;;:8:::1;:20;::::0;;;;:27;38262:37:::1;::::0;:8:::1;:37::i;:::-;38207:100::o:0;30128:31::-;;;:::o;2160:87::-;2206:7;2233:6;-1:-1:-1;;;;;2233:6:0;2160:87;:::o;31135:27::-;;;;:::o;30633:28::-;;;-1:-1:-1;;;;;30633:28:0;;:::o;35477:1458::-;27386:8;:6;:8::i;:::-;27385:9;27377:38;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;;;33566:5:::1;::::0;-1:-1:-1;;;;;33566:5:0::1;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;::::0;;-1:-1:-1;;;33588:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;::::1;;33668:10;33682:9;33668:23;33660:62;;;::::0;;-1:-1:-1;;;33660:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;::::1;;35592:12:::2;::::0;::::2;;35588:87;;35643:19;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;35643:19:0::2;35629:10;:33;35621:42;;;::::0;::::2;;35703:1;35693:7;:11;35685:42;;;::::0;;-1:-1:-1;;;35685:42:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;35685:42:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;35772:27:0;;::::2;35748:21;35772:27:::0;;;:8:::2;:27;::::0;;;;35827:5:::2;::::0;35772:27;;35827:5:::2;35813:10;:19;35810:201;;35857:11:::0;;:16;35849:61:::2;;;::::0;;-1:-1:-1;;;35849:61:0;;::::2;;::::0;::::2;::::0;;;;;;;::::2;::::0;;;;;;;;;;;;;::::2;;36031:12;36046:11;:9;:11::i;:::-;36031:26:::0;-1:-1:-1;36068:58:0::2;-1:-1:-1::0;;;;;36068:5:0::2;:22;36091:10;36111:4;36118:7:::0;36068:22:::2;:58::i;:::-;36137:21;36177:11;;36192:1;36177:16;36173:157;;36226:36;36257:4;36227:24;36239:11;;36227:7;:11;;:24;;;;:::i;36226:36::-;36210:52;;36173:157;;;-1:-1:-1::0;36311:7:0;36173:157:::2;36356:11:::0;;:30:::2;::::0;36372:13;36356:15:::2;:30::i;:::-;36342:44:::0;;36422:15:::2;36397:22;::::0;::::2;:40:::0;36464:11:::2;::::0;:30:::2;::::0;36480:13;36464:15:::2;:30::i;:::-;36450:11;:44:::0;;;36535:45:::2;::::0;:28:::2;36551:11;:9;:11::i;36535:45::-;36507:25;::::0;::::2;:73:::0;36617:15:::2;36591:23;::::0;::::2;:41:::0;36658:33:::2;::::0;::::2;::::0;:38;36655:152:::2;;36713:82;36734:10;36746:4;:33;;;36781:13;36713:20;:82::i;:::-;36819:7;:5;:7::i;:::-;36844:83;::::0;;;;;::::2;::::0;::::2;::::0;;;36911:15:::2;36844:83:::0;;;;;;-1:-1:-1;;;;;36844:83:0;::::2;::::0;36856:10:::2;::::0;36844:83:::2;::::0;;;;;;;::::2;33744:1;;;35477:1458:::0;;:::o;47629:1364::-;33876:10;33890:9;33876:23;33868:62;;;;;-1:-1:-1;;;33868:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33868:62:0;;;;;;;;;;;;;;;47742:12:::1;::::0;::::1;;47738:87;;47793:19;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;47793:19:0::1;47779:10;:33;47771:42;;;::::0;::::1;;47868:10;47835:21;47859:20:::0;;;:8:::1;:20;::::0;;;;47898:11;47890:43:::1;;;::::0;;-1:-1:-1;;;47890:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47890:43:0;;;;;;;;;;;;;::::1;;47963:11:::0;;47952:22;::::1;;47944:66;;;::::0;;-1:-1:-1;;;47944:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;48060:27:0;::::1;48031:26;48060:27:::0;;;:8:::1;:27;::::0;;;;48106:16;;:21;48098:59:::1;;;::::0;;-1:-1:-1;;;48098:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;48184:11:::0;;:24:::1;::::0;48200:7;48184:15:::1;:24::i;:::-;48170:38:::0;;48229:26;;;48296:22:::1;::::0;;::::1;::::0;48266:27;;::::1;:52:::0;48360:15:::1;48329:28;::::0;;::::1;:46:::0;;;48396:23;::::1;:41:::0;48456:11;;:15;48452:183:::1;;48516:45;48549:11;;48516:28;48532:11;:9;:11::i;48516:45::-;48488:25;::::0;::::1;:73:::0;48452:183:::1;;;48622:1;48594:25;::::0;::::1;:29:::0;48452:183:::1;48658:33;::::0;::::1;::::0;:38;48655:146:::1;;48713:76;48734:10;48746:4;:33;;;48781:7;48713:20;:76::i;:::-;48854:50;48892:11;;48854:33;48875:11;:9;:11::i;:::-;48854:16:::0;;;:20:::1;:33::i;:50::-;48821:30;::::0;::::1;:83:::0;48932:53:::1;::::0;;;;;;;-1:-1:-1;;;;;48932:53:0;::::1;::::0;48946:10:::1;::::0;48932:53:::1;::::0;;;;::::1;::::0;;::::1;33941:1;;47629:1364:::0;;:::o;44079:307::-;44178:57;;;-1:-1:-1;;;44178:57:0;;44213:6;44178:57;;;;44229:4;44178:57;;;;;;44141:7;;;;-1:-1:-1;;;;;44190:10:0;44178:34;;;;:57;;;;;;;;;;;;;;:34;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44178:57:0;;-1:-1:-1;44255:23:0;44266:11;:9;:11::i;44255:23::-;44246:32;;44289:22;44314:30;44338:5;44314:19;44325:7;;44314:6;:10;;:19;;;;:::i;:30::-;44289:55;-1:-1:-1;;;44079:307:0;:::o;30947:27::-;;;-1:-1:-1;;;;;30947:27:0;;:::o;30253:45::-;;;:::o;40467:682::-;33347:5;;-1:-1:-1;;;;;33347:5:0;33333:10;:19;;:44;;;33370:7;:5;:7::i;:::-;-1:-1:-1;;;;;33356:21:0;:10;-1:-1:-1;;;;;33356:21:0;;33333:44;33325:68;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;;;;40605:12:::1;:21:::0;;-1:-1:-1;;;;;;40605:21:0;;::::1;-1:-1:-1::0;;;;;40605:21:0;;::::1;::::0;;;::::1;::::0;;;40637:12:::1;:21:::0;;;::::1;::::0;;::::1;;::::0;;40669:12:::1;:21:::0;;;::::1;::::0;;::::1;;::::0;;40701:12:::1;:21:::0;;;::::1;::::0;;::::1;;::::0;;40733:12:::1;:21:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;40992::::1;40605::::0;40992:13:::1;:21::i;:::-;41024;41038:6;41024:13;:21::i;:::-;41056;41070:6;41056:13;:21::i;:::-;41088;41102:6;41088:13;:21::i;:::-;41120;41134:6;41120:13;:21::i;:::-;40467:682:::0;;;;;:::o;37178:952::-;27386:8;:6;:8::i;:::-;27385:9;27377:38;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;;;33566:5:::1;::::0;-1:-1:-1;;;;;33566:5:0::1;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;::::0;;-1:-1:-1;;;33588:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;::::1;;33668:10;33682:9;33668:23;33660:62;;;::::0;;-1:-1:-1;;;33660:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;::::1;;37299:10:::2;37266:21;37290:20:::0;;;:8:::2;:20;::::0;;;;;;;37347:22;;::::2;::::0;:45:::2;::::0;37374:17:::2;37347:26;:45::i;:::-;37329:15;:63;37321:96;;;::::0;;-1:-1:-1;;;37321:96:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;37321:96:0;;;;;;;;;;;;;::::2;;37438:21;37462:47;37497:11;;37463:28;37479:4;:11;;;37463;:9;:11::i;37462:47::-;37609:5;::::0;37597:42:::2;::::0;;-1:-1:-1;;;37597:42:0;;-1:-1:-1;;;;;37597:42:0;;::::2;;::::0;::::2;::::0;;;37438:71;;-1:-1:-1;37563:13:0::2;::::0;37579:72:::2;::::0;37645:5:::2;::::0;37579:61:::2;::::0;37609:5;::::2;::::0;37597:31:::2;::::0;:42;;;;;::::2;::::0;;;;;;;;;37609:5;37597:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;37597:42:0;37579:13;;:17:::2;:61::i;:72::-;37563:88:::0;-1:-1:-1;;;;;;37675:26:0;::::2;37696:4;37675:26;37672:451;;;37730:5;::::0;37718:67:::2;::::0;;-1:-1:-1;;;37718:67:0;;37756:10:::2;37718:67;::::0;::::2;::::0;-1:-1:-1;;;;;37718:67:0;;::::2;::::0;;;;;;;;;;;;37730:5;;;::::2;::::0;37718:37:::2;::::0;:67;;;;;37730:5:::2;::::0;37718:67;;;;;;;37730:5;;37718:67;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;37672:451;;;37889:5;::::0;37865:30:::2;::::0;;-1:-1:-1;;;37865:30:0;;-1:-1:-1;;;;;37889:5:0;;::::2;37865:30;::::0;::::2;::::0;;;37899:5;;37872::::2;37865:23;::::0;::::2;::::0;:30;;;;;::::2;::::0;;;;;;;;:23;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;37865:30:0;:39:::2;;37857:69;;;::::0;;-1:-1:-1;;;37857:69:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;37857:69:0;;;;;;;;;;;;;::::2;;37963:11:::0;;37941:57:::2;::::0;37976:10:::2;37988:9:::0;37941:21:::2;:57::i;:::-;38056:5;::::0;38044:67:::2;::::0;;-1:-1:-1;;;38044:67:0;;38082:10:::2;38044:67;::::0;::::2;::::0;-1:-1:-1;;;;;38044:67:0;;::::2;::::0;;;;;;;;;;;;38056:5;;;::::2;::::0;38044:37:::2;::::0;:67;;;;;38056:5:::2;::::0;38044:67;;;;;;;38056:5;;38044:67;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;37672:451;33744:1;;;37178:952:::0;:::o;55031:134::-;55097:7;55124:27;;;:15;:27;;;;;:33;;55031:134::o;31281:24::-;;;;;;:::o;30537:32::-;;;;:::o;34154:1070::-;27386:8;:6;:8::i;:::-;27385:9;27377:38;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;;;33566:5:::1;::::0;-1:-1:-1;;;;;33566:5:0::1;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;::::0;;-1:-1:-1;;;33588:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;::::1;;33668:10;33682:9;33668:23;33660:62;;;::::0;;-1:-1:-1;;;33660:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;::::1;;34252:1:::2;34242:7;:11;34234:42;;;::::0;;-1:-1:-1;;;34234:42:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;34234:42:0;;;;;;;;;;;;;::::2;;34289:12;34304:11;:9;:11::i;:::-;34289:26:::0;-1:-1:-1;34326:58:0::2;-1:-1:-1::0;;;;;34326:5:0::2;:22;34349:10;34369:4;34376:7:::0;34326:22:::2;:58::i;:::-;34395:21;34435:11;;34450:1;34435:16;34431:157;;34484:36;34515:4;34485:24;34497:11;;34485:7;:11;;:24;;;;:::i;34484:36::-;34468:52;;34431:157;;;-1:-1:-1::0;34569:7:0;34431:157:::2;34631:10;34598:21;34622:20:::0;;;:8:::2;:20;::::0;;;;34669:11;;:30:::2;::::0;34685:13;34669:15:::2;:30::i;:::-;34655:44:::0;;34735:15:::2;34710:22;::::0;::::2;:40:::0;34777:11:::2;::::0;:30:::2;::::0;34793:13;34777:15:::2;:30::i;:::-;34763:11;:44:::0;;;34848:45:::2;::::0;:28:::2;34864:11;:9;:11::i;34848:45::-;34820:25;::::0;::::2;:73:::0;34930:15:::2;34904:23;::::0;::::2;:41:::0;34969:33:::2;::::0;::::2;::::0;:38;34966:152:::2;;35024:82;35045:10;35057:4;:33;;;35092:13;35024:20;:82::i;:::-;35130:7;:5;:7::i;:::-;35156:60;::::0;;;;;::::2;::::0;::::2;::::0;;;35200:15:::2;35156:60:::0;;;;;;35164:10:::2;::::0;35156:60:::2;::::0;;;;;;;;::::2;33744:1;;;34154:1070:::0;:::o;45072:157::-;-1:-1:-1;;;;;45176:16:0;45132:7;45176:16;;;:8;:16;;;;;45210:11;;45072:157::o;30981:27::-;;;-1:-1:-1;;;;;30981:27:0;;:::o;39693:205::-;33347:5;;-1:-1:-1;;;;;33347:5:0;33333:10;:19;;:44;;;33370:7;:5;:7::i;:::-;-1:-1:-1;;;;;33356:21:0;:10;-1:-1:-1;;;;;33356:21:0;;33333:44;33325:68;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39787:20:0;::::1;39779:55;;;::::0;;-1:-1:-1;;;39779:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39779:55:0;;;;;;;;;;;;;::::1;;39845:5;:14:::0;;-1:-1:-1;;;;;39845:14:0;;::::1;-1:-1:-1::0;;;;;;39845:14:0;;::::1;;::::0;;;39870:8:::1;:20:::0;;;;;::::1;::::0;::::1;;::::0;;39693:205::o;31178:36::-;;;;:::o;2811:202::-;2891:10;2873:15;:28;2865:54;;;;;-1:-1:-1;;;2865:54:0;;;;;;;;;;;;-1:-1:-1;;;2865:54:0;;;;;;;;;;;;;;;2972:1;2956:6;;2935:40;;-1:-1:-1;;;;;2956:6:0;;;;2935:40;;2972:1;;2935:40;3003:1;2986:19;;-1:-1:-1;;;;;;2986:19:0;;;2811:202::o;41664:143::-;33347:5;;-1:-1:-1;;;;;33347:5:0;33333:10;:19;;:44;;;33370:7;:5;:7::i;:::-;-1:-1:-1;;;;;33356:21:0;:10;-1:-1:-1;;;;;33356:21:0;;33333:44;33325:68;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;;;;41741:23:::1;41755:8;41741:13;:23::i;:::-;41775:13;:24:::0;;-1:-1:-1;;;;;;41775:24:0::1;-1:-1:-1::0;;;;;41775:24:0;;;::::1;::::0;;;::::1;::::0;;41664:143::o;39017:475::-;33566:5;;-1:-1:-1;;;;;33566:5:0;33552:10;:19;33549:185;;33597:23;33609:10;33597:11;:23::i;:::-;33596:24;33588:57;;;;;-1:-1:-1;;;33588:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33588:57:0;;;;;;;;;;;;;;;33668:10;33682:9;33668:23;33660:62;;;;;-1:-1:-1;;;33660:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33660:62:0;;;;;;;;;;;;;;;27386:8:::1;:6;:8::i;:::-;27385:9;27377:38;;;::::0;;-1:-1:-1;;;27377:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;::::1;;39095:43:::2;::::0;;-1:-1:-1;;;39095:43:0;;39128:6:::2;39095:43;::::0;::::2;::::0;39136:1:::2;39095:43:::0;;;;;;;;-1:-1:-1;;;;;39107:10:0::2;39095:32;::::0;::::2;::::0;:43;;;;;;;;;;;39136:1;39095:32;:43;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39151:11;39165;:9;:11::i;:::-;39151:25;;39190:22;39215:36;39245:5;39215:25;39223:16;;39215:3;:7;;:25;;;;:::i;:36::-;39190:61;;39274:5;;;;;;;;;-1:-1:-1::0;;;;;39274:5:0::2;-1:-1:-1::0;;;;;39262:33:0::2;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;39311:46:0::2;::::0;-1:-1:-1;;;;;;;39311:5:0::2;:18;::::0;-1:-1:-1;39330:10:0::2;39342:14:::0;39311:18:::2;:46::i;:::-;39370:7;:5;:7::i;:::-;39410:15;39390:17;:35:::0;39443:41:::2;::::0;;;;;39479:4:::2;39443:41;::::0;::::2;::::0;;;39451:10:::2;::::0;39443:41:::2;::::0;;;;;;::::2;27426:1;;39017:475::o:0;42290:119::-;33347:5;;-1:-1:-1;;;;;33347:5:0;33333:10;:19;;:44;;;33370:7;:5;:7::i;:::-;-1:-1:-1;;;;;33356:21:0;:10;-1:-1:-1;;;;;33356:21:0;;33333:44;33325:68;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;-1:-1:-1;;;33325:68:0;;;;;;;;;;;;;;;42364:10:::1;-1:-1:-1::0;;;;;42352:41:0::1;;42394:6;42352:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;30175:52:::0;;;:::o;30360:56::-;;;;;;;;;;;;;:::o;42705:251::-;42772:13;;-1:-1:-1;;;;;42772:13:0;42764:63;;;;;-1:-1:-1;;;42764:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42862:17:0;;;42838:21;42862:17;;;:8;:17;;;;;42912:11;;42934:13;;42862:17;;42890:58;;42871:7;;42934:13;42890:21;:58::i;30693:67::-;;;-1:-1:-1;;;;;30693:67:0;;:::o;3168:244::-;2391:12;:10;:12::i;:::-;-1:-1:-1;;;;;2380:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2380:23:0;;2372:68;;;;;-1:-1:-1;;;2372:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3257:22:0;::::1;3249:73;;;;-1:-1:-1::0;;;3249:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3359:6;::::0;;3338:38:::1;::::0;-1:-1:-1;;;;;3338:38:0;;::::1;::::0;3359:6;::::1;::::0;3338:38:::1;::::0;::::1;3387:6;:17:::0;;-1:-1:-1;;;;;;3387:17:0::1;-1:-1:-1::0;;;;;3387:17:0;;;::::1;::::0;;;::::1;::::0;;3168:244::o;30576:20::-;;;-1:-1:-1;;;;;30576:20:0;;:::o;30080:39::-;;;:::o;29933:29::-;;;:::o;23453:670::-;23871:10;;;23870:62;;-1:-1:-1;23887:39:0;;;-1:-1:-1;;;23887:39:0;;23911:4;23887:39;;;;-1:-1:-1;;;;;23887:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23887:39:0;:44;23870:62;23848:166;;;;-1:-1:-1;;;23848:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24052:62;;;-1:-1:-1;;;;;24052:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24052:62:0;-1:-1:-1;;;24052:62:0;;;24025:90;;24045:5;;24025:19;:90::i;:::-;23453:670;;;:::o;17543:229::-;17680:12;17712:52;17734:6;17742:4;17748:1;17751:12;17712:21;:52::i;:::-;17705:59;;17543:229;;;;;;:::o;54764:191::-;54894:17;54939:8;;;54764:191::o;55506:247::-;55640:27;;;;:15;:27;;;;;:33;:43;;55678:4;55640:37;:43::i;:::-;55604:27;;;;:15;:27;;;;;;;;;:79;;;;55709:36;;;;;;;;;;;;;-1:-1:-1;;;;;55709:36:0;;;;;;;;;;;;55506:247;;;:::o;55256:244::-;55390:27;;;;:15;:27;;;;;:33;:43;;55428:4;55390:37;:43::i;:::-;55354:27;;;;:15;:27;;;;;;;;;:79;;;;55459:33;;;;;;;;;;;;;-1:-1:-1;;;;;55459:33:0;;;;;;;;;;;;55256:244;;;:::o;6179:179::-;6237:7;6269:5;;;6293:6;;;;6285:46;;;;;-1:-1:-1;;;6285:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6349:1;-1:-1:-1;6179:179:0;;;;;:::o;7058:220::-;7116:7;7140:6;7136:20;;-1:-1:-1;7155:1:0;7148:8;;7136:20;7179:5;;;7183:1;7179;:5;:1;7203:5;;;;;:10;7195:56;;;;-1:-1:-1;;;7195:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7756:153;7814:7;7846:1;7842;:5;7834:44;;;;;-1:-1:-1;;;7834:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7900:1;7896;:5;;;;;;;7756:153;-1:-1:-1;;;7756:153:0:o;6641:158::-;6699:7;6732:1;6727;:6;;6719:49;;;;;-1:-1:-1;;;6719:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6786:5:0;;;6641:158::o;22717:211::-;22861:58;;;-1:-1:-1;;;;;22861:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22861:58:0;-1:-1:-1;;;22861:58:0;;;22834:86;;22854:5;;22834:19;:86::i;28119:120::-;27663:8;:6;:8::i;:::-;27655:41;;;;;-1:-1:-1;;;27655:41:0;;;;;;;;;;;;-1:-1:-1;;;27655:41:0;;;;;;;;;;;;;;;28188:5:::1;28178:15:::0;;-1:-1:-1;;;;28178:15:0::1;::::0;;28209:22:::1;28218:12;:10;:12::i;:::-;28209:22;::::0;;-1:-1:-1;;;;;28209:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;28119:120::o:0;54411:224::-;54448:11;54462;:9;:11::i;:::-;54448:25;-1:-1:-1;54488:7:0;;54484:144;;54512:43;;;-1:-1:-1;;;54512:43:0;;54544:4;54512:43;;;;;;;;;;;;-1:-1:-1;;;;;54519:10:0;54512:23;;;;:43;;;;;-1:-1:-1;;54512:43:0;;;;;;;-1:-1:-1;54512:23:0;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54583:10;-1:-1:-1;;;;;54571:31:0;;54603:6;54611:3;54571:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54484:144;54411:224;:::o;22936:248::-;23107:68;;;-1:-1:-1;;;;;23107:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23107:68:0;-1:-1:-1;;;23107:68:0;;;23080:96;;23100:5;;23080:19;:96::i;27860:118::-;27386:8;:6;:8::i;:::-;27385:9;27377:38;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;-1:-1:-1;;;27377:38:0;;;;;;;;;;;;;;;27920:7:::1;:14:::0;;-1:-1:-1;;;;27920:14:0::1;-1:-1:-1::0;;;27920:14:0::1;::::0;;27950:20:::1;27957:12;:10;:12::i;41161:417::-:0;41239:5;-1:-1:-1;;;;;41232:23:0;;41264:4;41271:16;41232:56;;;;;;;;;;;;;-1:-1:-1;;;;;41232:56:0;;;;;;-1:-1:-1;;;;;41232:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41232:56:0;41229:342;;41310:56;-1:-1:-1;;;;;41317:5:0;41310:25;41336:16;-1:-1:-1;;41310:25:0;:56::i;:::-;41386:27;;;-1:-1:-1;;;;;41386:27:0;;;;;;;;;;;;;;;41229:342;;;41446:66;-1:-1:-1;;;;;41453:5:0;41446:35;41482:16;-1:-1:-1;;41446:35:0;:66::i;:::-;41532:27;;;-1:-1:-1;;;;;41532:27:0;;;;;;;;;;;;;;;41161:417;:::o;733:106::-;821:10;733:106;:::o;25228:774::-;25652:23;25678:69;25706:4;25678:69;;;;;;;;;;;;;;;;;25686:5;-1:-1:-1;;;;;25678:27:0;;;:69;;;;;:::i;:::-;25762:17;;25652:95;;-1:-1:-1;25762:21:0;25758:237;;25917:10;25906:30;;;;;;;;;;;;;;;-1:-1:-1;25906:30:0;25898:85;;;;-1:-1:-1;;;25898:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18663:571;18833:12;18891:5;18866:21;:30;;18858:81;;;;-1:-1:-1;;;18858:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18958:18;18969:6;18958:10;:18::i;:::-;18950:60;;;;;-1:-1:-1;;;18950:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19084:12;19098:23;19125:6;-1:-1:-1;;;;;19125:11:0;19144:5;19151:4;19125:31;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19125:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19083:73;;;;19174:52;19192:7;19201:10;19213:12;19174:17;:52::i;:::-;19167:59;18663:571;-1:-1:-1;;;;;;;18663:571:0:o;24131:320::-;24262:20;24285:50;24329:5;24285;-1:-1:-1;;;;;24285:15:0;;24309:4;24316:7;24285:39;;;;;;;;;;;;;-1:-1:-1;;;;;24285:39:0;;;;;;-1:-1:-1;;;;;24285:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:50;24373:69;;;-1:-1:-1;;;;;24373:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24373:69:0;-1:-1:-1;;;24373:69:0;;;24262:73;;-1:-1:-1;24346:97:0;;24366:5;;24346:19;:97::i;21312:777::-;21462:12;21491:7;21487:595;;;-1:-1:-1;21522:10:0;21515:17;;21487:595;21636:17;;:21;21632:439;;21899:10;21893:17;21960:15;21947:10;21943:2;21939:19;21932:44;21847:148;22042:12;22035:20;;-1:-1:-1;;;22035:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://4dfdf480a9dc1ed7ce419be1cb1ba8c3de04d1551e9e974af9583ec4673f8bfd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.