Contract 0xce820d0e671d30f4ac0a5007346c0e85fe12039f 12
Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
EmissionsOperator
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2021-10-11 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @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); function decimals() external view returns (uint8); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @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, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 pragma solidity ^0.6.0; /** * @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/GSN/Context.sol pragma solidity ^0.6.0; /* * @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 pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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. */ contract Ownable is Context { address private _owner; event GovernanceTransferred(address indexed previousOwner, address indexed newOwner); /** * Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit GovernanceTransferred(address(0), msgSender); } /** * Returns the address of the current owner. */ function governance() public view returns (address) { return _owner; } /** * Throws if called by any account other than the owner. */ modifier onlyGovernance() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function _transferGovernance(address newOwner) internal virtual onlyGovernance { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit GovernanceTransferred(_owner, newOwner); _owner = newOwner; } } // Stabilize Token Interface interface StabilizeToken is IERC20 { /// Operator is the only contract that can mint function mint(address _to, uint256 _amount) external returns (bool); // Get the minter address function minterAddress() external view returns (address); } interface StabilizeBank { function totalWeeklyRevenue() external view returns(uint256); function strategyWeeklyRevenue(address) external view returns(uint256); function getSTBZBalance() external view returns (uint256); function depositSTBZ(address _credit, uint256 amount) external; function withdrawSTBZ(uint256 amount) external; function resetStrategyRevenue(address _credit) external; function resetTotalRevenue() external; } // File: contracts/EmissionsOperator.sol pragma solidity =0.6.6; // EmissionsOperator is the minter of Stablize Arbitrum. // After the initial burst phase, emission will continue for perpetuity at an inflation rate that is offset by profit generated contract EmissionsOperator is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; using SafeERC20 for StabilizeToken; using Address for address; // variables uint256 constant WEEKLY_DURATION = 7 days; // Each reward period lasts for one week uint256 constant DIVISION_FACTOR = 100000; uint256 constant DEV_PERCENT = 10000; // For each week's minting, dev team gets 10% uint256 private _periodFinished; // The UTC time that the current reward period ends uint256 public protocolStartTime; // UTC time that the protocol begins to reward tokens uint256 public weeklyReward; // The reward for the current week, this determines the reward rate uint256 public boostPercent = 5000; // This is reduced weekly then switched to weekly inflation uint256 public weeklyInflation = 19; // The inflation rate is about 1% per year, 0.019% per week uint256 public vestTime = 90 days; // Time it takes to reach 0% penalty address public stbzBankAddress; address public developerTreasuryAddress; StabilizeToken private STBZ; // A reference to the StabilizeToken uint256 private _currentWeek = 0; bool private protocolStarted = false; // This will become true when protocol is started // Reward variables uint256 public rewardPercentLP = 65000; // This is the percent of rewards reserved for LP pools. Represents 65% of all Stabilize Token rewards // Info of each user. struct UserInfo { uint256 amount; // How many zsTokens/Lp tokens tokens the user has provided. uint256 rewardDebt; // Reward debt. The amount of rewards already given to depositer uint256 unclaimedReward; // Total reward potential uint256 depositAverageTime; // The average deposit time } // Info of each pool. struct PoolInfo { address tokenAddress; // Address of LP/strat token contract. uint256 rewardRate; // The rate at which Stabilize Token is earned per second uint256 rewardPerTokenStored; // Reward per token stored which should gradually increase with time uint256 lastUpdateTime; // Time the pool was last updated uint256 totalSupply; // The total amount of LP/Strat tokens in the pool uint256 poolWeight; bool deactivated; // If deactivated, user cannot deposit into pool anymore bool excludedFromWeight; // If true, pool weight matches highest earning pool uint256 poolID; // ID for the pool bool isLpPool; // LP pools are calculated separate from other pools } // Info of each pool. PoolInfo[] private totalPools; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) private userInfo; // List of the active pools IDs uint256[] private activePools; mapping(address => bool) public blockedContracts; // Governance can block contracts (only) from withdrawing rewards at anytime // Events event Deposited(uint256 pid, address indexed user, uint256 amount); event Withdrawn(uint256 pid, address indexed user, uint256 amount); event RewardPaid(uint256 pid, address indexed user, uint256 reward, uint256 rewardFee); event RewardDenied(uint256 pid, address indexed user, uint256 reward); event NewWeek(uint256 weekNum, uint256 rewardAmount); event GovernorChanged(address oldGov, address newGov); constructor( address _treasury, address _stbzbank, StabilizeToken _stabilize, uint256 startTime ) public { developerTreasuryAddress = _treasury; stbzBankAddress = _stbzbank; STBZ = _stabilize; protocolStartTime = startTime; } // Modifiers modifier updateRewardEarned(uint256 _pid, address account) { totalPools[_pid].rewardPerTokenStored = rewardPerToken(_pid); totalPools[_pid].lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { userInfo[_pid][account].unclaimedReward = rewardEarned(_pid,account); userInfo[_pid][account].rewardDebt = totalPools[_pid].rewardPerTokenStored; } _; } // Getters function currentWeek() external view returns (uint256){ return _currentWeek; } function periodFinished() external view returns (uint256){ return _periodFinished; } function poolLength() public view returns (uint256) { return totalPools.length; } function activePoolLength() public view returns (uint256) { return activePools.length; } function getActivePoolPID(uint256 _pos) public view returns (uint256) { return activePools[_pos]; } function lastTimeRewardApplicable() public view returns (uint256) { return block.timestamp < _periodFinished ? block.timestamp : _periodFinished; } function rewardRate(uint256 _pid) external view returns (uint256) { return totalPools[_pid].rewardRate; } function poolSize(uint256 _pid) external view returns (uint256) { return totalPools[_pid].totalSupply; } function poolBalance(uint256 _pid, address _address) external view returns (uint256) { return userInfo[_pid][_address].amount; } function poolDepositTime(uint256 _pid, address _address) external view returns (uint256) { return userInfo[_pid][_address].depositAverageTime; } // Returns the amount of vesting remaining function poolVestedPercent(uint256 _pid, address _address) public view returns (uint256) { uint256 depositTime = userInfo[_pid][_address].depositAverageTime; if(depositTime == 0){ return DIVISION_FACTOR; } if(vestTime == 0){ return 0; } if(now > depositTime.add(vestTime)){ return 0; } // Met maximum vest time uint256 timeDiff = now.sub(depositTime); uint256 percent = DIVISION_FACTOR.sub(timeDiff.mul(DIVISION_FACTOR).div(vestTime)); return percent; } function poolTokenAddress(uint256 _pid) external view returns (address) { return totalPools[_pid].tokenAddress; } function isPoolWeightExcluded(uint256 _pid) external view returns (bool) { return totalPools[_pid].excludedFromWeight; } function rewardPerToken(uint256 _pid) public view returns (uint256) { if (totalPools[_pid].totalSupply == 0) { return totalPools[_pid].rewardPerTokenStored; } return totalPools[_pid].rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(totalPools[_pid].lastUpdateTime) .mul(totalPools[_pid].rewardRate) .mul(1e18) .div(totalPools[_pid].totalSupply) ); } function rewardEarned(uint256 _pid, address account) public view returns (uint256) { return userInfo[_pid][account].amount .mul(rewardPerToken(_pid).sub(userInfo[_pid][account].rewardDebt)) .div(1e18) .add(userInfo[_pid][account].unclaimedReward); } // Setters // function mintNewWeek() public nonReentrant { require(now >= protocolStartTime,"Too soon to start this protocol"); if(protocolStarted == true){ // We cannot mint a new week until the current week is over require(now >= _periodFinished,"Too early to start next week"); } require(STBZ.minterAddress() == address(this),"The Operator does not have permission to mint tokens"); if(protocolStarted == false){ // Determine the base reward rate protocolStarted = true; // Activate all the pools uint256 length = totalPools.length; for(uint256 i = 0; i < length; i++){ activePools.push(totalPools[i].poolID); } } _currentWeek = _currentWeek.add(1); uint256 tokensNeeded; { // Determine the amount of tokens to mint this week if(boostPercent > 0){ tokensNeeded = STBZ.totalSupply().mul(boostPercent).div(DIVISION_FACTOR); boostPercent = boostPercent.sub(1000); // Decrease it by 1% }else{ // We are at weekly inflation now tokensNeeded = STBZ.totalSupply().mul(weeklyInflation).div(DIVISION_FACTOR); } // Pull from the bank the STBZ tokens if(tokensNeeded > 0){ StabilizeBank bank = StabilizeBank(stbzBankAddress); if(bank.getSTBZBalance() >= tokensNeeded){ // No need to mint, pull entire stbz from bank bank.withdrawSTBZ(tokensNeeded); }else{ uint256 mintAmount = tokensNeeded.sub(bank.getSTBZBalance()); // Mint what we don't have in the bank STBZ.mint(address(this), mintAmount); if(bank.getSTBZBalance() > 0){ bank.withdrawSTBZ(bank.getSTBZBalance()); } } // Send some of the new STBZ to the dev account uint256 devShare = tokensNeeded.mul(DEV_PERCENT).div(DIVISION_FACTOR); STBZ.safeTransfer(developerTreasuryAddress, devShare); tokensNeeded = tokensNeeded.sub(devShare); } } // Now adjust the contract values // Force update all the active pools before we extend the period for(uint256 i = 0; i < activePools.length; i++){ forceUpdateRewardEarned(activePools[i],address(0)); totalPools[activePools[i]].rewardRate = 0; // Set the reward rate to 0 until pools rebalanced } _periodFinished = now + WEEKLY_DURATION; weeklyReward = tokensNeeded; // This is this week's distribution rebalancePoolRewards(true); // The pools will determine their reward rates based on profit { // Reset the profits for the pools StabilizeBank bank = StabilizeBank(stbzBankAddress); for(uint256 i = 0; i < activePools.length; i++){ if(totalPools[activePools[i]].isLpPool == false){ bank.resetStrategyRevenue(totalPools[activePools[i]].tokenAddress); } } bank.resetTotalRevenue(); } emit NewWeek(_currentWeek,weeklyReward); } function rebalancePoolRewards(bool recalculateFromProfit) internal { // This function rebalances the pool rewards based on the weight of the profit in the pools uint256 rewardPerSecond = weeklyReward.div(WEEKLY_DURATION); if(weeklyReward == 0){ return; } // Can't rebalance if there are no rewards uint256 rewardLeft = 0; uint256 timeLeft = 0; if(now < _periodFinished){ timeLeft = _periodFinished.sub(now); rewardLeft = timeLeft.mul(rewardPerSecond); // The amount of rewards left in this week } uint256 lpRewardLeft = rewardLeft.mul(rewardPercentLP).div(DIVISION_FACTOR); uint256 sbRewardLeft = rewardLeft.sub(lpRewardLeft); // First figure out the pool splits for the lp tokens // LP pools are split evenly uint256 length = activePools.length; require(length > 0,"No active pools exist on the protocol"); uint256 totalWeight = 0; uint256 mostProfit = 0; StabilizeBank bank = StabilizeBank(stbzBankAddress); uint256 totalEarned = bank.totalWeeklyRevenue(); uint256 i = 0; for(i = 0; i < length; i++){ if(totalPools[activePools[i]].isLpPool == true){ totalPools[activePools[i]].poolWeight = 1; totalWeight++; }else{ if(recalculateFromProfit == true){ totalPools[activePools[i]].poolWeight = 0; // We will recalculate the pool weights from last week profit if(totalEarned == 0){ // No earnings, give all pools equal weight totalPools[activePools[i]].poolWeight = 1; }else if(totalPools[activePools[i]].excludedFromWeight == false){ // Determine the weights based on the strategy profit to total profit uint256 weight = bank.strategyWeeklyRevenue(totalPools[activePools[i]].tokenAddress); weight = weight.mul(DIVISION_FACTOR).div(totalEarned); if(weight == 0){weight = 1;} // Give this low earning pool a small weight totalPools[activePools[i]].poolWeight = weight; } } if(totalPools[activePools[i]].poolWeight > mostProfit){ // Get the highest weight each time this function is called mostProfit = totalPools[activePools[i]].poolWeight; } } } // Now split the lpReward between the pools for(i = 0; i < length; i++){ if(totalPools[activePools[i]].isLpPool == true){ uint256 rewardPercent = totalPools[activePools[i]].poolWeight.mul(DIVISION_FACTOR).div(totalWeight); uint256 poolReward = lpRewardLeft.mul(rewardPercent).div(DIVISION_FACTOR); forceUpdateRewardEarned(activePools[i],address(0)); // Update the stored rewards for this pool before changing the rates if(timeLeft > 0){ totalPools[activePools[i]].rewardRate = poolReward.div(timeLeft); // The rate of return per second for this pool }else{ totalPools[activePools[i]].rewardRate = 0; } } } // Now we do the same for the non LP pools // Get the total weights first totalWeight = 0; for(i = 0; i < length; i++){ if(totalPools[activePools[i]].isLpPool == false){ if(totalPools[activePools[i]].poolWeight == 0){ // For new pools, they get the same weight as the highest earning pool if(mostProfit > 0){ totalPools[activePools[i]].poolWeight = mostProfit; }else{ totalPools[activePools[i]].poolWeight = 1; } } totalWeight += totalPools[activePools[i]].poolWeight; } } // Now split the sbReward among the strat pools for(i = 0; i < length; i++){ if(totalPools[activePools[i]].isLpPool == false){ uint256 rewardPercent = totalPools[activePools[i]].poolWeight.mul(DIVISION_FACTOR).div(totalWeight); uint256 poolReward = sbRewardLeft.mul(rewardPercent).div(DIVISION_FACTOR); forceUpdateRewardEarned(activePools[i],address(0)); // Update the stored rewards for this pool before changing the rates if(timeLeft > 0){ totalPools[activePools[i]].rewardRate = poolReward.div(timeLeft); // The rate of return per second for this pool }else{ totalPools[activePools[i]].rewardRate = 0; } } } } function forceUpdateRewardEarned(uint256 _pid, address _address) internal updateRewardEarned(_pid, _address) { } function deposit(uint256 _pid, uint256 amount) public updateRewardEarned(_pid, _msgSender()) { require(amount > 0, "Cannot deposit 0"); require(totalPools[_pid].deactivated == false, "This pool is no longer active"); if(protocolStarted == true && now > _periodFinished){ // Auto mint new week on first deposit after previous period has ended mintNewWeek(); } // Calculate the deposit time first based on the amount of tokens deposited if(userInfo[_pid][_msgSender()].amount == 0){ userInfo[_pid][_msgSender()].depositAverageTime = now; }else{ // Take the weighted average uint256 timeDiff = now.sub(userInfo[_pid][_msgSender()].depositAverageTime); uint256 weight = amount.mul(DIVISION_FACTOR).div(amount.add(userInfo[_pid][_msgSender()].amount)); timeDiff = timeDiff.mul(weight).div(DIVISION_FACTOR); userInfo[_pid][_msgSender()].depositAverageTime = userInfo[_pid][_msgSender()].depositAverageTime.add(timeDiff); } totalPools[_pid].totalSupply = totalPools[_pid].totalSupply.add(amount); userInfo[_pid][_msgSender()].amount = userInfo[_pid][_msgSender()].amount.add(amount); IERC20 token = IERC20(totalPools[_pid].tokenAddress); token.safeTransferFrom(_msgSender(), address(this), amount); emit Deposited(_pid, _msgSender(), amount); } // User can withdraw without claiming reward tokens function withdraw(uint256 _pid, uint256 amount) public nonReentrant updateRewardEarned(_pid, _msgSender()) { require(amount > 0, "Cannot withdraw 0"); totalPools[_pid].totalSupply = totalPools[_pid].totalSupply.sub(amount); userInfo[_pid][_msgSender()].amount = userInfo[_pid][_msgSender()].amount.sub(amount); IERC20 token = IERC20(totalPools[_pid].tokenAddress); token.safeTransfer(_msgSender(), amount); emit Withdrawn(_pid, _msgSender(), amount); } // Normally used to exit the contract and claim reward tokens at same time function exit(uint256 _pid, uint256 _amount) external { withdraw(_pid, _amount); getReward(_pid); } function getReward(uint256 _pid) public updateRewardEarned(_pid, _msgSender()) { if(protocolStarted == true && now > _periodFinished){ // Auto mint new week on first reward claiming after previous period has ended mintNewWeek(); } uint256 reward = rewardEarned(_pid,_msgSender()); if (reward > 0) { userInfo[_pid][_msgSender()].unclaimedReward = 0; // If it is a normal user and not a blocked smart contract, // then the requirement will pass if (tx.origin == _msgSender() || blockedContracts[_msgSender()] == false) { // Check the contract to make sure the reward exists uint256 contractBalance = STBZ.balanceOf(address(this)); if(contractBalance < reward){ // This prevents a contract with zero balance from locking up reward = contractBalance; } // Subtract the vesting fee and send to bank uint256 vestPercent = poolVestedPercent(_pid, _msgSender()); uint256 vest = 0; if(vestPercent > 0){ vest = reward.mul(vestPercent).div(DIVISION_FACTOR); // Send this to the buyback bank STBZ.safeApprove(stbzBankAddress, 0); STBZ.safeApprove(stbzBankAddress, vest); StabilizeBank(stbzBankAddress).depositSTBZ(address(0), vest); reward = reward.sub(vest); } STBZ.safeTransfer(_msgSender(), reward); emit RewardPaid(_pid, _msgSender(), reward, vest); } else { emit RewardDenied(_pid, _msgSender(), reward); } } } // Governance only functions function governanceSetBlockedContracts(address _add, bool _blocked) external onlyGovernance { // Governance can block contracts from pulling rewards at anytime blockedContracts[_add] = _blocked; } function governanceSetWeightOnPool(uint256 _pid, bool _excluded) external onlyGovernance { require(_pid < totalPools.length, "ID is too high"); totalPools[_pid].excludedFromWeight = _excluded; } /// A push mechanism for accounts that have not claimed their rewards for a long time. function pushReward(uint256 _pid, address recipient) external updateRewardEarned(_pid, recipient) onlyGovernance { uint256 reward = rewardEarned(_pid,recipient); if (reward > 0) { userInfo[_pid][recipient].unclaimedReward = 0; // If it is a normal user and not a blocked smart contract, // then the requirement will pass if (!recipient.isContract() || blockedContracts[recipient] == false) { uint256 contractBalance = STBZ.balanceOf(address(this)); if(contractBalance < reward){ // This prevents a contract with zero balance locking up reward = contractBalance; } STBZ.safeTransfer(recipient, reward); emit RewardPaid(_pid, recipient, reward, 0); } else { emit RewardDenied(_pid, recipient, reward); } } } // Timelock variables // Timelock doesn't activate until protocol has started to distribute rewards uint256 private _timelockStart; // The start of the timelock to change governance variables uint256 private _timelockType; // The function that needs to be changed uint256 constant TIMELOCK_DURATION = 86400; // Timelock is 24 hours // Reusable timelock variables uint256 private _timelock_data; address private _timelock_address; bool private _timelock_bool; modifier timelockConditionsMet(uint256 _type) { require(_timelockType == _type, "Timelock not acquired for this function"); _timelockType = 0; // Reset the type once the timelock is used if(protocolStarted == true){ // Timelock is only required after the protocol starts require(now >= _timelockStart + TIMELOCK_DURATION, "Timelock time not met"); } _; } // Change the owner of the Operator contract // -------------------- function startGovernanceChange(address _address) external onlyGovernance { _timelockStart = now; _timelockType = 1; _timelock_address = _address; } function finishGovernanceChange() external onlyGovernance timelockConditionsMet(1) { emit GovernorChanged(governance(), _timelock_address); _transferGovernance(_timelock_address); } // -------------------- // Change the amount of time required to vest // -------------------- function startChangeVestTime(uint256 _time) external onlyGovernance { _timelockStart = now; _timelockType = 2; _timelock_data = _time; } function finishChangeVestTime() external onlyGovernance timelockConditionsMet(2) { vestTime = _timelock_data; } // -------------------- // Change the weekly inflation // -------------------- function startChangeWeeklyInflation(uint256 _amount) external onlyGovernance { _timelockStart = now; _timelockType = 3; _timelock_data = _amount; } function finishChangeWeeklyInflation() external onlyGovernance timelockConditionsMet(3) { weeklyInflation = _timelock_data; } // -------------------- // Change the percent of rewards that is dedicated to LP providers // -------------------- function startChangeRewardPercentLP(uint256 _percent) external onlyGovernance { require(_percent <= 100000, "Percent is too high"); _timelockStart = now; _timelockType = 4; _timelock_data = _percent; } function finishChangeRewardPercentLP() external onlyGovernance timelockConditionsMet(4) { rewardPercentLP = _timelock_data; } // -------------------- // Add a new token to the pool // -------------------- function startAddNewPool(address _address, bool _lpPool) external onlyGovernance { _timelockStart = now; _timelockType = 5; _timelock_address = _address; _timelock_bool = _lpPool; if(protocolStarted == false){ finishAddNewPool(); // Automatically add the pool if protocol hasn't started yet } } function finishAddNewPool() public onlyGovernance timelockConditionsMet(5) { // This adds a new pool to the pool lists totalPools.push( PoolInfo({ tokenAddress: _timelock_address, poolID: poolLength(), isLpPool: _timelock_bool, rewardRate: 0, rewardPerTokenStored: 0, lastUpdateTime: 0, totalSupply: 0, poolWeight: 0, deactivated: false, excludedFromWeight: true }) ); } // -------------------- // Select a pool to activate in rewards distribution // -------------------- function startAddActivePool(uint256 _pid) external onlyGovernance { _timelockStart = now; _timelockType = 6; _timelock_data = _pid; } function finishAddActivePool() external onlyGovernance timelockConditionsMet(6) { require(totalPools[_timelock_data].rewardRate == 0, "This pool is already earning rewards"); activePools.push(_timelock_data); totalPools[_timelock_data].deactivated = false; // Rebalance the pools now that there is a new pool if(protocolStarted == true){ rebalancePoolRewards(false); } } // -------------------- // Select a pool to deactivate from rewards distribution // -------------------- function startRemoveActivePool(uint256 _pid) external onlyGovernance { _timelockStart = now; _timelockType = 7; _timelock_data = _pid; } function finishRemoveActivePool() external onlyGovernance timelockConditionsMet(7) updateRewardEarned(_timelock_data, address(0)) { uint256 length = activePools.length; for(uint256 i = 0; i < length; i++){ if(totalPools[activePools[i]].poolID == _timelock_data){ // Move all the remaining elements down one // Remove any earned revenue from the calculations StabilizeBank(stbzBankAddress).resetStrategyRevenue(totalPools[activePools[i]].tokenAddress); totalPools[activePools[i]].deactivated = true; totalPools[activePools[i]].rewardRate = 0; // Deactivate rewards but first make sure to store current rewards for(uint256 i2 = i; i2 < length-1; i2++){ activePools[i2] = activePools[i2 + 1]; // Shift the data down one } activePools.pop(); //Remove last element break; } } // Rebalance the remaining pools if(protocolStarted == true){ rebalancePoolRewards(false); } } // -------------------- // Change the treasury // -------------------- function startChangeDeveloperTreasury(address _address) external onlyGovernance { _timelockStart = now; _timelockType = 8; _timelock_address = _address; } function finishChangeDeveloperTreasury() external onlyGovernance timelockConditionsMet(8) { developerTreasuryAddress = _timelock_address; } // -------------------- // Change the bank // -------------------- function startChangeSTBZBank(address _address) external onlyGovernance { _timelockStart = now; _timelockType = 9; _timelock_address = _address; } function finishChangeSTBZBank() external onlyGovernance timelockConditionsMet(9) { stbzBankAddress = _timelock_address; } // -------------------- }
[{"inputs":[{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_stbzbank","type":"address"},{"internalType":"contract StabilizeToken","name":"_stabilize","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"GovernanceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"GovernorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"weekNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"NewWeek","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardDenied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardFee","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"activePoolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blockedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentWeek","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developerTreasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishAddActivePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishAddNewPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeDeveloperTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeRewardPercentLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeSTBZBank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeVestTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishChangeWeeklyInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishGovernanceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishRemoveActivePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pos","type":"uint256"}],"name":"getActivePoolPID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_blocked","type":"bool"}],"name":"governanceSetBlockedContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"governanceSetWeightOnPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"isPoolWeightExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintNewWeek","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"periodFinished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"poolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"poolDepositTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"poolSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"poolTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"poolVestedPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"pushReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"rewardEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPercentLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"startAddActivePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_lpPool","type":"bool"}],"name":"startAddNewPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startChangeDeveloperTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"startChangeRewardPercentLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startChangeSTBZBank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"startChangeVestTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"startChangeWeeklyInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"startGovernanceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"startRemoveActivePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stbzBankAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weeklyInflation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weeklyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405261138860055560136006556276a7006007556000600b55600c805460ff1916905561fde8600d553480156200003857600080fd5b5060405162004aed38038062004aed833981810160405260808110156200005e57600080fd5b508051602082015160408301516060909301519192909160006200008a6001600160e01b036200011e16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80908290a35060018055600980546001600160a01b03199081166001600160a01b039687161790915560088054821694861694909417909355600a80549093169190931617905560035562000122565b3390565b6149bb80620001326000396000f3fe608060405234801561001057600080fd5b50600436106102505760003560e01c80621034a8146102555780630527be4c1461027957806306575c8914610293578063081e3eda1461029b5780630962c4f9146102a357806311d44611146102ab57806319597a56146102ca5780631c4b774b146102d25780631cc92439146102ef578063290304841461031b57806329215488146103235780632af9cc411461032b5780632bb06b271461034e5780632eb5d00d14610356578063335bc35214610373578063351e7cb314610390578063441a3e70146103bc57806344f9413c146103df5780634d22d1d11461040d5780635217a58d146104155780635aa6e6751461041d5780635c26ff37146104255780635da5a5581461042d5780636215558f146104355780636a5cfef0146104615780636cf3afee1461049b578063790f3207146104c157806380faa57d146104c9578063874c120b146104d15780639378f7c0146104ee578063958629df1461050b57806395d537df146105305780639d72b2051461054d5780639fe0cae114610555578063b43e2ea91461055d578063b61ccb281461058b578063b6bc192c146105a8578063b9195072146105ce578063bd93a7c7146105d6578063c8aa999a146105f3578063cdfa2c36146105fb578063ce6c2a6f14610627578063cea0196214610653578063d34925d714610670578063da0adedf14610678578063dd03477914610680578063e2bbb1581461069d578063e5baba4c146106c0578063ea8f8299146106dd578063f8008776146106e5578063fe91ca3e1461070b575b600080fd5b61025d610713565b604080516001600160a01b039092168252519081900360200190f35b610281610722565b60408051918252519081900360200190f35b610281610728565b61028161072e565b610281610734565b6102c8600480360360208110156102c157600080fd5b503561073a565b005b6102c86107a0565b6102c8600480360360208110156102e857600080fd5b50356110a1565b6102816004803603604081101561030557600080fd5b50803590602001356001600160a01b0316611482565b6102816114af565b6102c86114b5565b6102c86004803603604081101561034157600080fd5b50803590602001356115d3565b6102816115ea565b61025d6004803603602081101561036c57600080fd5b50356115f0565b6102c86004803603602081101561038957600080fd5b5035611621565b610281600480360360408110156103a657600080fd5b50803590602001356001600160a01b0316611687565b6102c8600480360360408110156103d257600080fd5b50803590602001356116af565b6102c8600480360360408110156103f557600080fd5b506001600160a01b03813516906020013515156119a6565b610281611a45565b610281611a4b565b61025d611a51565b6102c8611a60565b6102c8611b62565b6102c86004803603604081101561044b57600080fd5b50803590602001356001600160a01b0316611c80565b6104876004803603602081101561047757600080fd5b50356001600160a01b0316611f3f565b604080519115158252519081900360200190f35b6102c8600480360360208110156104b157600080fd5b50356001600160a01b0316611f54565b610281611fd7565b610281611fdd565b610281600480360360208110156104e757600080fd5b5035611ff7565b6102c86004803603602081101561050457600080fd5b5035612108565b6102c86004803603604081101561052157600080fd5b5080359060200135151561216e565b6102c86004803603602081101561054657600080fd5b5035612247565b6102c86122fb565b6102c86126e0565b6102c86004803603604081101561057357600080fd5b506001600160a01b038135169060200135151561290a565b610281600480360360208110156105a157600080fd5b503561298d565b6102c8600480360360208110156105be57600080fd5b50356001600160a01b03166129ae565b6102c8612a31565b6102c8600480360360208110156105ec57600080fd5b5035612b91565b6102c8612bf7565b6102816004803603604081101561061157600080fd5b50803590602001356001600160a01b0316612dd2565b6102816004803603604081101561063d57600080fd5b50803590602001356001600160a01b0316612e65565b6102816004803603602081101561066957600080fd5b5035612f21565b6102c8612f49565b61028161304b565b6102816004803603602081101561069657600080fd5b5035613051565b6102c8600480360360408110156106b357600080fd5b5080359060200135613079565b610487600480360360208110156106d657600080fd5b5035613565565b61025d613596565b6102c8600480360360208110156106fb57600080fd5b50356001600160a01b03166135a5565b6102c8613628565b6009546001600160a01b031681565b60105490565b600b5490565b600e5490565b60025490565b61074261372a565b6000546001600160a01b03908116911614610792576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556006601355601455565b600260015414156107e6576040805162461bcd60e51b815260206004820152601f602482015260008051602061479b833981519152604482015290519081900360640190fd5b6002600155600354421015610842576040805162461bcd60e51b815260206004820152601f60248201527f546f6f20736f6f6e20746f20737461727420746869732070726f746f636f6c00604482015290519081900360640190fd5b600c5460ff161515600114156108a8576002544210156108a8576040805162461bcd60e51b815260206004820152601c60248201527b546f6f206561726c7920746f207374617274206e657874207765656b60201b604482015290519081900360640190fd5b600a54604080516334d722c960e01b8152905130926001600160a01b0316916334d722c9916004808301926020929190829003018186803b1580156108ec57600080fd5b505afa158015610900573d6000803e3d6000fd5b505050506040513d602081101561091657600080fd5b50516001600160a01b03161461095d5760405162461bcd60e51b81526004018080602001828103825260348152602001806148ae6034913960400191505060405180910390fd5b600c5460ff166109c357600c805460ff19166001179055600e5460005b818110156109c0576010600e828154811061099157fe5b60009182526020808320600760099093020191909101548354600181810186559484529190922001550161097a565b50505b600b546109d790600163ffffffff61372e16565b600b5560055460009015610aa457610a84620186a0610a78600554600a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4057600080fd5b505afa158015610a54573d6000803e3d6000fd5b505050506040513d6020811015610a6a57600080fd5b50519063ffffffff61378616565b9063ffffffff6137df16565b600554909150610a9c906103e863ffffffff61381e16565b600555610b02565b610aff620186a0610a78600654600a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4057600080fd5b90505b8015610e78576008546040805163fd34ed8d60e01b815290516001600160a01b03909216918391839163fd34ed8d91600480820192602092909190829003018186803b158015610b5157600080fd5b505afa158015610b65573d6000803e3d6000fd5b505050506040513d6020811015610b7b57600080fd5b505110610be557806001600160a01b03166393a5144b836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bc857600080fd5b505af1158015610bdc573d6000803e3d6000fd5b50505050610e22565b6000610c5c826001600160a01b031663fd34ed8d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2357600080fd5b505afa158015610c37573d6000803e3d6000fd5b505050506040513d6020811015610c4d57600080fd5b5051849063ffffffff61381e16565b600a54604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b158015610cb357600080fd5b505af1158015610cc7573d6000803e3d6000fd5b505050506040513d6020811015610cdd57600080fd5b50506040805163fd34ed8d60e01b815290516000916001600160a01b0385169163fd34ed8d91600480820192602092909190829003018186803b158015610d2357600080fd5b505afa158015610d37573d6000803e3d6000fd5b505050506040513d6020811015610d4d57600080fd5b50511115610e2057816001600160a01b03166393a5144b836001600160a01b031663fd34ed8d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d6020811015610dc757600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050505b505b6000610e3d620186a0610a788561271063ffffffff61378616565b600954600a54919250610e63916001600160a01b0390811691168363ffffffff61386016565b610e73838263ffffffff61381e16565b925050505b60005b601054811015610eeb57610ea760108281548110610e9557fe5b906000526020600020015460006138b7565b6000600e60108381548110610eb857fe5b906000526020600020015481548110610ecd57fe5b60009182526020909120600160099092020181019190915501610e7b565b504262093a80016002556004819055610f046001613997565b6008546001600160a01b031660005b60105481101561100257600e60108281548110610f2c57fe5b906000526020600020015481548110610f4157fe5b600091825260209091206008600990920201015460ff16610ffa57816001600160a01b031663ebac3036600e60108481548110610f7a57fe5b906000526020600020015481548110610f8f57fe5b60009182526020822060099091020154604080516001600160e01b031960e086901b1681526001600160a01b039092166004830152516024808301939282900301818387803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050505b600101610f13565b50806001600160a01b031663d114303e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b50505050507fc023f84c6d48b563ace2d5dc883a56d97f06fb48b6ef7c1958f23aacd37caeae600b54600454604051808381526020018281526020019250505060405180910390a15060018055565b806110aa61372a565b6110b382611ff7565b600e83815481106110c057fe5b9060005260206000209060090201600201819055506110dd611fdd565b600e83815481106110ea57fe5b60009182526020909120600360099092020101556001600160a01b03811615611184576111178282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061114b57fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b600c5460ff161515600114801561119c575060025442115b156111a9576111a96107a0565b60006111bc846111b761372a565b612dd2565b9050801561147c576000848152600f60205260408120816111db61372a565b6001600160a01b0316815260208101919091526040016000206002015561120061372a565b6001600160a01b0316326001600160a01b0316148061124557506011600061122661372a565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561143d57600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561129557600080fd5b505afa1580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50519050818110156112cf578091505b60006112e2866112dd61372a565b612e65565b9050600081156113ce57611303620186a0610a78868563ffffffff61378616565b600854600a5491925061132a916001600160a01b039081169116600063ffffffff6141d516565b600854600a5461134d916001600160a01b0391821691168363ffffffff6141d516565b600854604080516339bae5dd60e01b81526000600482018190526024820185905291516001600160a01b03909316926339bae5dd9260448084019391929182900301818387803b1580156113a057600080fd5b505af11580156113b4573d6000803e3d6000fd5b505050506113cb818561381e90919063ffffffff16565b93505b6113f26113d961372a565b600a546001600160a01b0316908663ffffffff61386016565b6113fa61372a565b604080518981526020810187905280820184905290516001600160a01b0392909216916000805160206148018339815191529181900360600190a250505061147c565b61144561372a565b6001600160a01b03166000805160206147e18339815191528583604051808381526020018281526020019250505060405180910390a25b50505050565b6000828152600f602090815260408083206001600160a01b03851684529091529020600301545b92915050565b600d5481565b6114bd61372a565b6000546001600160a01b0390811691161461150d576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6008806013541461154f5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff161515600114156115ae5762015180601254014210156115ae576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601554600980546001600160a01b0319166001600160a01b03909216919091179055565b6115dd82826116af565b6115e6826110a1565b5050565b60055481565b6000600e82815481106115ff57fe5b60009182526020909120600990910201546001600160a01b031690505b919050565b61162961372a565b6000546001600160a01b03908116911614611679576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556003601355601455565b6000918252600f602090815260408084206001600160a01b0393909316845291905290205490565b600260015414156116f5576040805162461bcd60e51b815260206004820152601f602482015260008051602061479b833981519152604482015290519081900360640190fd5b60026001558161170361372a565b61170c82611ff7565b600e838154811061171957fe5b906000526020600020906009020160020181905550611736611fdd565b600e838154811061174357fe5b60009182526020909120600360099092020101556001600160a01b038116156117dd576117708282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e8054839081106117a457fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b60008311611826576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b61185783600e868154811061183757fe5b90600052602060002090600902016004015461381e90919063ffffffff16565b600e858154811061186457fe5b9060005260206000209060090201600401819055506118c083600f6000878152602001908152602001600020600061189a61372a565b6001600160a01b031681526020810191909152604001600020549063ffffffff61381e16565b6000858152600f60205260408120906118d761372a565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506000600e858154811061190d57fe5b60009182526020909120600990910201546001600160a01b0316905061194b61193461372a565b6001600160a01b038316908663ffffffff61386016565b61195361372a565b6001600160a01b03167fcf7d23a3cbe4e8b36ff82fd1b05b1b17373dc7804b4ebbd6e2356716ef2023728686604051808381526020018281526020019250505060405180910390a2505060018055505050565b6119ae61372a565b6000546001600160a01b039081169116146119fe576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556005601355601580546001600160a01b0319166001600160a01b0384161760ff60a01b1916600160a01b83151502179055600c5460ff166115e6576115e66126e0565b60075481565b60065481565b6000546001600160a01b031690565b611a6861372a565b6000546001600160a01b03908116911614611ab8576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60028060135414611afa5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415611b59576201518060125401421015611b59576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601454600755565b611b6a61372a565b6000546001600160a01b03908116911614611bba576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60098060135414611bfc5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415611c5b576201518060125401421015611c5b576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601554600880546001600160a01b0319166001600160a01b03909216919091179055565b8181611c8b82611ff7565b600e8381548110611c9857fe5b906000526020600020906009020160020181905550611cb5611fdd565b600e8381548110611cc257fe5b60009182526020909120600360099092020101556001600160a01b03811615611d5c57611cef8282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e805483908110611d2357fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b611d6461372a565b6000546001600160a01b03908116911614611db4576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6000611dc08585612dd2565b90508015611f38576000858152600f602090815260408083206001600160a01b0388168085529252822060020191909155611dfa906142e8565b1580611e1f57506001600160a01b03841660009081526011602052604090205460ff16155b15611f0657600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611e6f57600080fd5b505afa158015611e83573d6000803e3d6000fd5b505050506040513d6020811015611e9957600080fd5b5051905081811015611ea9578091505b600a54611ec6906001600160a01b0316868463ffffffff61386016565b604080518781526020810184905260008183015290516001600160a01b03871691600080516020614801833981519152919081900360600190a250611f38565b604080518681526020810183905281516001600160a01b038716926000805160206147e1833981519152928290030190a25b5050505050565b60116020526000908152604090205460ff1681565b611f5c61372a565b6000546001600160a01b03908116911614611fac576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556009601355601580546001600160a01b0319166001600160a01b0392909216919091179055565b60035481565b60006002544210611ff057600254611ff2565b425b905090565b6000600e828154811061200657fe5b9060005260206000209060090201600401546000141561204657600e828154811061202d57fe5b906000526020600020906009020160020154905061161c565b6114a96120db600e848154811061205957fe5b906000526020600020906009020160040154610a78670de0b6b3a76400006120cf600e888154811061208757fe5b9060005260206000209060090201600101546120cf600e8a815481106120a957fe5b9060005260206000209060090201600301546120c3611fdd565b9063ffffffff61381e16565b9063ffffffff61378616565b600e84815481106120e857fe5b90600052602060002090600902016002015461372e90919063ffffffff16565b61211061372a565b6000546001600160a01b03908116911614612160576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556002601355601455565b61217661372a565b6000546001600160a01b039081169116146121c6576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b600e54821061220d576040805162461bcd60e51b815260206004820152600e60248201526d0928840d2e640e8dede40d0d2ced60931b604482015290519081900360640190fd5b80600e838154811061221b57fe5b906000526020600020906009020160060160016101000a81548160ff0219169083151502179055505050565b61224f61372a565b6000546001600160a01b0390811691161461229f576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b620186a08111156122ed576040805162461bcd60e51b81526020600482015260136024820152720a0cae4c6cadce840d2e640e8dede40d0d2ced606b1b604482015290519081900360640190fd5b426012556004601355601455565b61230361372a565b6000546001600160a01b03908116911614612353576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b600780601354146123955760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff161515600114156123f45762015180601254014210156123f4576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b601454600061240282611ff7565b600e838154811061240f57fe5b90600052602060002090600902016002018190555061242c611fdd565b600e838154811061243957fe5b60009182526020909120600360099092020101556001600160a01b038116156124d3576124668282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061249a57fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b60105460005b818110156126c557601454600e601083815481106124f357fe5b90600052602060002001548154811061250857fe5b90600052602060002090600902016007015414156126bd57600854601080546001600160a01b039092169163ebac303691600e918590811061254657fe5b90600052602060002001548154811061255b57fe5b60009182526020822060099091020154604080516001600160e01b031960e086901b1681526001600160a01b039092166004830152516024808301939282900301818387803b1580156125ad57600080fd5b505af11580156125c1573d6000803e3d6000fd5b505050506001600e601083815481106125d657fe5b9060005260206000200154815481106125eb57fe5b906000526020600020906009020160060160006101000a81548160ff0219169083151502179055506000600e6010838154811061262457fe5b90600052602060002001548154811061263957fe5b6000918252602090912060016009909202010155805b60018303811015612696576010816001018154811061266a57fe5b90600052602060002001546010828154811061268257fe5b60009182526020909120015560010161264f565b5060108054806126a257fe5b600190038181906000526020600020016000905590556126c5565b6001016124d9565b50600c5460ff1615156001141561147c5761147c6000613997565b6126e861372a565b6000546001600160a01b03908116911614612738576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6005806013541461277a5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff161515600114156127d95762015180601254014210156127d9576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b60408051610140810182526015546001600160a01b03168152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600160e0820152600e90610100810161283561072e565b8152601554600160a01b900460ff161515602091820152825460018082018555600094855293829020835160099092020180546001600160a01b0319166001600160a01b03909216919091178155908201519281019290925560408101516002830155606081015160038301556080810151600483015560a0810151600583015560c081015160068301805460e084015160ff199182169315159390931761ff001916610100931515840217909155908201516007840155610120909101516008909201805490911691151591909117905550565b61291261372a565b6000546001600160a01b03908116911614612962576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b60006010828154811061299c57fe5b90600052602060002001549050919050565b6129b661372a565b6000546001600160a01b03908116911614612a06576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556008601355601580546001600160a01b0319166001600160a01b0392909216919091179055565b612a3961372a565b6000546001600160a01b03908116911614612a89576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60018060135414612acb5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415612b2a576201518060125401421015612b2a576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b7fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c84612b53611a51565b601554604080516001600160a01b0393841681529290911660208301528051918290030190a1601554612b8e906001600160a01b0316614324565b50565b612b9961372a565b6000546001600160a01b03908116911614612be9576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556007601355601455565b612bff61372a565b6000546001600160a01b03908116911614612c4f576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60068060135414612c915760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415612cf0576201518060125401421015612cf0576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b600e60145481548110612cff57fe5b906000526020600020906009020160010154600014612d4f5760405162461bcd60e51b81526004018080602001828103825260248152602001806148e26024913960400191505060405180910390fd5b6014546010805460018101825560009182527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67201829055600e8054919290918110612d9657fe5b60009182526020909120600990910201600601805460ff1916911515919091179055600c5460ff16151560011415612b8e57612b8e6000613997565b6000828152600f602090815260408083206001600160a01b038516845290915281206002810154600190910154612e5e9190612e5290670de0b6b3a764000090610a7890612e23906120c38a611ff7565b6000898152600f602090815260408083206001600160a01b038c1684529091529020549063ffffffff61378616565b9063ffffffff61372e16565b9392505050565b6000828152600f602090815260408083206001600160a01b038516845290915281206003015480612e9c57620186a09150506114a9565b600754612ead5760009150506114a9565b600754612ec190829063ffffffff61372e16565b421115612ed25760009150506114a9565b6000612ee4428363ffffffff61381e16565b90506000612f17612f07600754610a78620186a08661378690919063ffffffff16565b620186a09063ffffffff61381e16565b9695505050505050565b6000600e8281548110612f3057fe5b9060005260206000209060090201600101549050919050565b612f5161372a565b6000546001600160a01b03908116911614612fa1576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60048060135414612fe35760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415613042576201518060125401421015613042576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601454600d55565b60045481565b6000600e828154811061306057fe5b9060005260206000209060090201600401549050919050565b8161308261372a565b61308b82611ff7565b600e838154811061309857fe5b9060005260206000209060090201600201819055506130b5611fdd565b600e83815481106130c257fe5b60009182526020909120600360099092020101556001600160a01b0381161561315c576130ef8282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061312357fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b600083116131a4576040805162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206465706f73697420360841b604482015290519081900360640190fd5b600e84815481106131b157fe5b600091825260209091206006600990920201015460ff161561321a576040805162461bcd60e51b815260206004820152601d60248201527f5468697320706f6f6c206973206e6f206c6f6e67657220616374697665000000604482015290519081900360640190fd5b600c5460ff1615156001148015613232575060025442115b1561323f5761323f6107a0565b6000848152600f602052604081209061325661372a565b6001600160a01b031681526020810191909152604001600020546132ae576000848152600f60205260408120429161328c61372a565b6001600160a01b031681526020810191909152604001600020600301556133e8565b6000848152600f602052604081206132f390826132c961372a565b6001600160a01b03168152602081019190915260400160002060030154429063ffffffff61381e16565b6000868152600f60205260408120919250906133509061333d908361331661372a565b6001600160a01b03168152602081019190915260400160002054879063ffffffff61372e16565b610a7887620186a063ffffffff61378616565b9050613369620186a0610a78848463ffffffff61378616565b6000878152600f602052604081209193506133b191849161338861372a565b6001600160a01b031681526020810191909152604001600020600301549063ffffffff61372e16565b6000878152600f60205260408120906133c861372a565b6001600160a01b0316815260208101919091526040016000206003015550505b61341983600e86815481106133f957fe5b90600052602060002090600902016004015461372e90919063ffffffff16565b600e858154811061342657fe5b90600052602060002090600902016004018190555061348283600f6000878152602001908152602001600020600061345c61372a565b6001600160a01b031681526020810191909152604001600020549063ffffffff61372e16565b6000858152600f602052604081209061349961372a565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506000600e85815481106134cf57fe5b60009182526020909120600990910201546001600160a01b0316905061350e6134f661372a565b6001600160a01b03831690308763ffffffff61441c16565b61351661372a565b6001600160a01b03167f1599c0fcf897af5babc2bfcf707f5dc050f841b044d97c3251ecec35b9abf80b8686604051808381526020018281526020019250505060405180910390a25050505050565b6000600e828154811061357457fe5b6000918252602090912060099091020160060154610100900460ff1692915050565b6008546001600160a01b031681565b6135ad61372a565b6000546001600160a01b039081169116146135fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556001601355601580546001600160a01b0319166001600160a01b0392909216919091179055565b61363061372a565b6000546001600160a01b03908116911614613680576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b600380601354146136c25760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415613721576201518060125401421015613721576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601454600655565b3390565b600082820183811015612e5e576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082613795575060006114a9565b828202828482816137a257fe5b0414612e5e5760405162461bcd60e51b815260040180806020018281038252602181526020018061486d6021913960400191505060405180910390fd5b6000612e5e83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250614476565b6000612e5e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614518565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526138b2908490614572565b505050565b81816138c282611ff7565b600e83815481106138cf57fe5b9060005260206000209060090201600201819055506138ec611fdd565b600e83815481106138f957fe5b60009182526020909120600360099092020101556001600160a01b0381161561147c576139268282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061395a57fe5b6000918252602080832060099290920290910160020154938252600f815260408083206001600160a01b0394909416835292905220600101555050565b6004546000906139b09062093a8063ffffffff6137df16565b9050600454600014156139c35750612b8e565b60025460009081904210156139fa576002546139e5904263ffffffff61381e16565b90506139f7818463ffffffff61378616565b91505b6000613a18620186a0610a78600d548661378690919063ffffffff16565b90506000613a2c848363ffffffff61381e16565b60105490915080613a6e5760405162461bcd60e51b81526004018080602001828103825260258152602001806148216025913960400191505060405180910390fd5b60085460408051625903e960e61b8152905160009283926001600160a01b039091169183918391631640fa4091600480820192602092909190829003018186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6020811015613ae557600080fd5b5051905060005b85811015613dde57600e60108281548110613b0357fe5b906000526020600020015481548110613b1857fe5b600091825260209091206008600990920201015460ff16151560011415613b7e576001600e60108381548110613b4a57fe5b906000526020600020015481548110613b5f57fe5b6000918252602090912060056009909202010155600190940193613dd6565b60018c15151415613d60576000600e60108381548110613b9a57fe5b906000526020600020015481548110613baf57fe5b600091825260209091206005600990920201015581613c08576001600e60108381548110613bd957fe5b906000526020600020015481548110613bee57fe5b906000526020600020906009020160050181905550613d60565b600e60108281548110613c1757fe5b906000526020600020015481548110613c2c57fe5b6000918252602090912060099091020160060154610100900460ff16613d60576000836001600160a01b0316635737da14600e60108581548110613c6c57fe5b906000526020600020015481548110613c8157fe5b600091825260209182902060099091020154604080516001600160e01b031960e086901b1681526001600160a01b0390921660048301525160248083019392829003018186803b158015613cd457600080fd5b505afa158015613ce8573d6000803e3d6000fd5b505050506040513d6020811015613cfe57600080fd5b50519050613d1983610a7883620186a063ffffffff61378616565b905080613d24575060015b80600e60108481548110613d3457fe5b906000526020600020015481548110613d4957fe5b906000526020600020906009020160050181905550505b83600e60108381548110613d7057fe5b906000526020600020015481548110613d8557fe5b9060005260206000209060090201600501541115613dd657600e60108281548110613dac57fe5b906000526020600020015481548110613dc157fe5b90600052602060002090600902016005015493505b600101613aec565b5060005b85811015613f4857600e60108281548110613df957fe5b906000526020600020015481548110613e0e57fe5b600091825260209091206008600990920201015460ff16151560011415613f40576000613e8086610a78620186a0600e60108781548110613e4b57fe5b906000526020600020015481548110613e6057fe5b90600052602060002090600902016005015461378690919063ffffffff16565b90506000613e9b620186a0610a788c8563ffffffff61378616565b9050613ead60108481548110610e9557fe5b8a15613f0157613ec3818c63ffffffff6137df16565b600e60108581548110613ed257fe5b906000526020600020015481548110613ee757fe5b906000526020600020906009020160010181905550613f3d565b6000600e60108581548110613f1257fe5b906000526020600020015481548110613f2757fe5b9060005260206000209060090201600101819055505b50505b600101613de2565b5060009350835b8581101561409857600e60108281548110613f6657fe5b906000526020600020015481548110613f7b57fe5b600091825260209091206008600990920201015460ff1661409057600e60108281548110613fa557fe5b906000526020600020015481548110613fba57fe5b906000526020600020906009020160050154600014156140555783156140195783600e60108381548110613fea57fe5b906000526020600020015481548110613fff57fe5b906000526020600020906009020160050181905550614055565b6001600e6010838154811061402a57fe5b90600052602060002001548154811061403f57fe5b9060005260206000209060090201600501819055505b600e6010828154811061406457fe5b90600052602060002001548154811061407957fe5b906000526020600020906009020160050154850194505b600101613f4f565b5060005b858110156141c757600e601082815481106140b357fe5b9060005260206000200154815481106140c857fe5b600091825260209091206008600990920201015460ff166141bf5760006140ff86610a78620186a0600e60108781548110613e4b57fe5b9050600061411a620186a0610a788b8563ffffffff61378616565b905061412c60108481548110610e9557fe5b8a1561418057614142818c63ffffffff6137df16565b600e6010858154811061415157fe5b90600052602060002001548154811061416657fe5b9060005260206000209060090201600101819055506141bc565b6000600e6010858154811061419157fe5b9060005260206000200154815481106141a657fe5b9060005260206000209060090201600101819055505b50505b60010161409c565b505050505050505050505050565b80158061425b575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561422d57600080fd5b505afa158015614241573d6000803e3d6000fd5b505050506040513d602081101561425757600080fd5b5051155b6142965760405162461bcd60e51b81526004018080602001828103825260368152602001806149506036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526138b2908490614572565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061431c57508115155b949350505050565b61432c61372a565b6000546001600160a01b0390811691161461437c576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6001600160a01b0381166143c15760405162461bcd60e51b81526004018080602001828103825260268152602001806147bb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261147c908590614572565b600081836145025760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156144c75781810151838201526020016144af565b50505050905090810190601f1680156144f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161450e57fe5b0495945050505050565b6000818484111561456a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156144c75781810151838201526020016144af565b505050900390565b60606145c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166146239092919063ffffffff16565b8051909150156138b2578080602001905160208110156145e657600080fd5b50516138b25760405162461bcd60e51b815260040180806020018281038252602a815260200180614906602a913960400191505060405180910390fd5b606061431c84846000856060614638856142e8565b614689576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106146c85780518252601f1990920191602091820191016146a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461472a576040519150601f19603f3d011682016040523d82523d6000602084013e61472f565b606091505b5091509150811561474357915061431c9050565b8051156147535780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156144c75781810151838201526020016144af56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736161c5f0dafa4bf86bc666b3e4bc701b3be54f64cd95ce55197aa16e9a93016285beda9bf1ef844bb2472cc053c13557032d6e187a546b4c640e86dcd8201e394e6f2061637469766520706f6f6c73206578697374206f6e207468652070726f746f636f6c54696d656c6f636b206e6f7420616371756972656420666f7220746869732066756e6374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572546865204f70657261746f7220646f6573206e6f742068617665207065726d697373696f6e20746f206d696e7420746f6b656e735468697320706f6f6c20697320616c7265616479206561726e696e6720726577617264735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454696d656c6f636b2074696d65206e6f74206d657400000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220763bed544c44804b9b7dd5c1317f25645f233e0660597ecc282d228c07857ecb64736f6c63430006060033000000000000000000000000914c8e4857a896b6530e06ae1f38cf640fac63d9000000000000000000000000bedd44967d49a70680fd50bd8049273ab225d5900000000000000000000000002c110867ca90e43d372c1c2e92990b00ea32818b000000000000000000000000000000000000000000000000000000006165b808
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102505760003560e01c80621034a8146102555780630527be4c1461027957806306575c8914610293578063081e3eda1461029b5780630962c4f9146102a357806311d44611146102ab57806319597a56146102ca5780631c4b774b146102d25780631cc92439146102ef578063290304841461031b57806329215488146103235780632af9cc411461032b5780632bb06b271461034e5780632eb5d00d14610356578063335bc35214610373578063351e7cb314610390578063441a3e70146103bc57806344f9413c146103df5780634d22d1d11461040d5780635217a58d146104155780635aa6e6751461041d5780635c26ff37146104255780635da5a5581461042d5780636215558f146104355780636a5cfef0146104615780636cf3afee1461049b578063790f3207146104c157806380faa57d146104c9578063874c120b146104d15780639378f7c0146104ee578063958629df1461050b57806395d537df146105305780639d72b2051461054d5780639fe0cae114610555578063b43e2ea91461055d578063b61ccb281461058b578063b6bc192c146105a8578063b9195072146105ce578063bd93a7c7146105d6578063c8aa999a146105f3578063cdfa2c36146105fb578063ce6c2a6f14610627578063cea0196214610653578063d34925d714610670578063da0adedf14610678578063dd03477914610680578063e2bbb1581461069d578063e5baba4c146106c0578063ea8f8299146106dd578063f8008776146106e5578063fe91ca3e1461070b575b600080fd5b61025d610713565b604080516001600160a01b039092168252519081900360200190f35b610281610722565b60408051918252519081900360200190f35b610281610728565b61028161072e565b610281610734565b6102c8600480360360208110156102c157600080fd5b503561073a565b005b6102c86107a0565b6102c8600480360360208110156102e857600080fd5b50356110a1565b6102816004803603604081101561030557600080fd5b50803590602001356001600160a01b0316611482565b6102816114af565b6102c86114b5565b6102c86004803603604081101561034157600080fd5b50803590602001356115d3565b6102816115ea565b61025d6004803603602081101561036c57600080fd5b50356115f0565b6102c86004803603602081101561038957600080fd5b5035611621565b610281600480360360408110156103a657600080fd5b50803590602001356001600160a01b0316611687565b6102c8600480360360408110156103d257600080fd5b50803590602001356116af565b6102c8600480360360408110156103f557600080fd5b506001600160a01b03813516906020013515156119a6565b610281611a45565b610281611a4b565b61025d611a51565b6102c8611a60565b6102c8611b62565b6102c86004803603604081101561044b57600080fd5b50803590602001356001600160a01b0316611c80565b6104876004803603602081101561047757600080fd5b50356001600160a01b0316611f3f565b604080519115158252519081900360200190f35b6102c8600480360360208110156104b157600080fd5b50356001600160a01b0316611f54565b610281611fd7565b610281611fdd565b610281600480360360208110156104e757600080fd5b5035611ff7565b6102c86004803603602081101561050457600080fd5b5035612108565b6102c86004803603604081101561052157600080fd5b5080359060200135151561216e565b6102c86004803603602081101561054657600080fd5b5035612247565b6102c86122fb565b6102c86126e0565b6102c86004803603604081101561057357600080fd5b506001600160a01b038135169060200135151561290a565b610281600480360360208110156105a157600080fd5b503561298d565b6102c8600480360360208110156105be57600080fd5b50356001600160a01b03166129ae565b6102c8612a31565b6102c8600480360360208110156105ec57600080fd5b5035612b91565b6102c8612bf7565b6102816004803603604081101561061157600080fd5b50803590602001356001600160a01b0316612dd2565b6102816004803603604081101561063d57600080fd5b50803590602001356001600160a01b0316612e65565b6102816004803603602081101561066957600080fd5b5035612f21565b6102c8612f49565b61028161304b565b6102816004803603602081101561069657600080fd5b5035613051565b6102c8600480360360408110156106b357600080fd5b5080359060200135613079565b610487600480360360208110156106d657600080fd5b5035613565565b61025d613596565b6102c8600480360360208110156106fb57600080fd5b50356001600160a01b03166135a5565b6102c8613628565b6009546001600160a01b031681565b60105490565b600b5490565b600e5490565b60025490565b61074261372a565b6000546001600160a01b03908116911614610792576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556006601355601455565b600260015414156107e6576040805162461bcd60e51b815260206004820152601f602482015260008051602061479b833981519152604482015290519081900360640190fd5b6002600155600354421015610842576040805162461bcd60e51b815260206004820152601f60248201527f546f6f20736f6f6e20746f20737461727420746869732070726f746f636f6c00604482015290519081900360640190fd5b600c5460ff161515600114156108a8576002544210156108a8576040805162461bcd60e51b815260206004820152601c60248201527b546f6f206561726c7920746f207374617274206e657874207765656b60201b604482015290519081900360640190fd5b600a54604080516334d722c960e01b8152905130926001600160a01b0316916334d722c9916004808301926020929190829003018186803b1580156108ec57600080fd5b505afa158015610900573d6000803e3d6000fd5b505050506040513d602081101561091657600080fd5b50516001600160a01b03161461095d5760405162461bcd60e51b81526004018080602001828103825260348152602001806148ae6034913960400191505060405180910390fd5b600c5460ff166109c357600c805460ff19166001179055600e5460005b818110156109c0576010600e828154811061099157fe5b60009182526020808320600760099093020191909101548354600181810186559484529190922001550161097a565b50505b600b546109d790600163ffffffff61372e16565b600b5560055460009015610aa457610a84620186a0610a78600554600a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4057600080fd5b505afa158015610a54573d6000803e3d6000fd5b505050506040513d6020811015610a6a57600080fd5b50519063ffffffff61378616565b9063ffffffff6137df16565b600554909150610a9c906103e863ffffffff61381e16565b600555610b02565b610aff620186a0610a78600654600a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4057600080fd5b90505b8015610e78576008546040805163fd34ed8d60e01b815290516001600160a01b03909216918391839163fd34ed8d91600480820192602092909190829003018186803b158015610b5157600080fd5b505afa158015610b65573d6000803e3d6000fd5b505050506040513d6020811015610b7b57600080fd5b505110610be557806001600160a01b03166393a5144b836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bc857600080fd5b505af1158015610bdc573d6000803e3d6000fd5b50505050610e22565b6000610c5c826001600160a01b031663fd34ed8d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2357600080fd5b505afa158015610c37573d6000803e3d6000fd5b505050506040513d6020811015610c4d57600080fd5b5051849063ffffffff61381e16565b600a54604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b158015610cb357600080fd5b505af1158015610cc7573d6000803e3d6000fd5b505050506040513d6020811015610cdd57600080fd5b50506040805163fd34ed8d60e01b815290516000916001600160a01b0385169163fd34ed8d91600480820192602092909190829003018186803b158015610d2357600080fd5b505afa158015610d37573d6000803e3d6000fd5b505050506040513d6020811015610d4d57600080fd5b50511115610e2057816001600160a01b03166393a5144b836001600160a01b031663fd34ed8d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d6020811015610dc757600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050505b505b6000610e3d620186a0610a788561271063ffffffff61378616565b600954600a54919250610e63916001600160a01b0390811691168363ffffffff61386016565b610e73838263ffffffff61381e16565b925050505b60005b601054811015610eeb57610ea760108281548110610e9557fe5b906000526020600020015460006138b7565b6000600e60108381548110610eb857fe5b906000526020600020015481548110610ecd57fe5b60009182526020909120600160099092020181019190915501610e7b565b504262093a80016002556004819055610f046001613997565b6008546001600160a01b031660005b60105481101561100257600e60108281548110610f2c57fe5b906000526020600020015481548110610f4157fe5b600091825260209091206008600990920201015460ff16610ffa57816001600160a01b031663ebac3036600e60108481548110610f7a57fe5b906000526020600020015481548110610f8f57fe5b60009182526020822060099091020154604080516001600160e01b031960e086901b1681526001600160a01b039092166004830152516024808301939282900301818387803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050505b600101610f13565b50806001600160a01b031663d114303e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b50505050507fc023f84c6d48b563ace2d5dc883a56d97f06fb48b6ef7c1958f23aacd37caeae600b54600454604051808381526020018281526020019250505060405180910390a15060018055565b806110aa61372a565b6110b382611ff7565b600e83815481106110c057fe5b9060005260206000209060090201600201819055506110dd611fdd565b600e83815481106110ea57fe5b60009182526020909120600360099092020101556001600160a01b03811615611184576111178282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061114b57fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b600c5460ff161515600114801561119c575060025442115b156111a9576111a96107a0565b60006111bc846111b761372a565b612dd2565b9050801561147c576000848152600f60205260408120816111db61372a565b6001600160a01b0316815260208101919091526040016000206002015561120061372a565b6001600160a01b0316326001600160a01b0316148061124557506011600061122661372a565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561143d57600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561129557600080fd5b505afa1580156112a9573d6000803e3d6000fd5b505050506040513d60208110156112bf57600080fd5b50519050818110156112cf578091505b60006112e2866112dd61372a565b612e65565b9050600081156113ce57611303620186a0610a78868563ffffffff61378616565b600854600a5491925061132a916001600160a01b039081169116600063ffffffff6141d516565b600854600a5461134d916001600160a01b0391821691168363ffffffff6141d516565b600854604080516339bae5dd60e01b81526000600482018190526024820185905291516001600160a01b03909316926339bae5dd9260448084019391929182900301818387803b1580156113a057600080fd5b505af11580156113b4573d6000803e3d6000fd5b505050506113cb818561381e90919063ffffffff16565b93505b6113f26113d961372a565b600a546001600160a01b0316908663ffffffff61386016565b6113fa61372a565b604080518981526020810187905280820184905290516001600160a01b0392909216916000805160206148018339815191529181900360600190a250505061147c565b61144561372a565b6001600160a01b03166000805160206147e18339815191528583604051808381526020018281526020019250505060405180910390a25b50505050565b6000828152600f602090815260408083206001600160a01b03851684529091529020600301545b92915050565b600d5481565b6114bd61372a565b6000546001600160a01b0390811691161461150d576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6008806013541461154f5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff161515600114156115ae5762015180601254014210156115ae576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601554600980546001600160a01b0319166001600160a01b03909216919091179055565b6115dd82826116af565b6115e6826110a1565b5050565b60055481565b6000600e82815481106115ff57fe5b60009182526020909120600990910201546001600160a01b031690505b919050565b61162961372a565b6000546001600160a01b03908116911614611679576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556003601355601455565b6000918252600f602090815260408084206001600160a01b0393909316845291905290205490565b600260015414156116f5576040805162461bcd60e51b815260206004820152601f602482015260008051602061479b833981519152604482015290519081900360640190fd5b60026001558161170361372a565b61170c82611ff7565b600e838154811061171957fe5b906000526020600020906009020160020181905550611736611fdd565b600e838154811061174357fe5b60009182526020909120600360099092020101556001600160a01b038116156117dd576117708282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e8054839081106117a457fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b60008311611826576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b61185783600e868154811061183757fe5b90600052602060002090600902016004015461381e90919063ffffffff16565b600e858154811061186457fe5b9060005260206000209060090201600401819055506118c083600f6000878152602001908152602001600020600061189a61372a565b6001600160a01b031681526020810191909152604001600020549063ffffffff61381e16565b6000858152600f60205260408120906118d761372a565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506000600e858154811061190d57fe5b60009182526020909120600990910201546001600160a01b0316905061194b61193461372a565b6001600160a01b038316908663ffffffff61386016565b61195361372a565b6001600160a01b03167fcf7d23a3cbe4e8b36ff82fd1b05b1b17373dc7804b4ebbd6e2356716ef2023728686604051808381526020018281526020019250505060405180910390a2505060018055505050565b6119ae61372a565b6000546001600160a01b039081169116146119fe576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556005601355601580546001600160a01b0319166001600160a01b0384161760ff60a01b1916600160a01b83151502179055600c5460ff166115e6576115e66126e0565b60075481565b60065481565b6000546001600160a01b031690565b611a6861372a565b6000546001600160a01b03908116911614611ab8576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60028060135414611afa5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415611b59576201518060125401421015611b59576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601454600755565b611b6a61372a565b6000546001600160a01b03908116911614611bba576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60098060135414611bfc5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415611c5b576201518060125401421015611c5b576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601554600880546001600160a01b0319166001600160a01b03909216919091179055565b8181611c8b82611ff7565b600e8381548110611c9857fe5b906000526020600020906009020160020181905550611cb5611fdd565b600e8381548110611cc257fe5b60009182526020909120600360099092020101556001600160a01b03811615611d5c57611cef8282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e805483908110611d2357fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b611d6461372a565b6000546001600160a01b03908116911614611db4576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6000611dc08585612dd2565b90508015611f38576000858152600f602090815260408083206001600160a01b0388168085529252822060020191909155611dfa906142e8565b1580611e1f57506001600160a01b03841660009081526011602052604090205460ff16155b15611f0657600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611e6f57600080fd5b505afa158015611e83573d6000803e3d6000fd5b505050506040513d6020811015611e9957600080fd5b5051905081811015611ea9578091505b600a54611ec6906001600160a01b0316868463ffffffff61386016565b604080518781526020810184905260008183015290516001600160a01b03871691600080516020614801833981519152919081900360600190a250611f38565b604080518681526020810183905281516001600160a01b038716926000805160206147e1833981519152928290030190a25b5050505050565b60116020526000908152604090205460ff1681565b611f5c61372a565b6000546001600160a01b03908116911614611fac576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556009601355601580546001600160a01b0319166001600160a01b0392909216919091179055565b60035481565b60006002544210611ff057600254611ff2565b425b905090565b6000600e828154811061200657fe5b9060005260206000209060090201600401546000141561204657600e828154811061202d57fe5b906000526020600020906009020160020154905061161c565b6114a96120db600e848154811061205957fe5b906000526020600020906009020160040154610a78670de0b6b3a76400006120cf600e888154811061208757fe5b9060005260206000209060090201600101546120cf600e8a815481106120a957fe5b9060005260206000209060090201600301546120c3611fdd565b9063ffffffff61381e16565b9063ffffffff61378616565b600e84815481106120e857fe5b90600052602060002090600902016002015461372e90919063ffffffff16565b61211061372a565b6000546001600160a01b03908116911614612160576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556002601355601455565b61217661372a565b6000546001600160a01b039081169116146121c6576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b600e54821061220d576040805162461bcd60e51b815260206004820152600e60248201526d0928840d2e640e8dede40d0d2ced60931b604482015290519081900360640190fd5b80600e838154811061221b57fe5b906000526020600020906009020160060160016101000a81548160ff0219169083151502179055505050565b61224f61372a565b6000546001600160a01b0390811691161461229f576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b620186a08111156122ed576040805162461bcd60e51b81526020600482015260136024820152720a0cae4c6cadce840d2e640e8dede40d0d2ced606b1b604482015290519081900360640190fd5b426012556004601355601455565b61230361372a565b6000546001600160a01b03908116911614612353576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b600780601354146123955760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff161515600114156123f45762015180601254014210156123f4576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b601454600061240282611ff7565b600e838154811061240f57fe5b90600052602060002090600902016002018190555061242c611fdd565b600e838154811061243957fe5b60009182526020909120600360099092020101556001600160a01b038116156124d3576124668282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061249a57fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b60105460005b818110156126c557601454600e601083815481106124f357fe5b90600052602060002001548154811061250857fe5b90600052602060002090600902016007015414156126bd57600854601080546001600160a01b039092169163ebac303691600e918590811061254657fe5b90600052602060002001548154811061255b57fe5b60009182526020822060099091020154604080516001600160e01b031960e086901b1681526001600160a01b039092166004830152516024808301939282900301818387803b1580156125ad57600080fd5b505af11580156125c1573d6000803e3d6000fd5b505050506001600e601083815481106125d657fe5b9060005260206000200154815481106125eb57fe5b906000526020600020906009020160060160006101000a81548160ff0219169083151502179055506000600e6010838154811061262457fe5b90600052602060002001548154811061263957fe5b6000918252602090912060016009909202010155805b60018303811015612696576010816001018154811061266a57fe5b90600052602060002001546010828154811061268257fe5b60009182526020909120015560010161264f565b5060108054806126a257fe5b600190038181906000526020600020016000905590556126c5565b6001016124d9565b50600c5460ff1615156001141561147c5761147c6000613997565b6126e861372a565b6000546001600160a01b03908116911614612738576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6005806013541461277a5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff161515600114156127d95762015180601254014210156127d9576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b60408051610140810182526015546001600160a01b03168152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600160e0820152600e90610100810161283561072e565b8152601554600160a01b900460ff161515602091820152825460018082018555600094855293829020835160099092020180546001600160a01b0319166001600160a01b03909216919091178155908201519281019290925560408101516002830155606081015160038301556080810151600483015560a0810151600583015560c081015160068301805460e084015160ff199182169315159390931761ff001916610100931515840217909155908201516007840155610120909101516008909201805490911691151591909117905550565b61291261372a565b6000546001600160a01b03908116911614612962576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b60006010828154811061299c57fe5b90600052602060002001549050919050565b6129b661372a565b6000546001600160a01b03908116911614612a06576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556008601355601580546001600160a01b0319166001600160a01b0392909216919091179055565b612a3961372a565b6000546001600160a01b03908116911614612a89576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60018060135414612acb5760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415612b2a576201518060125401421015612b2a576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b7fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c84612b53611a51565b601554604080516001600160a01b0393841681529290911660208301528051918290030190a1601554612b8e906001600160a01b0316614324565b50565b612b9961372a565b6000546001600160a01b03908116911614612be9576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556007601355601455565b612bff61372a565b6000546001600160a01b03908116911614612c4f576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60068060135414612c915760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415612cf0576201518060125401421015612cf0576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b600e60145481548110612cff57fe5b906000526020600020906009020160010154600014612d4f5760405162461bcd60e51b81526004018080602001828103825260248152602001806148e26024913960400191505060405180910390fd5b6014546010805460018101825560009182527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67201829055600e8054919290918110612d9657fe5b60009182526020909120600990910201600601805460ff1916911515919091179055600c5460ff16151560011415612b8e57612b8e6000613997565b6000828152600f602090815260408083206001600160a01b038516845290915281206002810154600190910154612e5e9190612e5290670de0b6b3a764000090610a7890612e23906120c38a611ff7565b6000898152600f602090815260408083206001600160a01b038c1684529091529020549063ffffffff61378616565b9063ffffffff61372e16565b9392505050565b6000828152600f602090815260408083206001600160a01b038516845290915281206003015480612e9c57620186a09150506114a9565b600754612ead5760009150506114a9565b600754612ec190829063ffffffff61372e16565b421115612ed25760009150506114a9565b6000612ee4428363ffffffff61381e16565b90506000612f17612f07600754610a78620186a08661378690919063ffffffff16565b620186a09063ffffffff61381e16565b9695505050505050565b6000600e8281548110612f3057fe5b9060005260206000209060090201600101549050919050565b612f5161372a565b6000546001600160a01b03908116911614612fa1576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b60048060135414612fe35760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415613042576201518060125401421015613042576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601454600d55565b60045481565b6000600e828154811061306057fe5b9060005260206000209060090201600401549050919050565b8161308261372a565b61308b82611ff7565b600e838154811061309857fe5b9060005260206000209060090201600201819055506130b5611fdd565b600e83815481106130c257fe5b60009182526020909120600360099092020101556001600160a01b0381161561315c576130ef8282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061312357fe5b6000918252602080832060026009909302019190910154848352600f825260408084206001600160a01b03861685529092529120600101555b600083116131a4576040805162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206465706f73697420360841b604482015290519081900360640190fd5b600e84815481106131b157fe5b600091825260209091206006600990920201015460ff161561321a576040805162461bcd60e51b815260206004820152601d60248201527f5468697320706f6f6c206973206e6f206c6f6e67657220616374697665000000604482015290519081900360640190fd5b600c5460ff1615156001148015613232575060025442115b1561323f5761323f6107a0565b6000848152600f602052604081209061325661372a565b6001600160a01b031681526020810191909152604001600020546132ae576000848152600f60205260408120429161328c61372a565b6001600160a01b031681526020810191909152604001600020600301556133e8565b6000848152600f602052604081206132f390826132c961372a565b6001600160a01b03168152602081019190915260400160002060030154429063ffffffff61381e16565b6000868152600f60205260408120919250906133509061333d908361331661372a565b6001600160a01b03168152602081019190915260400160002054879063ffffffff61372e16565b610a7887620186a063ffffffff61378616565b9050613369620186a0610a78848463ffffffff61378616565b6000878152600f602052604081209193506133b191849161338861372a565b6001600160a01b031681526020810191909152604001600020600301549063ffffffff61372e16565b6000878152600f60205260408120906133c861372a565b6001600160a01b0316815260208101919091526040016000206003015550505b61341983600e86815481106133f957fe5b90600052602060002090600902016004015461372e90919063ffffffff16565b600e858154811061342657fe5b90600052602060002090600902016004018190555061348283600f6000878152602001908152602001600020600061345c61372a565b6001600160a01b031681526020810191909152604001600020549063ffffffff61372e16565b6000858152600f602052604081209061349961372a565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001819055506000600e85815481106134cf57fe5b60009182526020909120600990910201546001600160a01b0316905061350e6134f661372a565b6001600160a01b03831690308763ffffffff61441c16565b61351661372a565b6001600160a01b03167f1599c0fcf897af5babc2bfcf707f5dc050f841b044d97c3251ecec35b9abf80b8686604051808381526020018281526020019250505060405180910390a25050505050565b6000600e828154811061357457fe5b6000918252602090912060099091020160060154610100900460ff1692915050565b6008546001600160a01b031681565b6135ad61372a565b6000546001600160a01b039081169116146135fd576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b426012556001601355601580546001600160a01b0319166001600160a01b0392909216919091179055565b61363061372a565b6000546001600160a01b03908116911614613680576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b600380601354146136c25760405162461bcd60e51b81526004018080602001828103825260278152602001806148466027913960400191505060405180910390fd5b6000601355600c5460ff16151560011415613721576201518060125401421015613721576040805162461bcd60e51b81526020600482015260156024820152600080516020614930833981519152604482015290519081900360640190fd5b50601454600655565b3390565b600082820183811015612e5e576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b600082613795575060006114a9565b828202828482816137a257fe5b0414612e5e5760405162461bcd60e51b815260040180806020018281038252602181526020018061486d6021913960400191505060405180910390fd5b6000612e5e83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250614476565b6000612e5e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614518565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526138b2908490614572565b505050565b81816138c282611ff7565b600e83815481106138cf57fe5b9060005260206000209060090201600201819055506138ec611fdd565b600e83815481106138f957fe5b60009182526020909120600360099092020101556001600160a01b0381161561147c576139268282612dd2565b6000838152600f602090815260408083206001600160a01b0386168452909152902060020155600e80548390811061395a57fe5b6000918252602080832060099290920290910160020154938252600f815260408083206001600160a01b0394909416835292905220600101555050565b6004546000906139b09062093a8063ffffffff6137df16565b9050600454600014156139c35750612b8e565b60025460009081904210156139fa576002546139e5904263ffffffff61381e16565b90506139f7818463ffffffff61378616565b91505b6000613a18620186a0610a78600d548661378690919063ffffffff16565b90506000613a2c848363ffffffff61381e16565b60105490915080613a6e5760405162461bcd60e51b81526004018080602001828103825260258152602001806148216025913960400191505060405180910390fd5b60085460408051625903e960e61b8152905160009283926001600160a01b039091169183918391631640fa4091600480820192602092909190829003018186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6020811015613ae557600080fd5b5051905060005b85811015613dde57600e60108281548110613b0357fe5b906000526020600020015481548110613b1857fe5b600091825260209091206008600990920201015460ff16151560011415613b7e576001600e60108381548110613b4a57fe5b906000526020600020015481548110613b5f57fe5b6000918252602090912060056009909202010155600190940193613dd6565b60018c15151415613d60576000600e60108381548110613b9a57fe5b906000526020600020015481548110613baf57fe5b600091825260209091206005600990920201015581613c08576001600e60108381548110613bd957fe5b906000526020600020015481548110613bee57fe5b906000526020600020906009020160050181905550613d60565b600e60108281548110613c1757fe5b906000526020600020015481548110613c2c57fe5b6000918252602090912060099091020160060154610100900460ff16613d60576000836001600160a01b0316635737da14600e60108581548110613c6c57fe5b906000526020600020015481548110613c8157fe5b600091825260209182902060099091020154604080516001600160e01b031960e086901b1681526001600160a01b0390921660048301525160248083019392829003018186803b158015613cd457600080fd5b505afa158015613ce8573d6000803e3d6000fd5b505050506040513d6020811015613cfe57600080fd5b50519050613d1983610a7883620186a063ffffffff61378616565b905080613d24575060015b80600e60108481548110613d3457fe5b906000526020600020015481548110613d4957fe5b906000526020600020906009020160050181905550505b83600e60108381548110613d7057fe5b906000526020600020015481548110613d8557fe5b9060005260206000209060090201600501541115613dd657600e60108281548110613dac57fe5b906000526020600020015481548110613dc157fe5b90600052602060002090600902016005015493505b600101613aec565b5060005b85811015613f4857600e60108281548110613df957fe5b906000526020600020015481548110613e0e57fe5b600091825260209091206008600990920201015460ff16151560011415613f40576000613e8086610a78620186a0600e60108781548110613e4b57fe5b906000526020600020015481548110613e6057fe5b90600052602060002090600902016005015461378690919063ffffffff16565b90506000613e9b620186a0610a788c8563ffffffff61378616565b9050613ead60108481548110610e9557fe5b8a15613f0157613ec3818c63ffffffff6137df16565b600e60108581548110613ed257fe5b906000526020600020015481548110613ee757fe5b906000526020600020906009020160010181905550613f3d565b6000600e60108581548110613f1257fe5b906000526020600020015481548110613f2757fe5b9060005260206000209060090201600101819055505b50505b600101613de2565b5060009350835b8581101561409857600e60108281548110613f6657fe5b906000526020600020015481548110613f7b57fe5b600091825260209091206008600990920201015460ff1661409057600e60108281548110613fa557fe5b906000526020600020015481548110613fba57fe5b906000526020600020906009020160050154600014156140555783156140195783600e60108381548110613fea57fe5b906000526020600020015481548110613fff57fe5b906000526020600020906009020160050181905550614055565b6001600e6010838154811061402a57fe5b90600052602060002001548154811061403f57fe5b9060005260206000209060090201600501819055505b600e6010828154811061406457fe5b90600052602060002001548154811061407957fe5b906000526020600020906009020160050154850194505b600101613f4f565b5060005b858110156141c757600e601082815481106140b357fe5b9060005260206000200154815481106140c857fe5b600091825260209091206008600990920201015460ff166141bf5760006140ff86610a78620186a0600e60108781548110613e4b57fe5b9050600061411a620186a0610a788b8563ffffffff61378616565b905061412c60108481548110610e9557fe5b8a1561418057614142818c63ffffffff6137df16565b600e6010858154811061415157fe5b90600052602060002001548154811061416657fe5b9060005260206000209060090201600101819055506141bc565b6000600e6010858154811061419157fe5b9060005260206000200154815481106141a657fe5b9060005260206000209060090201600101819055505b50505b60010161409c565b505050505050505050505050565b80158061425b575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561422d57600080fd5b505afa158015614241573d6000803e3d6000fd5b505050506040513d602081101561425757600080fd5b5051155b6142965760405162461bcd60e51b81526004018080602001828103825260368152602001806149506036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526138b2908490614572565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061431c57508115155b949350505050565b61432c61372a565b6000546001600160a01b0390811691161461437c576040805162461bcd60e51b8152602060048201819052602482015260008051602061488e833981519152604482015290519081900360640190fd5b6001600160a01b0381166143c15760405162461bcd60e51b81526004018080602001828103825260268152602001806147bb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce8091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261147c908590614572565b600081836145025760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156144c75781810151838201526020016144af565b50505050905090810190601f1680156144f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161450e57fe5b0495945050505050565b6000818484111561456a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156144c75781810151838201526020016144af565b505050900390565b60606145c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166146239092919063ffffffff16565b8051909150156138b2578080602001905160208110156145e657600080fd5b50516138b25760405162461bcd60e51b815260040180806020018281038252602a815260200180614906602a913960400191505060405180910390fd5b606061431c84846000856060614638856142e8565b614689576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106146c85780518252601f1990920191602091820191016146a9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461472a576040519150601f19603f3d011682016040523d82523d6000602084013e61472f565b606091505b5091509150811561474357915061431c9050565b8051156147535780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156144c75781810151838201526020016144af56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736161c5f0dafa4bf86bc666b3e4bc701b3be54f64cd95ce55197aa16e9a93016285beda9bf1ef844bb2472cc053c13557032d6e187a546b4c640e86dcd8201e394e6f2061637469766520706f6f6c73206578697374206f6e207468652070726f746f636f6c54696d656c6f636b206e6f7420616371756972656420666f7220746869732066756e6374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572546865204f70657261746f7220646f6573206e6f742068617665207065726d697373696f6e20746f206d696e7420746f6b656e735468697320706f6f6c20697320616c7265616479206561726e696e6720726577617264735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454696d656c6f636b2074696d65206e6f74206d657400000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220763bed544c44804b9b7dd5c1317f25645f233e0660597ecc282d228c07857ecb64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000914c8e4857a896b6530e06ae1f38cf640fac63d9000000000000000000000000bedd44967d49a70680fd50bd8049273ab225d5900000000000000000000000002c110867ca90e43d372c1c2e92990b00ea32818b000000000000000000000000000000000000000000000000000000006165b808
-----Decoded View---------------
Arg [0] : _treasury (address): 0x914C8e4857a896b6530e06Ae1f38cf640fAc63D9
Arg [1] : _stbzbank (address): 0xBEDD44967d49A70680FD50bD8049273ab225d590
Arg [2] : _stabilize (address): 0x2C110867CA90e43D372C1C2E92990B00EA32818b
Arg [3] : startTime (uint256): 1634056200
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000914c8e4857a896b6530e06ae1f38cf640fac63d9
Arg [1] : 000000000000000000000000bedd44967d49a70680fd50bd8049273ab225d590
Arg [2] : 0000000000000000000000002c110867ca90e43d372c1c2e92990b00ea32818b
Arg [3] : 000000000000000000000000000000000000000000000000000000006165b808
Deployed ByteCode Sourcemap
24629:28693:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24629:28693:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;25688:39:0;;;:::i;:::-;;;;-1:-1:-1;;;;;25688:39:0;;;;;;;;;;;;;;29256:102;;;:::i;:::-;;;;;;;;;;;;;;;;28939:92;;;:::i;29149:95::-;;;:::i;29043:98::-;;;:::i;50340:165::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;50340:165:0;;:::i;:::-;;32021:3437;;;:::i;42899:1846::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42899:1846:0;;:::i;30083:158::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30083:158:0;;;;;;-1:-1:-1;;;;;30083:158:0;;:::i;25972:38::-;;;:::i;52712:153::-;;;:::i;42769:122::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42769:122:0;;;;;;;:::i;25371:34::-;;;:::i;30834:127::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30834:127:0;;:::i;48270:179::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;48270:179:0;;:::i;29929:142::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29929:142:0;;;;;;-1:-1:-1;;;;;29929:142:0;;:::i;42170:511::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42170:511:0;;;;;;;:::i;49236:366::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;49236:366:0;;;;;;;;;;:::i;25574:33::-;;;:::i;25472:35::-;;;:::i;22891:84::-;;;:::i;48039:125::-;;;:::i;53155:135::-;;;:::i;45343:938::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45343:938:0;;;;;;-1:-1:-1;;;;;45343:938:0;;:::i;27541:48::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27541:48:0;-1:-1:-1;;;;;27541:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;52959:184;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;52959:184:0;-1:-1:-1;;;;;52959:184:0;;:::i;25176:32::-;;;:::i;29495:161::-;;;:::i;31119:530::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31119:530:0;;:::i;47859:168::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;47859:168:0;;:::i;45022:217::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45022:217:0;;;;;;;;;:::i;48738:242::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;48738:242:0;;:::i;51271:1138::-;;;:::i;49614:598::-;;;:::i;44791:219::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;44791:219:0;;;;;;;;;;:::i;29370:113::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29370:113:0;;:::i;52507:193::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;52507:193:0;-1:-1:-1;;;;;52507:193:0;;:::i;47534:204::-;;;:::i;51091:168::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;51091:168:0;;:::i;50517:442::-;;;:::i;31657:327::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31657:327:0;;;;;;-1:-1:-1;;;;;31657:327:0;;:::i;30301:521::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30301:521:0;;;;;;-1:-1:-1;;;;;30301:521:0;;:::i;29668:119::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29668:119:0;;:::i;48992:139::-;;;:::i;25269:27::-;;;:::i;29799:118::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29799:118:0;;:::i;40622:1483::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40622:1483:0;;;;;;;:::i;30973:134::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30973:134:0;;:::i;25651:30::-;;;:::i;47336:186::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;47336:186:0;-1:-1:-1;;;;;47336:186:0;;:::i;48461:139::-;;;:::i;25688:39::-;;;-1:-1:-1;;;;;25688:39:0;;:::o;29256:102::-;29332:11;:18;29256:102;:::o;28939:92::-;29011:12;;28939:92;:::o;29149:95::-;29219:10;:17;29149:95;:::o;29043:98::-;29118:15;;29043:98;:::o;50340:165::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;50434:3:::1;50417:14;:20:::0;50464:1:::1;50448:13;:17:::0;50476:14:::1;:21:::0;50340:165::o;32021:3437::-;20936:1;21542:7;;:19;;21534:63;;;;;-1:-1:-1;;;21534:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21534:63:0;;;;;;;;;;;;;;;20936:1;21675:7;:18;32090:17:::1;::::0;32083:3:::1;:24;;32075:67;;;::::0;;-1:-1:-1;;;32075:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32156:15;::::0;::::1;;:23;;:15:::0;:23:::1;32153:189;;;32283:15;;32276:3;:22;;32268:62;;;::::0;;-1:-1:-1;;;32268:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32268:62:0;;;;;;;;;;;;;::::1;;32360:4;::::0;:20:::1;::::0;;-1:-1:-1;;;32360:20:0;;;;32392:4:::1;::::0;-1:-1:-1;;;;;32360:4:0::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:4;:20;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32360:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32360:20:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32360:20:0;-1:-1:-1;;;;;32360:37:0::1;;32352:101;;;;-1:-1:-1::0;;;32352:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32477:15;::::0;::::1;;32474:336;;32564:15;:22:::0;;-1:-1:-1;;32564:22:0::1;32582:4;32564:22;::::0;;32659:10:::1;:17:::0;32564:15:::1;32691:108;32714:6;32710:1;:10;32691:108;;;32745:11;32762:10;32773:1;32762:13;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:13;::::0;;::::1;;:20:::0;;;::::1;::::0;27:10:-1;;39:1:::1;23:18:::0;;::::1;45:23:::0;;32745:38:0;;;;;;;::::1;::::0;32722:3:::1;32691:108;;;;32474:336;;32835:12;::::0;:19:::1;::::0;32852:1:::1;32835:19;:16;:19;:::i;:::-;32820:12;:34:::0;32989:12:::1;::::0;32875:20:::1;::::0;32989:16;32986:369:::1;;33040:57;24978:6;33040:36;33063:12;;33040:4;;;;;;;;;-1:-1:-1::0;;;;;33040:4:0::1;-1:-1:-1::0;;;;;33040:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33040:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33040:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33040:18:0;;:36:::1;:22;:36;:::i;:::-;:40:::0;:57:::1;:40;:57;:::i;:::-;33131:12;::::0;33025:72;;-1:-1:-1;33131:22:0::1;::::0;33148:4:::1;33131:22;:16;:22;:::i;:::-;33116:12;:37:::0;32986:369:::1;;;33279:60;24978:6;33279:39;33302:15;;33279:4;;;;;;;;;-1:-1:-1::0;;;;;33279:4:0::1;-1:-1:-1::0;;;;;33279:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;33279:60:0;33264:75;;32986:369;33423:16:::0;;33420:939:::1;;33494:15;::::0;33532:21:::1;::::0;;-1:-1:-1;;;33532:21:0;;;;-1:-1:-1;;;;;33494:15:0;;::::1;::::0;33557:12;;33494:15;;33532:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;33494:15;33532:21;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33532:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33532:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33532:21:0;:37:::1;33529:530;;33661:4;-1:-1:-1::0;;;;;33661:17:0::1;;33679:12;33661:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33661:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33661:31:0;;;;33529:530;;;33739:18;33760:39;33777:4;-1:-1:-1::0;;;;;33777:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33777:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33777:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33777:21:0;33760:12;;:39:::1;:16;:39;:::i;:::-;33861:4;::::0;:36:::1;::::0;;-1:-1:-1;;;33861:36:0;;33879:4:::1;33861:36;::::0;::::1;::::0;;;;;;;;;33739:60;;-1:-1:-1;;;;;;33861:4:0;;::::1;::::0;:9:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;;:4:::1;::::0;:36;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33861:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33861:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;33923:21:0::1;::::0;;-1:-1:-1;;;33923:21:0;;;;33947:1:::1;::::0;-1:-1:-1;;;;;33923:19:0;::::1;::::0;::::1;::::0;:21:::1;::::0;;::::1;::::0;33861:36:::1;::::0;33923:21;;;;;;;;:19;:21;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33923:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33923:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33923:21:0;:25:::1;33920:120;;;33976:4;-1:-1:-1::0;;;;;33976:17:0::1;;33994:4;-1:-1:-1::0;;;;;33994:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33994:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33994:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33994:21:0;33976:40:::1;::::0;;-1:-1:-1;;;;;;33976:40:0::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;-1:-1:-1;;33976:40:0;;;;;;;-1:-1:-1;33976:40:0;;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33976:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33976:40:0;;;;33920:120;33529:530;;34142:16;34161:50;24978:6;34161:29;:12:::0;25022:5:::1;34161:29;:16;:29;:::i;:50::-;34248:24;::::0;34230:4:::1;::::0;34142:69;;-1:-1:-1;34230:53:0::1;::::0;-1:-1:-1;;;;;34230:4:0;;::::1;::::0;34248:24:::1;34142:69:::0;34230:53:::1;:17;:53;:::i;:::-;34317:26;:12:::0;34334:8;34317:26:::1;:16;:26;:::i;:::-;34302:41;;33420:939;;;34503:9;34499:231;34522:11;:18:::0;34518:22;::::1;34499:231;;;34561:50;34585:11;34597:1;34585:14;;;;;;;;;;;;;;;;34608:1;34561:23;:50::i;:::-;34666:1;34626:10;34637:11;34649:1;34637:14;;;;;;;;;;;;;;;;34626:26;;;;;;;;;::::0;;;::::1;::::0;;;:37:::1;:26;::::0;;::::1;;:37:::0;::::1;:41:::0;;;;34542:3:::1;34499:231;;;-1:-1:-1::0;34758:3:0::1;24889:6;34758:21;34740:15;:39:::0;34790:12:::1;:27:::0;;;34864:26:::1;34885:4;34864:20;:26::i;:::-;35072:15;::::0;-1:-1:-1;;;;;35072:15:0::1;35037:18;35103:238;35126:11;:18:::0;35122:22;::::1;35103:238;;;35172:10;35183:11;35195:1;35183:14;;;;;;;;;;;;;;;;35172:26;;;;;;;;;::::0;;;::::1;::::0;;;:35:::1;:26;::::0;;::::1;;:35;::::0;::::1;;35169:157;;35240:4;-1:-1:-1::0;;;;;35240:25:0::1;;35266:10;35277:11;35289:1;35277:14;;;;;;;;;;;;;;;;35266:26;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;:39:::0;35240:66:::1;::::0;;-1:-1:-1;;;;;;35240:66:0::1;::::0;;;;;;-1:-1:-1;;;;;35266:39:0;;::::1;35240:66;::::0;::::1;::::0;;;;;;;35266:26;35240:66;;;;;35266:26;35240:66;;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35240:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35240:66:0;;;;35169:157;35146:3;;35103:238;;;;35355:4;-1:-1:-1::0;;;;;35355:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35355:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35355:24:0;;;;21706:1;35416:34;35424:12;;35437;;35416:34;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20892:1:0;21854:22;;32021:3437::o;42899:1846::-;42958:4;42964:12;:10;:12::i;:::-;28579:20;28594:4;28579:14;:20::i;:::-;28539:10;28550:4;28539:16;;;;;;;;;;;;;;;;;;:37;;:60;;;;28644:26;:24;:26::i;:::-;28610:10;28621:4;28610:16;;;;;;;;;;;;;;;;:31;:16;;;;;:31;:60;-1:-1:-1;;;;;28685:21:0;;;28681:211;;28765:26;28778:4;28783:7;28765:12;:26::i;:::-;28723:14;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;28723:23:0;;;;;;;;;:39;;:68;28843:10;:16;;28732:4;;28843:16;;;;;;;;;;;;;;:37;:16;;;;;:37;;;;;28806:14;;;:8;:14;;;;;;-1:-1:-1;;;;;28806:23:0;;;;;;;;;:34;;:74;28681:211;42992:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;:48:::0;::::1;;;;43025:15;;43019:3;:21;42992:48;42989:184;;;43148:13;:11;:13::i;:::-;43185:14;43202:31;43215:4;43220:12;:10;:12::i;:::-;43202;:31::i;:::-;43185:48:::0;-1:-1:-1;43248:10:0;;43244:1494:::1;;43322:1;43275:14:::0;;;:8:::1;:14;::::0;;;;43322:1;43290:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;43275:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43275:28:0;:44:::1;;:48:::0;43475:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;43462:25:0::1;:9;-1:-1:-1::0;;;;;43462:25:0::1;;:68;;;;43491:16;:30;43508:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43491:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43491:30:0;;::::1;;:39;43462:68;43458:1269;;;43647:4;::::0;:29:::1;::::0;;-1:-1:-1;;;43647:29:0;;43670:4:::1;43647:29;::::0;::::1;::::0;;;43621:23:::1;::::0;-1:-1:-1;;;;;43647:4:0::1;::::0;:14:::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:4;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;43647:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;43647:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;43647:29:0;;-1:-1:-1;43698:24:0;;::::1;43695:157;;;43817:15;43808:24;;43695:157;43950:19;43972:37;43990:4;43996:12;:10;:12::i;:::-;43972:17;:37::i;:::-;43950:59:::0;-1:-1:-1;44028:12:0::1;44066:15:::0;;44063:419:::1;;44112:44;24978:6;44112:23;:6:::0;44123:11;44112:23:::1;:10;:23;:::i;:44::-;44250:15;::::0;44233:4:::1;::::0;44105:51;;-1:-1:-1;44233:36:0::1;::::0;-1:-1:-1;;;;;44233:4:0;;::::1;::::0;44250:15:::1;;44233:36;:16;:36;:::i;:::-;44309:15;::::0;44292:4:::1;::::0;:39:::1;::::0;-1:-1:-1;;;;;44292:4:0;;::::1;::::0;44309:15:::1;44326:4:::0;44292:39:::1;:16;:39;:::i;:::-;44368:15;::::0;44354:60:::1;::::0;;-1:-1:-1;;;44354:60:0;;44368:15:::1;44354:60;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;44368:15:0;;::::1;::::0;44354:42:::1;::::0;:60;;;;;44368:15;;44354:60;;;;;;44368:15;;44354:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;44354:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;44354:60:0;;;;44446:16;44457:4;44446:6;:10;;:16;;;;:::i;:::-;44437:25;;44063:419;44518:39;44536:12;:10;:12::i;:::-;44518:4;::::0;-1:-1:-1;;;;;44518:4:0::1;::::0;44550:6;44518:39:::1;:17;:39;:::i;:::-;44598:12;:10;:12::i;:::-;44581:44;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;44581:44:0;;;::::1;::::0;-1:-1:-1;;;;;;;;;;;44581:44:0;;;;;;;::::1;43458:1269;;;;;;44690:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;44671:40:0::1;-1:-1:-1::0;;;;;;;;;;;44684:4:0::1;44704:6;44671:40;;;;;;;;;;;;;;;;;;;;;;;;43458:1269;28902:1;42899:1846:::0;;;:::o;30083:158::-;30163:7;30190:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;30190:24:0;;;;;;;;;:43;;;30083:158;;;;;:::o;25972:38::-;;;;:::o;52712:153::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;52799:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;52840:17:0::2;::::0;52813:24:::2;:44:::0;;-1:-1:-1;;;;;;52813:44:0::2;-1:-1:-1::0;;;;;52840:17:0;;::::2;52813:44:::0;;;::::2;::::0;;52712:153::o;42769:122::-;42834:23;42843:4;42849:7;42834:8;:23::i;:::-;42868:15;42878:4;42868:9;:15::i;:::-;42769:122;;:::o;25371:34::-;;;;:::o;30834:127::-;30897:7;30924:10;30935:4;30924:16;;;;;;;;;;;;;;;;;;;;;:29;-1:-1:-1;;;;;30924:29:0;;-1:-1:-1;30834:127:0;;;;:::o;48270:179::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;48375:3:::1;48358:14;:20:::0;48405:1:::1;48389:13;:17:::0;48417:14:::1;:24:::0;48270:179::o;29929:142::-;30005:7;30032:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;30032:24:0;;;;;;;;;;;:31;;29929:142::o;42170:511::-;20936:1;21542:7;;:19;;21534:63;;;;;-1:-1:-1;;;21534:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21534:63:0;;;;;;;;;;;;;;;20936:1;21675:7;:18;42257:4;42263:12:::1;:10;:12::i;:::-;28579:20;28594:4;28579:14;:20::i;:::-;28539:10;28550:4;28539:16;;;;;;;;;;;;;;;;;;:37;;:60;;;;28644:26;:24;:26::i;:::-;28610:10;28621:4;28610:16;;;;;;;;;::::0;;;::::1;::::0;;;:31:::1;:16;::::0;;::::1;;:31;:60:::0;-1:-1:-1;;;;;28685:21:0;::::1;::::0;28681:211:::1;;28765:26;28778:4;28783:7;28765:12;:26::i;:::-;28723:14;::::0;;;:8:::1;:14;::::0;;;;;;;-1:-1:-1;;;;;28723:23:0;::::1;::::0;;;;;;;:39:::1;;:68:::0;28843:10:::1;:16:::0;;28732:4;;28843:16;::::1;;;;;;::::0;;;::::1;::::0;;;:37:::1;:16;::::0;;::::1;;:37:::0;;;::::1;::::0;28806:14;;;:8:::1;:14:::0;;;;;;-1:-1:-1;;;;;28806:23:0;::::1;::::0;;;;;;;:34:::1;;:74:::0;28681:211:::1;42305:1:::2;42296:6;:10;42288:40;;;::::0;;-1:-1:-1;;;42288:40:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;42288:40:0;;;;;;;;;;;;;::::2;;42370;42403:6;42370:10;42381:4;42370:16;;;;;;;;;;;;;;;;;;:28;;;:32;;:40;;;;:::i;:::-;42339:10;42350:4;42339:16;;;;;;;;;;;;;;;;;;:28;;:71;;;;42459:47;42499:6;42459:8;:14;42468:4;42459:14;;;;;;;;;;;:28;42474:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42459:28:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;42459:28:0;:35;;:47:::2;:39;:47;:::i;:::-;42421:14;::::0;;;:8:::2;:14;::::0;;;;;42436:12:::2;:10;:12::i;:::-;-1:-1:-1::0;;;;;42421:28:0::2;-1:-1:-1::0;;;;;42421:28:0::2;;;;;;;;;;;;:35;;:85;;;;42517:12;42539:10;42550:4;42539:16;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:29:::0;-1:-1:-1;;;;;42539:29:0::2;::::0;-1:-1:-1;42580:40:0::2;42599:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42580:18:0;::::2;::::0;42613:6;42580:40:::2;:18;:40;:::i;:::-;42652:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42636:37:0::2;;42646:4;42666:6;42636:37;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;20892:1:0;21854:22;;-1:-1:-1;;;42170:511:0:o;49236:366::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;49345:3:::1;49328:14;:20:::0;49375:1:::1;49359:13;:17:::0;49387::::1;:28:::0;;-1:-1:-1;;;;;;49387:28:0::1;-1:-1:-1::0;;;;;49387:28:0;::::1;;-1:-1:-1::0;;;;49426:24:0::1;-1:-1:-1::0;;;49426:24:0;::::1;;;;::::0;;49464:15:::1;::::0;49426:24:::1;49464:15;49461:134;;49504:18;:16;:18::i;25574:33::-:0;;;;:::o;25472:35::-;;;;:::o;22891:84::-;22934:7;22961:6;-1:-1:-1;;;;;22961:6:0;22891:84;:::o;48039:125::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;48117:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;48142:14:0::2;::::0;48131:8:::2;:25:::0;48039:125::o;53155:135::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;53233:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;53265:17:0::2;::::0;53247:15:::2;:35:::0;;-1:-1:-1;;;;;;53247:35:0::2;-1:-1:-1::0;;;;;53265:17:0;;::::2;53247:35:::0;;;::::2;::::0;;53155:135::o;45343:938::-;45424:4;45430:9;28579:20;28594:4;28579:14;:20::i;:::-;28539:10;28550:4;28539:16;;;;;;;;;;;;;;;;;;:37;;:60;;;;28644:26;:24;:26::i;:::-;28610:10;28621:4;28610:16;;;;;;;;;;;;;;;;:31;:16;;;;;:31;:60;-1:-1:-1;;;;;28685:21:0;;;28681:211;;28765:26;28778:4;28783:7;28765:12;:26::i;:::-;28723:14;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;28723:23:0;;;;;;;;;:39;;:68;28843:10;:16;;28732:4;;28843:16;;;;;;;;;;;;;;:37;:16;;;;;:37;;;;;28806:14;;;:8;:14;;;;;;-1:-1:-1;;;;;28806:23:0;;;;;;;;;:34;;:74;28681:211;23118:12:::1;:10;:12::i;:::-;23108:6;::::0;-1:-1:-1;;;;;23108:6:0;;::::1;:22:::0;::::1;;23100:67;;;::::0;;-1:-1:-1;;;23100:67:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;::::1;;45467:14:::2;45484:28;45497:4;45502:9;45484:12;:28::i;:::-;45467:45:::0;-1:-1:-1;45527:10:0;;45523:751:::2;;45598:1;45554:14:::0;;;:8:::2;:14;::::0;;;;;;;-1:-1:-1;;;;;45554:25:0;::::2;::::0;;;;;;;:41:::2;;:45:::0;;;;45739:22:::2;::::0;:20:::2;:22::i;:::-;45738:23;:63;;;-1:-1:-1::0;;;;;;45765:27:0;::::2;;::::0;;;:16:::2;:27;::::0;;;;;::::2;;:36;45738:63;45734:529;;;45848:4;::::0;:29:::2;::::0;;-1:-1:-1;;;45848:29:0;;45871:4:::2;45848:29;::::0;::::2;::::0;;;45822:23:::2;::::0;-1:-1:-1;;;;;45848:4:0::2;::::0;:14:::2;::::0;:29;;;;;::::2;::::0;;;;;;;;:4;:29;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;45848:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;45848:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;45848:29:0;;-1:-1:-1;45899:24:0;;::::2;45896:152;;;46013:15;46004:24;;45896:152;46066:4;::::0;:36:::2;::::0;-1:-1:-1;;;;;46066:4:0::2;46084:9:::0;46095:6;46066:36:::2;:17;:36;:::i;:::-;46126:38;::::0;;;;;::::2;::::0;::::2;::::0;;;46162:1:::2;46126:38:::0;;;;;;-1:-1:-1;;;;;46126:38:0;::::2;::::0;-1:-1:-1;;;;;;;;;;;46126:38:0;;;;;;;;::::2;45734:529;;;;46210:37;::::0;;;;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;46210:37:0;::::2;::::0;-1:-1:-1;;;;;;;;;;;46210:37:0;;;;;;::::2;45734:529;23178:1;45343:938:::0;;;;:::o;27541:48::-;;;;;;;;;;;;;;;:::o;52959:184::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;53058:3:::1;53041:14;:20:::0;53088:1:::1;53072:13;:17:::0;53100::::1;:28:::0;;-1:-1:-1;;;;;;53100:28:0::1;-1:-1:-1::0;;;;;53100:28:0;;;::::1;::::0;;;::::1;::::0;;52959:184::o;25176:32::-;;;;:::o;29495:161::-;29552:7;29597:15;;29579;:33;:69;;29633:15;;29579:69;;;29615:15;29579:69;29572:76;;29495:161;:::o;31119:530::-;31178:7;31202:10;31213:4;31202:16;;;;;;;;;;;;;;;;;;:28;;;31234:1;31202:33;31198:110;;;31259:10;31270:4;31259:16;;;;;;;;;;;;;;;;;;:37;;;31252:44;;;;31198:110;31338:303;31398:228;31597:10;31608:4;31597:16;;;;;;;;;;;;;;;;;;:28;;;31398:172;31565:4;31398:140;31510:10;31521:4;31510:16;;;;;;;;;;;;;;;;;;:27;;;31398:85;31451:10;31462:4;31451:16;;;;;;;;;;;;;;;;;;:31;;;31398:26;:24;:26::i;:::-;:52;:85;:52;:85;:::i;:::-;:111;:140;:111;:140;:::i;:228::-;31338:10;31349:4;31338:16;;;;;;;;;;;;;;;;;;:37;;;:41;;:303;;;;:::i;47859:168::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;47955:3:::1;47938:14;:20:::0;47985:1:::1;47969:13;:17:::0;47997:14:::1;:22:::0;47859:168::o;45022:217::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;45137:10:::1;:17:::0;45130:24;::::1;45122:51;;;::::0;;-1:-1:-1;;;45122:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45122:51:0;;;;;;;;;;;;;::::1;;45222:9;45184:10;45195:4;45184:16;;;;;;;;;;;;;;;;;;:35;;;:47;;;;;;;;;;;;;;;;;;45022:217:::0;;:::o;48738:242::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;48847:6:::1;48835:8;:18;;48827:50;;;::::0;;-1:-1:-1;;;48827:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;48827:50:0;;;;;;;;;;;;;::::1;;48905:3;48888:14;:20:::0;48935:1:::1;48919:13;:17:::0;48947:14:::1;:25:::0;48738:242::o;51271:1138::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;51351:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;51373:14:::2;;51397:1;28579:20;28594:4;28579:14;:20::i;:::-;28539:10;28550:4;28539:16;;;;;;;;;;;;;;;;;;:37;;:60;;;;28644:26;:24;:26::i;:::-;28610:10;28621:4;28610:16;;;;;;;;;::::0;;;::::2;::::0;;;:31:::2;:16;::::0;;::::2;;:31;:60:::0;-1:-1:-1;;;;;28685:21:0;::::2;::::0;28681:211:::2;;28765:26;28778:4;28783:7;28765:12;:26::i;:::-;28723:14;::::0;;;:8:::2;:14;::::0;;;;;;;-1:-1:-1;;;;;28723:23:0;::::2;::::0;;;;;;;:39:::2;;:68:::0;28843:10:::2;:16:::0;;28732:4;;28843:16;::::2;;;;;;::::0;;;::::2;::::0;;;:37:::2;:16;::::0;;::::2;;:37:::0;;;::::2;::::0;28806:14;;;:8:::2;:14:::0;;;;;;-1:-1:-1;;;;;28806:23:0;::::2;::::0;;;;;;;:34:::2;;:74:::0;28681:211:::2;51429:11:::3;:18:::0;51412:14:::3;51458:810;51481:6;51477:1;:10;51458:810;;;51548:14;;51511:10;51522:11;51534:1;51522:14;;;;;;;;;;;;;;;;51511:26;;;;;;;;;;;;;;;;;;:33;;;:51;51508:749;;;51725:15;::::0;51774:11:::3;:14:::0;;-1:-1:-1;;;;;51725:15:0;;::::3;::::0;51711:51:::3;::::0;51763:10:::3;::::0;51786:1;;51774:14;::::3;;;;;;;;;;;;;51763:26;;;;;;;;;::::0;;;::::3;::::0;;::::3;::::0;;::::3;;:39:::0;51711:92:::3;::::0;;-1:-1:-1;;;;;;51711:92:0::3;::::0;;;;;;-1:-1:-1;;;;;51763:39:0;;::::3;51711:92;::::0;::::3;::::0;;;;;;;51763:26;51711:92;;;;;51763:26;51711:92;;::::3;;2:2:-1::0;::::3;;;27:1;24::::0;17:12:::3;2:2;51711:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;51711:92:0;;;;51863:4;51822:10;51833:11;51845:1;51833:14;;;;;;;;;;;;;;;;51822:26;;;;;;;;;;;;;;;;;;:38;;;:45;;;;;;;;;;;;;;;;;;51926:1;51886:10;51897:11;51909:1;51897:14;;;;;;;;;;;;;;;;51886:26;;;;;;;;;::::0;;;::::3;::::0;;;:37:::3;:26;::::0;;::::3;;:37;:41:::0;52030:1;52013:147:::3;52045:1;52038:6;:8;52033:2;:13;52013:147;;;52094:11;52106:2;52111:1;52106:6;52094:19;;;;;;;;;;;;;;;;52076:11;52088:2;52076:15;;;;;;;;;::::0;;;::::3;::::0;;;::::3;:37:::0;52048:4:::3;;52013:147;;;;52178:11;:17;;;;;;;;;;;;;;;;;;;;;;;;52236:5;;51508:749;51489:3;;51458:810;;;-1:-1:-1::0;52324:15:0::3;::::0;::::3;;:23;;:15:::0;:23:::3;52321:81;;;52363:27;52384:5;52363:20;:27::i;49614:598::-:0;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;49686:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;49781:412:::2;::::0;;::::2;::::0;::::2;::::0;;49823:17:::2;::::0;-1:-1:-1;;;;;49823:17:0::2;49781:412:::0;;-1:-1:-1;49781:412:0::2;::::0;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49823:17;49781:412;;;;49751:10:::2;::::0;49823:17:::2;49781:412:::0;;49867:12:::2;:10;:12::i;:::-;49781:412:::0;;49908:14:::2;::::0;-1:-1:-1;;;49908:14:0;::::2;;;49781:412;;;::::0;;::::2;::::0;27:10:-1;;39:1:::2;23:18:::0;;::::2;45:23:::0;;-1:-1;49751:453:0;;;;;;;;;::::2;::::0;;::::2;;::::0;;-1:-1:-1;;;;;;49751:453:0::2;-1:-1:-1::0;;;;;49751:453:0;;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;-1:-1:-1;;49751:453:0;;::::2;::::0;::::2;;::::0;;;::::2;-1:-1:-1::0;;49751:453:0::2;49908:14;49751:453:::0;::::2;;::::0;::::2;;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;;;::::2;::::0;::::2;;::::0;;;::::2;::::0;;-1:-1:-1;49614:598:0:o;44791:219::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;44969:22:0;;;::::1;;::::0;;;:16:::1;:22;::::0;;;;:33;;-1:-1:-1;;44969:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44791:219::o;29370:113::-;29431:7;29458:11;29470:4;29458:17;;;;;;;;;;;;;;;;29451:24;;29370:113;;;:::o;52507:193::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;52615:3:::1;52598:14;:20:::0;52645:1:::1;52629:13;:17:::0;52657::::1;:28:::0;;-1:-1:-1;;;;;;52657:28:0::1;-1:-1:-1::0;;;;;52657:28:0;;;::::1;::::0;;;::::1;::::0;;52507:193::o;47534:204::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;47614:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;47633:48:::2;47649:12;:10;:12::i;:::-;47663:17;::::0;47633:48:::2;::::0;;-1:-1:-1;;;;;47633:48:0;;::::2;::::0;;47663:17;;;::::2;47633:48;::::0;::::2;::::0;;;;;;;;;::::2;47712:17;::::0;47692:38:::2;::::0;-1:-1:-1;;;;;47712:17:0::2;47692:19;:38::i;:::-;23178:1:::1;47534:204::o:0;51091:168::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;51188:3:::1;51171:14;:20:::0;51218:1:::1;51202:13;:17:::0;51230:14:::1;:21:::0;51091:168::o;50517:442::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;50594:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;50616:10:::2;50627:14;;50616:26;;;;;;;;;;;;;;;;;;:37;;;50657:1;50616:42;50608:91;;;;-1:-1:-1::0;;;50608:91:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50727:14;::::0;50710:11:::2;27:10:-1::0;;39:1:::2;23:18:::0;::::2;45:23:::0;;-1:-1;50710:32:0;;;;::::2;::::0;;;50753:10:::2;:26:::0;;-1:-1:-1;;50753:10:0;;:26;::::2;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:38;;:46:::0;;-1:-1:-1;;50753:46:0::2;::::0;::::2;;::::0;;;::::2;::::0;;50874:15:::2;::::0;50753:46:::2;50874:15;:23;;-1:-1:-1::0;50874:23:0::2;50871:81;;;50913:27;50934:5;50913:20;:27::i;31657:327::-:0;31731:7;31936:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;31936:23:0;;;;;;;;;:39;;;;31849:34;;;;;31771:205;;31936:39;31771:142;;31908:4;;31771:114;;31824:60;;:20;31936:14;31824;:20::i;:60::-;31771:14;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;31771:23:0;;;;;;;;;:30;;:114;:52;:114;:::i;:142::-;:164;:205;:164;:205;:::i;:::-;31751:225;31657:327;-1:-1:-1;;;31657:327:0:o;30301:521::-;30381:7;30423:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;30423:24:0;;;;;;;;;:43;;;30480:16;30477:47;;24978:6;30499:22;;;;;30477:47;30537:8;;30534:30;;30560:1;30553:8;;;;;30534:30;30599:8;;30583:25;;:11;;:25;:15;:25;:::i;:::-;30577:3;:31;30574:48;;;30618:1;30611:8;;;;;30574:48;30657:16;30676:20;:3;30684:11;30676:20;:7;:20;:::i;:::-;30657:39;;30707:15;30725:64;30745:43;30779:8;;30745:29;24978:6;30745:8;:12;;:29;;;;:::i;:43::-;24978:6;;30725:64;:19;:64;:::i;:::-;30707:82;30301:521;-1:-1:-1;;;;;;30301:521:0:o;29668:119::-;29725:7;29752:10;29763:4;29752:16;;;;;;;;;;;;;;;;;;:27;;;29745:34;;29668:119;;;:::o;48992:139::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;49077:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;49109:14:0::2;::::0;49091:15:::2;:32:::0;48992:139::o;25269:27::-;;;;:::o;29799:118::-;29854:7;29881:10;29892:4;29881:16;;;;;;;;;;;;;;;;;;:28;;;29874:35;;29799:118;;;:::o;40622:1483::-;40695:4;40701:12;:10;:12::i;:::-;28579:20;28594:4;28579:14;:20::i;:::-;28539:10;28550:4;28539:16;;;;;;;;;;;;;;;;;;:37;;:60;;;;28644:26;:24;:26::i;:::-;28610:10;28621:4;28610:16;;;;;;;;;;;;;;;;:31;:16;;;;;:31;:60;-1:-1:-1;;;;;28685:21:0;;;28681:211;;28765:26;28778:4;28783:7;28765:12;:26::i;:::-;28723:14;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;28723:23:0;;;;;;;;;:39;;:68;28843:10;:16;;28732:4;;28843:16;;;;;;;;;;;;;;:37;:16;;;;;:37;;;;;28806:14;;;:8;:14;;;;;;-1:-1:-1;;;;;28806:23:0;;;;;;;;;:34;;:74;28681:211;40743:1:::1;40734:6;:10;40726:39;;;::::0;;-1:-1:-1;;;40726:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40726:39:0;;;;;;;;;;;;;::::1;;40784:10;40795:4;40784:16;;;;;;;;;::::0;;;::::1;::::0;;;:28:::1;:16;::::0;;::::1;;:28;::::0;::::1;;:37;40776:79;;;::::0;;-1:-1:-1;;;40776:79:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;40869:15;::::0;::::1;;:23;;:15:::0;:23:::1;:48:::0;::::1;;;;40902:15;;40896:3;:21;40869:48;40866:176;;;41017:13;:11;:13::i;:::-;41150:14;::::0;;;:8:::1;:14;::::0;;;;;41165:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;41150:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41150:28:0;:35;41147:577:::1;;41206:14;::::0;;;:8:::1;:14;::::0;;;;41256:3:::1;::::0;41221:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;41206:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41206:28:0;:47:::1;;:53:::0;41147:577:::1;;;41332:16;41359:14:::0;;;:8:::1;:14;::::0;;;;41351:56:::1;::::0;41332:16;41374:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;41359:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41359:28:0;:47:::1;;::::0;41351:3:::1;::::0;:56:::1;:7;:56;:::i;:::-;41422:14;41482::::0;;;:8:::1;:14;::::0;;;;41332:75;;-1:-1:-1;41422:14:0;41439:80:::1;::::0;41471:47:::1;::::0;41422:14;41497:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;41482:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41482:28:0;:35;41471:6;;:47:::1;:10;:47;:::i;:::-;41439:27;:6:::0;24978::::1;41439:27;:10;:27;:::i;:80::-;41422:97:::0;-1:-1:-1;41545:41:0::1;24978:6;41545:20;:8:::0;41422:97;41545:20:::1;:12;:20;:::i;:41::-;41651:14;::::0;;;:8:::1;:14;::::0;;;;41534:52;;-1:-1:-1;41651:61:0::1;::::0;41534:52;;41666:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;41651:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41651:28:0;:47:::1;;::::0;;:61:::1;:51;:61;:::i;:::-;41601:14;::::0;;;:8:::1;:14;::::0;;;;;41616:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;41601:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41601:28:0;:47:::1;;:111:::0;-1:-1:-1;;41147:577:0::1;41775:40;41808:6;41775:10;41786:4;41775:16;;;;;;;;;;;;;;;;;;:28;;;:32;;:40;;;;:::i;:::-;41744:10;41755:4;41744:16;;;;;;;;;;;;;;;;;;:28;;:71;;;;41864:47;41904:6;41864:8;:14;41873:4;41864:14;;;;;;;;;;;:28;41879:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;41864:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41864:28:0;:35;;:47:::1;:39;:47;:::i;:::-;41826:14;::::0;;;:8:::1;:14;::::0;;;;;41841:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;41826:28:0::1;-1:-1:-1::0;;;;;41826:28:0::1;;;;;;;;;;;;:35;;:85;;;;41922:12;41944:10;41955:4;41944:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:29:::0;-1:-1:-1;;;;;41944:29:0::1;::::0;-1:-1:-1;41985:59:0::1;42008:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;41985:22:0;::::1;::::0;42030:4:::1;42037:6:::0;41985:59:::1;:22;:59;:::i;:::-;42076:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42060:37:0::1;;42070:4;42090:6;42060:37;;;;;;;;;;;;;;;;;;;;;;;;28902:1;40622:1483:::0;;;;:::o;30973:134::-;31040:4;31064:10;31075:4;31064:16;;;;;;;;;;;;;;;;;;;;;:35;;;;;;;;;;-1:-1:-1;;30973:134:0:o;25651:30::-;;;-1:-1:-1;;;;;25651:30:0;;:::o;47336:186::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;47437:3:::1;47420:14;:20:::0;47467:1:::1;47451:13;:17:::0;47479::::1;:28:::0;;-1:-1:-1;;;;;;47479:28:0::1;-1:-1:-1::0;;;;;47479:28:0;;;::::1;::::0;;;::::1;::::0;;47336:186::o;48461:139::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;48546:1:::1;46897:5;46880:13;;:22;46872:74;;;;-1:-1:-1::0;;;46872:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:1;46957:13;:17:::0;47032:15:::1;::::0;::::1;;:23;;:15:::0;:23:::1;47029:197;;;46620:5;47154:14;;:34;47147:3;:41;;47139:75;;;::::0;;-1:-1:-1;;;47139:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;47139:75:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;48578:14:0::2;::::0;48560:15:::2;:32:::0;48461:139::o;18858:106::-;18946:10;18858:106;:::o;3815:181::-;3873:7;3905:5;;;3929:6;;;;3921:46;;;;;-1:-1:-1;;;3921:46:0;;;;;;;;;;;;-1:-1:-1;;;3921:46:0;;;;;;;;;;;;;;5169:471;5227:7;5472:6;5468:47;;-1:-1:-1;5502:1:0;5495:8;;5468:47;5539:5;;;5543:1;5539;:5;:1;5563:5;;;;;:10;5555:56;;;;-1:-1:-1;;;5555:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6116:132;6174:7;6201:39;6205:1;6208;6201:39;;;;;;;;;;;;;-1:-1:-1;;;6201:39:0;;;:3;:39::i;4279:136::-;4337:7;4364:43;4368:1;4371;4364:43;;;;;;;;;;;;;;;;;:3;:43::i;15163:177::-;15273:58;;;-1:-1:-1;;;;;15273:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15273:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15246:86:0;;15266:5;;15246:19;:86::i;:::-;15163:177;;;:::o;40487:127::-;40580:4;40586:8;28579:20;28594:4;28579:14;:20::i;:::-;28539:10;28550:4;28539:16;;;;;;;;;;;;;;;;;;:37;;:60;;;;28644:26;:24;:26::i;:::-;28610:10;28621:4;28610:16;;;;;;;;;;;;;;;;:31;:16;;;;;:31;:60;-1:-1:-1;;;;;28685:21:0;;;28681:211;;28765:26;28778:4;28783:7;28765:12;:26::i;:::-;28723:14;;;;:8;:14;;;;;;;;-1:-1:-1;;;;;28723:23:0;;;;;;;;;:39;;:68;28843:10;:16;;28732:4;;28843:16;;;;;;;;;;;;;;;;;;;;;;:37;;;28806:14;;;:8;:14;;;;;;-1:-1:-1;;;;;28806:23:0;;;;;;;;;;:34;;:74;-1:-1:-1;;40487:127:0:o;35470:5005::-;35675:12;;35649:23;;35675:33;;24889:6;35675:33;:16;:33;:::i;:::-;35649:59;;35722:12;;35738:1;35722:17;35719:32;;;35742:7;;;35719:32;35877:15;;35804:18;;;;35871:3;:21;35868:187;;;35919:15;;:24;;35939:3;35919:24;:19;:24;:::i;:::-;35908:35;-1:-1:-1;35971:29:0;35908:35;35984:15;35971:29;:12;:29;:::i;:::-;35958:42;;35868:187;36065:20;36088:52;24978:6;36088:31;36103:15;;36088:10;:14;;:31;;;;:::i;:52::-;36065:75;-1:-1:-1;36151:20:0;36174:28;:10;36065:75;36174:28;:14;:28;:::i;:::-;36341:11;:18;36151:51;;-1:-1:-1;36378:10:0;36370:59;;;;-1:-1:-1;;;36370:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36542:15;;36591:25;;;-1:-1:-1;;;36591:25:0;;;;36440:19;;;;-1:-1:-1;;;;;36542:15:0;;;;36440:19;;36542:15;;36591:23;;:25;;;;;;;;;;;;;;;36542:15;36591:25;;;2:2:-1;;;;27:1;24;17:12;2:2;36591:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36591:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36591:25:0;;-1:-1:-1;36637:9:0;36661:1440;36676:6;36672:1;:10;36661:1440;;;36706:10;36717:11;36729:1;36717:14;;;;;;;;;;;;;;;;36706:26;;;;;;;;;;;;;;;;:35;:26;;;;;:35;;;;:43;;:35;:43;36703:1387;;;36809:1;36769:10;36780:11;36792:1;36780:14;;;;;;;;;;;;;;;;36769:26;;;;;;;;;;;;;;;;:37;:26;;;;;:37;:41;36829:13;;;;;36703:1387;;;36909:4;36884:29;;;;36881:948;;;36977:1;36937:10;36948:11;36960:1;36948:14;;;;;;;;;;;;;;;;36937:26;;;;;;;;;;;;;;;;:37;:26;;;;;:37;:41;37087:16;37084:726;;37240:1;37200:10;37211:11;37223:1;37211:14;;;;;;;;;;;;;;;;37200:26;;;;;;;;;;;;;;;;;;:37;;:41;;;;37084:726;;;37273:10;37284:11;37296:1;37284:14;;;;;;;;;;;;;;;;37273:26;;;;;;;;;;;;;;;;;;;;;:45;;;;;;;;37270:540;;37450:14;37467:4;-1:-1:-1;;;;;37467:26:0;;37494:10;37505:11;37517:1;37505:14;;;;;;;;;;;;;;;;37494:26;;;;;;;;;;;;;;;;;;;;;;:39;37467:67;;;-1:-1:-1;;;;;;37467:67:0;;;;;;;-1:-1:-1;;;;;37494:39:0;;;37467:67;;;;;;;;;;37494:26;37467:67;;;;;;;;;2:2:-1;;;;27:1;24;17:12;2:2;37467:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37467:67:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37467:67:0;;-1:-1:-1;37570:44:0;37602:11;37570:27;37467:67;24978:6;37570:27;:10;:27;:::i;:44::-;37561:53;-1:-1:-1;37644:11:0;37641:28;;-1:-1:-1;37666:1:0;37641:28;37780:6;37740:10;37751:11;37763:1;37751:14;;;;;;;;;;;;;;;;37740:26;;;;;;;;;;;;;;;;;;:37;;:46;;;;37270:540;;37890:10;37850;37861:11;37873:1;37861:14;;;;;;;;;;;;;;;;37850:26;;;;;;;;;;;;;;;;;;:37;;;:50;37847:228;;;38018:10;38029:11;38041:1;38029:14;;;;;;;;;;;;;;;;38018:26;;;;;;;;;;;;;;;;;;:37;;;38005:50;;37847:228;36684:3;;36661:1440;;;-1:-1:-1;38172:1:0;38164:740;38179:6;38175:1;:10;38164:740;;;38209:10;38220:11;38232:1;38220:14;;;;;;;;;;;;;;;;38209:26;;;;;;;;;;;;;;;;:35;:26;;;;;:35;;;;:43;;:35;:43;38206:687;;;38272:21;38296:75;38359:11;38296:58;24978:6;38296:10;38307:11;38319:1;38307:14;;;;;;;;;;;;;;;;38296:26;;;;;;;;;;;;;;;;;;:37;;;:41;;:58;;;;:::i;:75::-;38272:99;-1:-1:-1;38390:18:0;38411:52;24978:6;38411:31;:12;38272:99;38411:31;:16;:31;:::i;:52::-;38390:73;;38482:50;38506:11;38518:1;38506:14;;;;;;;38482:50;38623:12;;38620:258;;38699:24;:10;38714:8;38699:24;:14;:24;:::i;:::-;38659:10;38670:11;38682:1;38670:14;;;;;;;;;;;;;;;;38659:26;;;;;;;;;;;;;;;;;;:37;;:64;;;;38620:258;;;38857:1;38817:10;38828:11;38840:1;38828:14;;;;;;;;;;;;;;;;38817:26;;;;;;;;;;;;;;;;;;:37;;:41;;;;38620:258;38206:687;;;38187:3;;38164:740;;;-1:-1:-1;39030:1:0;;-1:-1:-1;39030:1:0;39042:601;39057:6;39053:1;:10;39042:601;;;39087:10;39098:11;39110:1;39098:14;;;;;;;;;;;;;;;;39087:26;;;;;;;;;;;;;;;;:35;:26;;;;;:35;;;;39084:548;;39154:10;39165:11;39177:1;39165:14;;;;;;;;;;;;;;;;39154:26;;;;;;;;;;;;;;;;;;:37;;;39195:1;39154:42;39151:395;;;39315:14;;39312:215;;39397:10;39357;39368:11;39380:1;39368:14;;;;;;;;;;;;;;;;39357:26;;;;;;;;;;;;;;;;;;:37;;:50;;;;39312:215;;;39502:1;39462:10;39473:11;39485:1;39473:14;;;;;;;;;;;;;;;;39462:26;;;;;;;;;;;;;;;;;;:37;;:41;;;;39312:215;39579:10;39590:11;39602:1;39590:14;;;;;;;;;;;;;;;;39579:26;;;;;;;;;;;;;;;;;;:37;;;39564:52;;;;39084:548;39065:3;;39042:601;;;-1:-1:-1;39720:1:0;39712:756;39727:6;39723:1;:10;39712:756;;;39757:10;39768:11;39780:1;39768:14;;;;;;;;;;;;;;;;39757:26;;;;;;;;;;;;;;;;:35;:26;;;;;:35;;;;39754:703;;39821:21;39845:75;39908:11;39845:58;24978:6;39845:10;39856:11;39868:1;39856:14;;;;;;;39845:75;39821:99;-1:-1:-1;39939:18:0;39960:52;24978:6;39960:31;:12;39821:99;39960:31;:16;:31;:::i;:52::-;39939:73;;40031:50;40055:11;40067:1;40055:14;;;;;;;40031:50;40172:12;;40169:258;;40248:24;:10;40263:8;40248:24;:14;:24;:::i;:::-;40208:10;40219:11;40231:1;40219:14;;;;;;;;;;;;;;;;40208:26;;;;;;;;;;;;;;;;;;:37;;:64;;;;40169:258;;;40406:1;40366:10;40377:11;40389:1;40377:14;;;;;;;;;;;;;;;;40366:26;;;;;;;;;;;;;;;;;;:37;;:41;;;;40169:258;39754:703;;;39735:3;;39712:756;;;35470:5005;;;;;;;;;;;;:::o;15822:622::-;16192:10;;;16191:62;;-1:-1:-1;16208:39:0;;;-1:-1:-1;;;16208:39:0;;16232:4;16208:39;;;;-1:-1:-1;;;;;16208:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;2:2:-1;;;;27:1;24;17:12;2:2;16208:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16208:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16208:39:0;:44;16191:62;16183:152;;;;-1:-1:-1;;;16183:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16373:62;;;-1:-1:-1;;;;;16373:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16373:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16346:90:0;;16366:5;;16346:19;:90::i;9037:619::-;9097:4;9565:20;;9408:66;9605:23;;;;;;:42;;-1:-1:-1;9632:15:0;;;9605:42;9597:51;9037:619;-1:-1:-1;;;;9037:619:0:o;23337:254::-;23118:12;:10;:12::i;:::-;23108:6;;-1:-1:-1;;;;;23108:6:0;;;:22;;;23100:67;;;;;-1:-1:-1;;;23100:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23100:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23435:22:0;::::1;23427:73;;;;-1:-1:-1::0;;;23427:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23538:6;::::0;;23516:39:::1;::::0;-1:-1:-1;;;;;23516:39:0;;::::1;::::0;23538:6;::::1;::::0;23516:39:::1;::::0;::::1;23566:6;:17:::0;;-1:-1:-1;;;;;;23566:17:0::1;-1:-1:-1::0;;;;;23566:17:0;;;::::1;::::0;;;::::1;::::0;;23337:254::o;15348:205::-;15476:68;;;-1:-1:-1;;;;;15476:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15476:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15449:96:0;;15469:5;;15449:19;:96::i;6744:278::-;6830:7;6865:12;6858:5;6850:28;;;;-1:-1:-1;;;6850:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6850:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6889:9;6905:1;6901;:5;;;;;;;6744:278;-1:-1:-1;;;;;6744:278:0:o;4718:192::-;4804:7;4840:12;4832:6;;;;4824:29;;;;-1:-1:-1;;;4824:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4824:29:0;-1:-1:-1;;;4876:5:0;;;4718:192::o;17468:761::-;17892:23;17918:69;17946:4;17918:69;;;;;;;;;;;;;;;;;17926:5;-1:-1:-1;;;;;17918:27:0;;;:69;;;;;:::i;:::-;18002:17;;17892:95;;-1:-1:-1;18002:21:0;17998:224;;18144:10;18133:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18133:30:0;18125:85;;;;-1:-1:-1;;;18125:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12152:196;12255:12;12287:53;12310:6;12318:4;12324:1;12327:12;13659;13692:18;13703:6;13692:10;:18::i;:::-;13684:60;;;;;-1:-1:-1;;;13684:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13818:12;13832:23;13859:6;-1:-1:-1;;;;;13859:11:0;13879:8;13890:4;13859:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13859:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;13817:78:0;;;;13910:7;13906:595;;;13941:10;-1:-1:-1;13934:17:0;;-1:-1:-1;13934:17:0;13906:595;14055:17;;:21;14051:439;;14318:10;14312:17;14379:15;14366:10;14362:2;14358:19;14351:44;14266:148;14454:20;;-1:-1:-1;;;14454:20:0;;;;;;;;;;;;;;;;;14461:12;;14454:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;
Metadata Hash
763bed544c44804b9b7dd5c1317f25645f233e0660597ecc282d228c07857ecb
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.