Contract
0x20de7f8283d377fa84575a26c9d484ee40f55877
1
Contract Overview
Balance:
0 FTM
FTM Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x0C40fA4760532aC0AfA81948B7a2247DbE8d1470
Contract Name:
RewardRouterV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2023-03-04 */ // Sources flattened with hardhat v2.12.0 https://hardhat.org // File contracts/access/Governable.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.12; contract Governable { address public gov; constructor() public { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } } // File contracts/libraries/utils/ReentrancyGuard.sol pragma solidity 0.6.12; /** * @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; } } // File contracts/libraries/math/SafeMath.sol pragma solidity 0.6.12; /** * @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 contracts/libraries/token/IERC20.sol pragma solidity 0.6.12; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @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 contracts/libraries/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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/libraries/token/SafeERC20.sol pragma solidity 0.6.12; /** * @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 contracts/staking/interfaces/IRewardRouterV2.sol pragma solidity 0.6.12; interface IRewardRouterV2 { function feeGlpTracker() external view returns (address); function stakedGlpTracker() external view returns (address); } // File contracts/staking/interfaces/IVester.sol pragma solidity 0.6.12; interface IVester { function rewardTracker() external view returns (address); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function cumulativeClaimAmounts(address _account) external view returns (uint256); function claimedAmounts(address _account) external view returns (uint256); function pairAmounts(address _account) external view returns (uint256); function getVestedAmount(address _account) external view returns (uint256); function transferredAverageStakedAmounts(address _account) external view returns (uint256); function transferredCumulativeRewards(address _account) external view returns (uint256); function cumulativeRewardDeductions(address _account) external view returns (uint256); function bonusRewards(address _account) external view returns (uint256); function transferStakeValues(address _sender, address _receiver) external; function setTransferredAverageStakedAmounts(address _account, uint256 _amount) external; function setTransferredCumulativeRewards(address _account, uint256 _amount) external; function setCumulativeRewardDeductions(address _account, uint256 _amount) external; function setBonusRewards(address _account, uint256 _amount) external; function getMaxVestableAmount(address _account) external view returns (uint256); function getCombinedAverageStakedAmount(address _account) external view returns (uint256); } // File contracts/staking/interfaces/IRewardTracker.sol pragma solidity 0.6.12; interface IRewardTracker { function depositBalances(address _account, address _depositToken) external view returns (uint256); function stakedAmounts(address _account) external view returns (uint256); function updateRewards() external; function stake(address _depositToken, uint256 _amount) external; function stakeForAccount(address _fundingAccount, address _account, address _depositToken, uint256 _amount) external; function unstake(address _depositToken, uint256 _amount) external; function unstakeForAccount(address _account, address _depositToken, uint256 _amount, address _receiver) external; function tokensPerInterval() external view returns (uint256); function claim(address _receiver) external returns (uint256); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function averageStakedAmounts(address _account) external view returns (uint256); function cumulativeRewards(address _account) external view returns (uint256); } // File contracts/tokens/interfaces/IWETH.sol pragma solidity 0.6.12; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File contracts/tokens/interfaces/IMintable.sol pragma solidity 0.6.12; interface IMintable { function isMinter(address _account) external returns (bool); function setMinter(address _minter, bool _isActive) external; function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; } // File contracts/core/interfaces/IVaultUtils.sol pragma solidity 0.6.12; interface IVaultUtils { function updateCumulativeFundingRate(address _collateralToken, address _indexToken) external returns (bool); function validateIncreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external view; function validateDecreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external view; function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256); function getEntryFundingRate(address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256); function getPositionFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta) external view returns (uint256); function getFundingFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _size, uint256 _entryFundingRate) external view returns (uint256); function getBuyUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSellUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256); function getSwapFeeBasisPoints(address _tokenIn, address _tokenOut, uint256 _usdgAmount) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256); } // File contracts/core/interfaces/IVault.sol pragma solidity 0.6.12; interface IVault { function isInitialized() external view returns (bool); function isSwapEnabled() external view returns (bool); function isLeverageEnabled() external view returns (bool); function setVaultUtils(IVaultUtils _vaultUtils) external; function setError(uint256 _errorCode, string calldata _error) external; function router() external view returns (address); function usdg() external view returns (address); function gov() external view returns (address); function whitelistedTokenCount() external view returns (uint256); function maxLeverage() external view returns (uint256); function minProfitTime() external view returns (uint256); function hasDynamicFees() external view returns (bool); function fundingInterval() external view returns (uint256); function totalTokenWeights() external view returns (uint256); function getTargetUsdgAmount(address _token) external view returns (uint256); function inManagerMode() external view returns (bool); function inPrivateLiquidationMode() external view returns (bool); function maxGasPrice() external view returns (uint256); function approvedRouters(address _account, address _router) external view returns (bool); function isLiquidator(address _account) external view returns (bool); function isManager(address _account) external view returns (bool); function minProfitBasisPoints(address _token) external view returns (uint256); function tokenBalances(address _token) external view returns (uint256); function lastFundingTimes(address _token) external view returns (uint256); function setMaxLeverage(uint256 _maxLeverage) external; function setInManagerMode(bool _inManagerMode) external; function setManager(address _manager, bool _isManager) external; function setIsSwapEnabled(bool _isSwapEnabled) external; function setIsLeverageEnabled(bool _isLeverageEnabled) external; function setMaxGasPrice(uint256 _maxGasPrice) external; function setUsdgAmount(address _token, uint256 _amount) external; function setBufferAmount(address _token, uint256 _amount) external; function setMaxGlobalShortSize(address _token, uint256 _amount) external; function setInPrivateLiquidationMode(bool _inPrivateLiquidationMode) external; function setLiquidator(address _liquidator, bool _isActive) external; function setFundingRate(uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor) external; function setFees( uint256 _taxBasisPoints, uint256 _stableTaxBasisPoints, uint256 _mintBurnFeeBasisPoints, uint256 _swapFeeBasisPoints, uint256 _stableSwapFeeBasisPoints, uint256 _marginFeeBasisPoints, uint256 _liquidationFeeUsd, uint256 _minProfitTime, bool _hasDynamicFees ) external; function setTokenConfig( address _token, uint256 _tokenDecimals, uint256 _redemptionBps, uint256 _minProfitBps, uint256 _maxUsdgAmount, bool _isStable, bool _isShortable ) external; function setPriceFeed(address _priceFeed) external; function withdrawFees(address _token, address _receiver) external returns (uint256); function directPoolDeposit(address _token) external; function buyUSDG(address _token, address _receiver) external returns (uint256); function sellUSDG(address _token, address _receiver) external returns (uint256); function swap(address _tokenIn, address _tokenOut, address _receiver) external returns (uint256); function increasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external; function decreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external returns (uint256); function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256); function liquidatePosition(address _account, address _collateralToken, address _indexToken, bool _isLong, address _feeReceiver) external; function tokenToUsdMin(address _token, uint256 _tokenAmount) external view returns (uint256); function priceFeed() external view returns (address); function fundingRateFactor() external view returns (uint256); function stableFundingRateFactor() external view returns (uint256); function cumulativeFundingRates(address _token) external view returns (uint256); function getNextFundingRate(address _token) external view returns (uint256); function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256); function liquidationFeeUsd() external view returns (uint256); function taxBasisPoints() external view returns (uint256); function stableTaxBasisPoints() external view returns (uint256); function mintBurnFeeBasisPoints() external view returns (uint256); function swapFeeBasisPoints() external view returns (uint256); function stableSwapFeeBasisPoints() external view returns (uint256); function marginFeeBasisPoints() external view returns (uint256); function allWhitelistedTokensLength() external view returns (uint256); function allWhitelistedTokens(uint256) external view returns (address); function whitelistedTokens(address _token) external view returns (bool); function stableTokens(address _token) external view returns (bool); function shortableTokens(address _token) external view returns (bool); function feeReserves(address _token) external view returns (uint256); function globalShortSizes(address _token) external view returns (uint256); function globalShortAveragePrices(address _token) external view returns (uint256); function maxGlobalShortSizes(address _token) external view returns (uint256); function tokenDecimals(address _token) external view returns (uint256); function tokenWeights(address _token) external view returns (uint256); function guaranteedUsd(address _token) external view returns (uint256); function poolAmounts(address _token) external view returns (uint256); function bufferAmounts(address _token) external view returns (uint256); function reservedAmounts(address _token) external view returns (uint256); function usdgAmounts(address _token) external view returns (uint256); function maxUsdgAmounts(address _token) external view returns (uint256); function getRedemptionAmount(address _token, uint256 _usdgAmount) external view returns (uint256); function getMaxPrice(address _token) external view returns (uint256); function getMinPrice(address _token) external view returns (uint256); function getDelta(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime) external view returns (bool, uint256); function getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256); } // File contracts/core/interfaces/IGlpManager.sol pragma solidity 0.6.12; interface IGlpManager { function glp() external view returns (address); function usdg() external view returns (address); function vault() external view returns (IVault); function cooldownDuration() external returns (uint256); function getAumInUsdg(bool maximise) external view returns (uint256); function lastAddedAt(address _account) external returns (uint256); function addLiquidity(address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external returns (uint256); function addLiquidityForAccount(address _fundingAccount, address _account, address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external returns (uint256); function removeLiquidity(address _tokenOut, uint256 _glpAmount, uint256 _minOut, address _receiver) external returns (uint256); function removeLiquidityForAccount(address _account, address _tokenOut, uint256 _glpAmount, uint256 _minOut, address _receiver) external returns (uint256); function setShortsTrackerAveragePriceWeight(uint256 _shortsTrackerAveragePriceWeight) external; function setCooldownDuration(uint256 _cooldownDuration) external; } // File contracts/staking/RewardRouterV2.sol pragma solidity 0.6.12; contract RewardRouterV2 is IRewardRouterV2, ReentrancyGuard, Governable { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address payable; bool public isInitialized; address public weth; address public gmx; address public esGmx; address public bnGmx; address public glp; // GMX Liquidity Provider token address public stakedGmxTracker; address public bonusGmxTracker; address public feeGmxTracker; address public override stakedGlpTracker; address public override feeGlpTracker; address public glpManager; address public gmxVester; address public glpVester; mapping (address => address) public pendingReceivers; event StakeGmx(address account, address token, uint256 amount); event UnstakeGmx(address account, address token, uint256 amount); event StakeGlp(address account, uint256 amount); event UnstakeGlp(address account, uint256 amount); receive() external payable { require(msg.sender == weth, "Router: invalid sender"); } function initialize( address _weth, address _gmx, address _esGmx, address _bnGmx, address _glp, address _stakedGmxTracker, address _bonusGmxTracker, address _feeGmxTracker, address _feeGlpTracker, address _stakedGlpTracker, address _glpManager, address _gmxVester, address _glpVester ) external onlyGov { require(!isInitialized, "RewardRouter: already initialized"); isInitialized = true; weth = _weth; gmx = _gmx; esGmx = _esGmx; bnGmx = _bnGmx; glp = _glp; stakedGmxTracker = _stakedGmxTracker; bonusGmxTracker = _bonusGmxTracker; feeGmxTracker = _feeGmxTracker; feeGlpTracker = _feeGlpTracker; stakedGlpTracker = _stakedGlpTracker; glpManager = _glpManager; gmxVester = _gmxVester; glpVester = _glpVester; } // to help users who accidentally send their tokens to this contract function withdrawToken(address _token, address _account, uint256 _amount) external onlyGov { IERC20(_token).safeTransfer(_account, _amount); } function batchStakeGmxForAccount(address[] memory _accounts, uint256[] memory _amounts) external nonReentrant onlyGov { address _gmx = gmx; for (uint256 i = 0; i < _accounts.length; i++) { _stakeGmx(msg.sender, _accounts[i], _gmx, _amounts[i]); } } function stakeGmxForAccount(address _account, uint256 _amount) external nonReentrant onlyGov { _stakeGmx(msg.sender, _account, gmx, _amount); } function stakeGmx(uint256 _amount) external nonReentrant { _stakeGmx(msg.sender, msg.sender, gmx, _amount); } function stakeEsGmx(uint256 _amount) external nonReentrant { _stakeGmx(msg.sender, msg.sender, esGmx, _amount); } function unstakeGmx(uint256 _amount) external nonReentrant { _unstakeGmx(msg.sender, gmx, _amount, true); } function unstakeEsGmx(uint256 _amount) external nonReentrant { _unstakeGmx(msg.sender, esGmx, _amount, true); } function mintAndStakeGlp(address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external nonReentrant returns (uint256) { require(_amount > 0, "RewardRouter: invalid _amount"); address account = msg.sender; uint256 glpAmount = IGlpManager(glpManager).addLiquidityForAccount(account, account, _token, _amount, _minUsdg, _minGlp); IRewardTracker(feeGlpTracker).stakeForAccount(account, account, glp, glpAmount); IRewardTracker(stakedGlpTracker).stakeForAccount(account, account, feeGlpTracker, glpAmount); emit StakeGlp(account, glpAmount); return glpAmount; } function mintAndStakeGlpETH(uint256 _minUsdg, uint256 _minGlp) external payable nonReentrant returns (uint256) { require(msg.value > 0, "RewardRouter: invalid msg.value"); IWETH(weth).deposit{value: msg.value}(); IERC20(weth).approve(glpManager, msg.value); address account = msg.sender; uint256 glpAmount = IGlpManager(glpManager).addLiquidityForAccount(address(this), account, weth, msg.value, _minUsdg, _minGlp); IRewardTracker(feeGlpTracker).stakeForAccount(account, account, glp, glpAmount); IRewardTracker(stakedGlpTracker).stakeForAccount(account, account, feeGlpTracker, glpAmount); emit StakeGlp(account, glpAmount); return glpAmount; } function unstakeAndRedeemGlp(address _tokenOut, uint256 _glpAmount, uint256 _minOut, address _receiver) external nonReentrant returns (uint256) { require(_glpAmount > 0, "RewardRouter: invalid _glpAmount"); address account = msg.sender; IRewardTracker(stakedGlpTracker).unstakeForAccount(account, feeGlpTracker, _glpAmount, account); IRewardTracker(feeGlpTracker).unstakeForAccount(account, glp, _glpAmount, account); uint256 amountOut = IGlpManager(glpManager).removeLiquidityForAccount(account, _tokenOut, _glpAmount, _minOut, _receiver); emit UnstakeGlp(account, _glpAmount); return amountOut; } function unstakeAndRedeemGlpETH(uint256 _glpAmount, uint256 _minOut, address payable _receiver) external nonReentrant returns (uint256) { require(_glpAmount > 0, "RewardRouter: invalid _glpAmount"); address account = msg.sender; IRewardTracker(stakedGlpTracker).unstakeForAccount(account, feeGlpTracker, _glpAmount, account); IRewardTracker(feeGlpTracker).unstakeForAccount(account, glp, _glpAmount, account); uint256 amountOut = IGlpManager(glpManager).removeLiquidityForAccount(account, weth, _glpAmount, _minOut, address(this)); IWETH(weth).withdraw(amountOut); _receiver.sendValue(amountOut); emit UnstakeGlp(account, _glpAmount); return amountOut; } function claim() external nonReentrant { address account = msg.sender; IRewardTracker(feeGmxTracker).claimForAccount(account, account); IRewardTracker(feeGlpTracker).claimForAccount(account, account); IRewardTracker(stakedGmxTracker).claimForAccount(account, account); IRewardTracker(stakedGlpTracker).claimForAccount(account, account); } function claimEsGmx() external nonReentrant { address account = msg.sender; IRewardTracker(stakedGmxTracker).claimForAccount(account, account); IRewardTracker(stakedGlpTracker).claimForAccount(account, account); } function claimFees() external nonReentrant { address account = msg.sender; IRewardTracker(feeGmxTracker).claimForAccount(account, account); IRewardTracker(feeGlpTracker).claimForAccount(account, account); } function compound() external nonReentrant { _compound(msg.sender); } function compoundForAccount(address _account) external nonReentrant onlyGov { _compound(_account); } function handleRewards( bool _shouldClaimGmx, bool _shouldStakeGmx, bool _shouldClaimEsGmx, bool _shouldStakeEsGmx, bool _shouldStakeMultiplierPoints, bool _shouldClaimWeth, bool _shouldConvertWethToEth ) external nonReentrant { address account = msg.sender; uint256 gmxAmount = 0; if (_shouldClaimGmx) { uint256 gmxAmount0 = IVester(gmxVester).claimForAccount(account, account); uint256 gmxAmount1 = IVester(glpVester).claimForAccount(account, account); gmxAmount = gmxAmount0.add(gmxAmount1); } if (_shouldStakeGmx && gmxAmount > 0) { _stakeGmx(account, account, gmx, gmxAmount); } uint256 esGmxAmount = 0; if (_shouldClaimEsGmx) { uint256 esGmxAmount0 = IRewardTracker(stakedGmxTracker).claimForAccount(account, account); uint256 esGmxAmount1 = IRewardTracker(stakedGlpTracker).claimForAccount(account, account); esGmxAmount = esGmxAmount0.add(esGmxAmount1); } if (_shouldStakeEsGmx && esGmxAmount > 0) { _stakeGmx(account, account, esGmx, esGmxAmount); } if (_shouldStakeMultiplierPoints) { uint256 bnGmxAmount = IRewardTracker(bonusGmxTracker).claimForAccount(account, account); if (bnGmxAmount > 0) { IRewardTracker(feeGmxTracker).stakeForAccount(account, account, bnGmx, bnGmxAmount); } } if (_shouldClaimWeth) { if (_shouldConvertWethToEth) { uint256 weth0 = IRewardTracker(feeGmxTracker).claimForAccount(account, address(this)); uint256 weth1 = IRewardTracker(feeGlpTracker).claimForAccount(account, address(this)); uint256 wethAmount = weth0.add(weth1); IWETH(weth).withdraw(wethAmount); payable(account).sendValue(wethAmount); } else { IRewardTracker(feeGmxTracker).claimForAccount(account, account); IRewardTracker(feeGlpTracker).claimForAccount(account, account); } } } function batchCompoundForAccounts(address[] memory _accounts) external nonReentrant onlyGov { for (uint256 i = 0; i < _accounts.length; i++) { _compound(_accounts[i]); } } function signalTransfer(address _receiver) external nonReentrant { require(IERC20(gmxVester).balanceOf(msg.sender) == 0, "RewardRouter: sender has vested tokens"); require(IERC20(glpVester).balanceOf(msg.sender) == 0, "RewardRouter: sender has vested tokens"); _validateReceiver(_receiver); pendingReceivers[msg.sender] = _receiver; } function acceptTransfer(address _sender) external nonReentrant { require(IERC20(gmxVester).balanceOf(_sender) == 0, "RewardRouter: sender has vested tokens"); require(IERC20(glpVester).balanceOf(_sender) == 0, "RewardRouter: sender has vested tokens"); address receiver = msg.sender; require(pendingReceivers[_sender] == receiver, "RewardRouter: transfer not signalled"); delete pendingReceivers[_sender]; _validateReceiver(receiver); _compound(_sender); uint256 stakedGmx = IRewardTracker(stakedGmxTracker).depositBalances(_sender, gmx); if (stakedGmx > 0) { _unstakeGmx(_sender, gmx, stakedGmx, false); _stakeGmx(_sender, receiver, gmx, stakedGmx); } uint256 stakedEsGmx = IRewardTracker(stakedGmxTracker).depositBalances(_sender, esGmx); if (stakedEsGmx > 0) { _unstakeGmx(_sender, esGmx, stakedEsGmx, false); _stakeGmx(_sender, receiver, esGmx, stakedEsGmx); } uint256 stakedBnGmx = IRewardTracker(feeGmxTracker).depositBalances(_sender, bnGmx); if (stakedBnGmx > 0) { IRewardTracker(feeGmxTracker).unstakeForAccount(_sender, bnGmx, stakedBnGmx, _sender); IRewardTracker(feeGmxTracker).stakeForAccount(_sender, receiver, bnGmx, stakedBnGmx); } uint256 esGmxBalance = IERC20(esGmx).balanceOf(_sender); if (esGmxBalance > 0) { IERC20(esGmx).transferFrom(_sender, receiver, esGmxBalance); } uint256 glpAmount = IRewardTracker(feeGlpTracker).depositBalances(_sender, glp); if (glpAmount > 0) { IRewardTracker(stakedGlpTracker).unstakeForAccount(_sender, feeGlpTracker, glpAmount, _sender); IRewardTracker(feeGlpTracker).unstakeForAccount(_sender, glp, glpAmount, _sender); IRewardTracker(feeGlpTracker).stakeForAccount(_sender, receiver, glp, glpAmount); IRewardTracker(stakedGlpTracker).stakeForAccount(receiver, receiver, feeGlpTracker, glpAmount); } IVester(gmxVester).transferStakeValues(_sender, receiver); IVester(glpVester).transferStakeValues(_sender, receiver); } function _validateReceiver(address _receiver) private view { require(IRewardTracker(stakedGmxTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: stakedGmxTracker.averageStakedAmounts > 0"); require(IRewardTracker(stakedGmxTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: stakedGmxTracker.cumulativeRewards > 0"); require(IRewardTracker(bonusGmxTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: bonusGmxTracker.averageStakedAmounts > 0"); require(IRewardTracker(bonusGmxTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: bonusGmxTracker.cumulativeRewards > 0"); require(IRewardTracker(feeGmxTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: feeGmxTracker.averageStakedAmounts > 0"); require(IRewardTracker(feeGmxTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: feeGmxTracker.cumulativeRewards > 0"); require(IVester(gmxVester).transferredAverageStakedAmounts(_receiver) == 0, "RewardRouter: gmxVester.transferredAverageStakedAmounts > 0"); require(IVester(gmxVester).transferredCumulativeRewards(_receiver) == 0, "RewardRouter: gmxVester.transferredCumulativeRewards > 0"); require(IRewardTracker(stakedGlpTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: stakedGlpTracker.averageStakedAmounts > 0"); require(IRewardTracker(stakedGlpTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: stakedGlpTracker.cumulativeRewards > 0"); require(IRewardTracker(feeGlpTracker).averageStakedAmounts(_receiver) == 0, "RewardRouter: feeGlpTracker.averageStakedAmounts > 0"); require(IRewardTracker(feeGlpTracker).cumulativeRewards(_receiver) == 0, "RewardRouter: feeGlpTracker.cumulativeRewards > 0"); require(IVester(glpVester).transferredAverageStakedAmounts(_receiver) == 0, "RewardRouter: gmxVester.transferredAverageStakedAmounts > 0"); require(IVester(glpVester).transferredCumulativeRewards(_receiver) == 0, "RewardRouter: gmxVester.transferredCumulativeRewards > 0"); require(IERC20(gmxVester).balanceOf(_receiver) == 0, "RewardRouter: gmxVester.balance > 0"); require(IERC20(glpVester).balanceOf(_receiver) == 0, "RewardRouter: glpVester.balance > 0"); } function _compound(address _account) private { _compoundGmx(_account); _compoundGlp(_account); } function _compoundGmx(address _account) private { uint256 esGmxAmount = IRewardTracker(stakedGmxTracker).claimForAccount(_account, _account); if (esGmxAmount > 0) { _stakeGmx(_account, _account, esGmx, esGmxAmount); } uint256 bnGmxAmount = IRewardTracker(bonusGmxTracker).claimForAccount(_account, _account); if (bnGmxAmount > 0) { IRewardTracker(feeGmxTracker).stakeForAccount(_account, _account, bnGmx, bnGmxAmount); } } function _compoundGlp(address _account) private { uint256 esGmxAmount = IRewardTracker(stakedGlpTracker).claimForAccount(_account, _account); if (esGmxAmount > 0) { _stakeGmx(_account, _account, esGmx, esGmxAmount); } } function _stakeGmx(address _fundingAccount, address _account, address _token, uint256 _amount) private { require(_amount > 0, "RewardRouter: invalid _amount"); IRewardTracker(stakedGmxTracker).stakeForAccount(_fundingAccount, _account, _token, _amount); IRewardTracker(bonusGmxTracker).stakeForAccount(_account, _account, stakedGmxTracker, _amount); IRewardTracker(feeGmxTracker).stakeForAccount(_account, _account, bonusGmxTracker, _amount); emit StakeGmx(_account, _token, _amount); } function _unstakeGmx(address _account, address _token, uint256 _amount, bool _shouldReduceBnGmx) private { require(_amount > 0, "RewardRouter: invalid _amount"); uint256 balance = IRewardTracker(stakedGmxTracker).stakedAmounts(_account); IRewardTracker(feeGmxTracker).unstakeForAccount(_account, bonusGmxTracker, _amount, _account); IRewardTracker(bonusGmxTracker).unstakeForAccount(_account, stakedGmxTracker, _amount, _account); IRewardTracker(stakedGmxTracker).unstakeForAccount(_account, _token, _amount, _account); if (_shouldReduceBnGmx) { uint256 bnGmxAmount = IRewardTracker(bonusGmxTracker).claimForAccount(_account, _account); if (bnGmxAmount > 0) { IRewardTracker(feeGmxTracker).stakeForAccount(_account, _account, bnGmx, bnGmxAmount); } uint256 stakedBnGmx = IRewardTracker(feeGmxTracker).depositBalances(_account, bnGmx); if (stakedBnGmx > 0) { uint256 reductionAmount = stakedBnGmx.mul(_amount).div(balance); IRewardTracker(feeGmxTracker).unstakeForAccount(_account, bnGmx, reductionAmount, _account); IMintable(bnGmx).burn(_account, reductionAmount); } } emit UnstakeGmx(_account, _token, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeGlp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeGmx","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeGlp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeGmx","type":"event"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"acceptTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"batchCompoundForAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchStakeGmxForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bnGmx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusGmxTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEsGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"compoundForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"esGmx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeGlpTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeGmxTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glpManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glpVester","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmxVester","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_shouldClaimGmx","type":"bool"},{"internalType":"bool","name":"_shouldStakeGmx","type":"bool"},{"internalType":"bool","name":"_shouldClaimEsGmx","type":"bool"},{"internalType":"bool","name":"_shouldStakeEsGmx","type":"bool"},{"internalType":"bool","name":"_shouldStakeMultiplierPoints","type":"bool"},{"internalType":"bool","name":"_shouldClaimWeth","type":"bool"},{"internalType":"bool","name":"_shouldConvertWethToEth","type":"bool"}],"name":"handleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_gmx","type":"address"},{"internalType":"address","name":"_esGmx","type":"address"},{"internalType":"address","name":"_bnGmx","type":"address"},{"internalType":"address","name":"_glp","type":"address"},{"internalType":"address","name":"_stakedGmxTracker","type":"address"},{"internalType":"address","name":"_bonusGmxTracker","type":"address"},{"internalType":"address","name":"_feeGmxTracker","type":"address"},{"internalType":"address","name":"_feeGlpTracker","type":"address"},{"internalType":"address","name":"_stakedGlpTracker","type":"address"},{"internalType":"address","name":"_glpManager","type":"address"},{"internalType":"address","name":"_gmxVester","type":"address"},{"internalType":"address","name":"_glpVester","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minUsdg","type":"uint256"},{"internalType":"uint256","name":"_minGlp","type":"uint256"}],"name":"mintAndStakeGlp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minUsdg","type":"uint256"},{"internalType":"uint256","name":"_minGlp","type":"uint256"}],"name":"mintAndStakeGlpETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingReceivers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"signalTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeEsGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeGmxForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedGlpTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedGmxTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_glpAmount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"unstakeAndRedeemGlp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_glpAmount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"},{"internalType":"address payable","name":"_receiver","type":"address"}],"name":"unstakeAndRedeemGlpETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstakeEsGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstakeGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506001600081905580546001600160a01b031916331790556153a4806100376000396000f3fe6080604052600436106101b95760003560e01c806301e336671461021d578063078580d2146102605780630ce4018a1461028a5780630db79e52146102bb5780630f3aa554146103eb57806312d43a51146104445780631af276a6146104595780631fcd60e5146105075780632a9f40831461051c5780632fdd983d1461054f57806330b70002146105ea57806331e67c7114610646578063364e23111461065b5780633671df25146106a0578063392e53cd146106b55780633fc8cef3146106de57806341d315b4146106f35780634e71d92d1461070857806351c3e3b41461071d57806353a8aa03146107325780635da4b8dd146107555780635fe3945f1461078e57806364f64467146107a3578063655603a4146107cd5780636a192a781461080057806378a207ee14610815578063abb5e5e21461082a578063af394d0014610869578063cfad57a21461087e578063d294f093146108b1578063e102f564146108c6578063e1b9db89146108db578063e1c363b71461090e578063ef8c599414610923578063ef9aacfd1461094d578063f3daeacc14610980578063f69e2046146109aa578063fa6db1bc146109bf57610218565b36610218576002546001600160a01b03163314610216576040805162461bcd60e51b81526020600482015260166024820152752937baba32b91d1034b73b30b634b21039b2b73232b960511b604482015290519081900360640190fd5b005b600080fd5b34801561022957600080fd5b506102166004803603606081101561024057600080fd5b506001600160a01b038135811691602081013590911690604001356109d4565b34801561026c57600080fd5b506102166004803603602081101561028357600080fd5b5035610a3a565b34801561029657600080fd5b5061029f610aa7565b604080516001600160a01b039092168252519081900360200190f35b3480156102c757600080fd5b50610216600480360360408110156102de57600080fd5b810190602081018135600160201b8111156102f857600080fd5b82018360208201111561030a57600080fd5b803590602001918460208302840111600160201b8311171561032b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561037a57600080fd5b82018360208201111561038c57600080fd5b803590602001918460208302840111600160201b831117156103ad57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ab6945050505050565b3480156103f757600080fd5b506104326004803603608081101561040e57600080fd5b506001600160a01b0381358116916020810135916040820135916060013516610bab565b60408051918252519081900360200190f35b34801561045057600080fd5b5061029f610e1b565b34801561046557600080fd5b506102166004803603602081101561047c57600080fd5b810190602081018135600160201b81111561049657600080fd5b8201836020820111156104a857600080fd5b803590602001918460208302840111600160201b831117156104c957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610e2a945050505050565b34801561051357600080fd5b5061029f610efb565b34801561052857600080fd5b506102166004803603602081101561053f57600080fd5b50356001600160a01b0316610f0a565b34801561055b57600080fd5b5061021660048036036101a081101561057357600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c082013581169160e08101358216916101008201358116916101208101358216916101408201358116916101608101358216916101809091013516610fab565b3480156105f657600080fd5b50610216600480360360e081101561060d57600080fd5b508035151590602081013515159060408101351515906060810135151590608081013515159060a081013515159060c001351515611138565b34801561065257600080fd5b5061029f6117fa565b34801561066757600080fd5b506104326004803603608081101561067e57600080fd5b506001600160a01b038135169060208101359060408101359060600135611809565b3480156106ac57600080fd5b5061029f611a77565b3480156106c157600080fd5b506106ca611a86565b604080519115158252519081900360200190f35b3480156106ea57600080fd5b5061029f611a96565b3480156106ff57600080fd5b5061029f611aa5565b34801561071457600080fd5b50610216611ab4565b34801561072957600080fd5b5061029f611d13565b6104326004803603604081101561074857600080fd5b5080359060200135611d22565b34801561076157600080fd5b506102166004803603604081101561077857600080fd5b506001600160a01b03813516906020013561208d565b34801561079a57600080fd5b5061021661213f565b3480156107af57600080fd5b50610216600480360360208110156107c657600080fd5b50356121e4565b3480156107d957600080fd5b50610216600480360360208110156107f057600080fd5b50356001600160a01b0316612249565b34801561080c57600080fd5b5061029f612c52565b34801561082157600080fd5b5061029f612c61565b34801561083657600080fd5b506104326004803603606081101561084d57600080fd5b50803590602081013590604001356001600160a01b0316612c70565b34801561087557600080fd5b5061029f612f59565b34801561088a57600080fd5b50610216600480360360208110156108a157600080fd5b50356001600160a01b0316612f68565b3480156108bd57600080fd5b50610216612fd7565b3480156108d257600080fd5b5061029f6130fe565b3480156108e757600080fd5b5061029f600480360360208110156108fe57600080fd5b50356001600160a01b031661310d565b34801561091a57600080fd5b5061029f613128565b34801561092f57600080fd5b506102166004803603602081101561094657600080fd5b5035613137565b34801561095957600080fd5b506102166004803603602081101561097057600080fd5b50356001600160a01b031661319c565b34801561098c57600080fd5b50610216600480360360208110156109a357600080fd5b503561338a565b3480156109b657600080fd5b506102166133ef565b3480156109cb57600080fd5b5061029f61344a565b6001546001600160a01b03163314610a21576040805162461bcd60e51b81526020600482015260156024820152600080516020614f51833981519152604482015290519081900360640190fd5b610a356001600160a01b0384168383613459565b505050565b60026000541415610a80576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b6002600055600354610a9f9033906001600160a01b03168360016134ab565b506001600055565b6007546001600160a01b031681565b60026000541415610afc576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610b4e576040805162461bcd60e51b81526020600482015260156024820152600080516020614f51833981519152604482015290519081900360640190fd5b6003546001600160a01b031660005b8351811015610ba057610b9833858381518110610b7657fe5b602002602001015184868581518110610b8b57fe5b60200260200101516139ed565b600101610b5d565b505060016000555050565b600060026000541415610bf3576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b600260005583610c38576040805162461bcd60e51b815260206004820181905260248201526000805160206152b8833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015610d2357600080fd5b505af1158015610d37573d6000803e3d6000fd5b5050600c54604080516371d597ad60e01b81526001600160a01b0386811660048301528b81166024830152604482018b9052606482018a905288811660848301529151600095509190921692506371d597ad9160a48082019260209290919082900301818787803b158015610dab57600080fd5b505af1158015610dbf573d6000803e3d6000fd5b505050506040513d6020811015610dd557600080fd5b5051604080516001600160a01b03851681526020810189905281519293506000805160206151d1833981519152929081900390910190a160016000559695505050505050565b6001546001600160a01b031681565b60026000541415610e70576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610ec2576040805162461bcd60e51b81526020600482015260156024820152600080516020614f51833981519152604482015290519081900360640190fd5b60005b8151811015610ef257610eea828281518110610edd57fe5b6020026020010151613bfc565b600101610ec5565b50506001600055565b6008546001600160a01b031681565b60026000541415610f50576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610fa2576040805162461bcd60e51b81526020600482015260156024820152600080516020614f51833981519152604482015290519081900360640190fd5b610a9f81613bfc565b6001546001600160a01b03163314610ff8576040805162461bcd60e51b81526020600482015260156024820152600080516020614f51833981519152604482015290519081900360640190fd5b600154600160a01b900460ff16156110415760405162461bcd60e51b8152600401808060200182810382526021815260200180614fe26021913960400191505060405180910390fd5b6001805460ff60a01b1916600160a01b179055600280546001600160a01b039e8f166001600160a01b031991821617909155600380549d8f169d82169d909d17909c55600480549b8e169b8d169b909b17909a5560058054998d16998c169990991790985560068054978c16978b169790971790965560078054958b16958a169590951790945560088054938a169389169390931790925560098054918916918816919091179055600b8054918816918716919091179055600a8054918716918616919091179055600c8054918616918516919091179055600d8054918516918416919091179055600e8054919093169116179055565b6002600054141561117e576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000908155339088156112aa57600d54604080516309f4173d60e11b81526001600160a01b03858116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b1580156111e657600080fd5b505af11580156111fa573d6000803e3d6000fd5b505050506040513d602081101561121057600080fd5b5051600e54604080516309f4173d60e11b81526001600160a01b03878116600483018190526024830152915193945060009391909216916313e82e7a91604480830192602092919082900301818787803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b505050506040513d602081101561129757600080fd5b505190506112a58282613c11565b925050505b8780156112b75750600081115b156112d6576003546112d690839081906001600160a01b0316846139ed565b600087156113fb57600754604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b15801561133757600080fd5b505af115801561134b573d6000803e3d6000fd5b505050506040513d602081101561136157600080fd5b5051600a54604080516309f4173d60e11b81526001600160a01b03888116600483018190526024830152915193945060009391909216916313e82e7a91604480830192602092919082900301818787803b1580156113be57600080fd5b505af11580156113d2573d6000803e3d6000fd5b505050506040513d60208110156113e857600080fd5b505190506113f68282613c11565b925050505b8680156114085750600081115b156114275760045461142790849081906001600160a01b0316846139ed565b851561153c57600854604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b15801561148657600080fd5b505af115801561149a573d6000803e3d6000fd5b505050506040513d60208110156114b057600080fd5b50519050801561153a5760095460055460408051631e42d69b60e21b81526001600160a01b038881166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b505050505b505b84156117e95783156116e457600954604080516309f4173d60e11b81526001600160a01b038681166004830152306024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b1580156115a057600080fd5b505af11580156115b4573d6000803e3d6000fd5b505050506040513d60208110156115ca57600080fd5b5051600b54604080516309f4173d60e11b81526001600160a01b038881166004830152306024830152915193945060009391909216916313e82e7a91604480830192602092919082900301818787803b15801561162657600080fd5b505af115801561163a573d6000803e3d6000fd5b505050506040513d602081101561165057600080fd5b5051905060006116608383613c11565b60025460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b1580156116b057600080fd5b505af11580156116c4573d6000803e3d6000fd5b506116dc925050506001600160a01b03871682613c72565b5050506117e9565b600954604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b15801561173a57600080fd5b505af115801561174e573d6000803e3d6000fd5b505050506040513d602081101561176457600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03868116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b1580156117bc57600080fd5b505af11580156117d0573d6000803e3d6000fd5b505050506040513d60208110156117e657600080fd5b50505b505060016000555050505050505050565b6003546001600160a01b031681565b600060026000541415611851576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b600260005583611896576040805162461bcd60e51b815260206004820152601d60248201526000805160206152fb833981519152604482015290519081900360640190fd5b600c54604080516317eb2a1560e01b81523360048201819052602482018190526001600160a01b038981166044840152606483018990526084830188905260a483018790529251909360009316916317eb2a159160c480830192602092919082900301818787803b15801561190a57600080fd5b505af115801561191e573d6000803e3d6000fd5b505050506040513d602081101561193457600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b15801561199f57600080fd5b505af11580156119b3573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015611a1e57600080fd5b505af1158015611a32573d6000803e3d6000fd5b5050604080516001600160a01b038616815260208101859052815160008051602061517d8339815191529450908190039091019150a160016000559695505050505050565b600e546001600160a01b031681565b600154600160a01b900460ff1681565b6002546001600160a01b031681565b600d546001600160a01b031681565b60026000541415611afa576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b158015611b5957600080fd5b505af1158015611b6d573d6000803e3d6000fd5b505050506040513d6020811015611b8357600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611bdb57600080fd5b505af1158015611bef573d6000803e3d6000fd5b505050506040513d6020811015611c0557600080fd5b5050600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611c5d57600080fd5b505af1158015611c71573d6000803e3d6000fd5b505050506040513d6020811015611c8757600080fd5b5050600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b505050506040513d6020811015611d0957600080fd5b5050600160005550565b6009546001600160a01b031681565b600060026000541415611d6a576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b600260005534611dc1576040805162461bcd60e51b815260206004820152601f60248201527f526577617264526f757465723a20696e76616c6964206d73672e76616c756500604482015290519081900360640190fd5b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e1157600080fd5b505af1158015611e25573d6000803e3d6000fd5b5050600254600c546040805163095ea7b360e01b81526001600160a01b039283166004820152346024820152905191909216945063095ea7b39350604480830193506020928290030181600087803b158015611e8057600080fd5b505af1158015611e94573d6000803e3d6000fd5b505050506040513d6020811015611eaa57600080fd5b5050600c54600254604080516317eb2a1560e01b815230600482015233602482018190526001600160a01b0393841660448301523460648301526084820188905260a482018790529151919360009316916317eb2a159160c48082019260209290919082900301818787803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b505050506040513d6020811015611f4c57600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b158015611fb757600080fd5b505af1158015611fcb573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b5050604080516001600160a01b038616815260208101859052815160008051602061517d8339815191529450908190039091019150a16001600055949350505050565b600260005414156120d3576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314612125576040805162461bcd60e51b81526020600482015260156024820152600080516020614f51833981519152604482015290519081900360640190fd5b600354610ef290339084906001600160a01b0316846139ed565b60026000541415612185576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000908155600754604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b158015611c5d57600080fd5b6002600054141561222a576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b6002600055600454610a9f9033906001600160a01b03168360016134ab565b6002600054141561228f576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b6002600055600d54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b1580156122e157600080fd5b505afa1580156122f5573d6000803e3d6000fd5b505050506040513d602081101561230b57600080fd5b5051156123495760405162461bcd60e51b8152600401808060200182810382526026815260200180614f2b6026913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561239657600080fd5b505afa1580156123aa573d6000803e3d6000fd5b505050506040513d60208110156123c057600080fd5b5051156123fe5760405162461bcd60e51b8152600401808060200182810382526026815260200180614f2b6026913960400191505060405180910390fd5b6001600160a01b038181166000908152600f602052604090205433911681146124585760405162461bcd60e51b81526004018080602001828103825260248152602001806150296024913960400191505060405180910390fd5b6001600160a01b0382166000908152600f6020526040902080546001600160a01b031916905561248781613d57565b61249082613bfc565b60075460035460408051637aeceb1f60e11b81526001600160a01b03868116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b1580156124ec57600080fd5b505afa158015612500573d6000803e3d6000fd5b505050506040513d602081101561251657600080fd5b5051905080156125545760035461253a9084906001600160a01b03168360006134ab565b60035461255490849084906001600160a01b0316846139ed565b6007546004805460408051637aeceb1f60e11b81526001600160a01b0388811694820194909452918316602483015251600093929092169163f5d9d63e91604480820192602092909190829003018186803b1580156125b257600080fd5b505afa1580156125c6573d6000803e3d6000fd5b505050506040513d60208110156125dc57600080fd5b50519050801561261a576004546126009085906001600160a01b03168360006134ab565b60045461261a90859085906001600160a01b0316846139ed565b60095460055460408051637aeceb1f60e11b81526001600160a01b03888116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b15801561267657600080fd5b505afa15801561268a573d6000803e3d6000fd5b505050506040513d60208110156126a057600080fd5b5051905080156127ad576009546005546040805163098bf59d60e01b81526001600160a01b038981166004830181905293811660248301526044820186905260648201939093529051919092169163098bf59d91608480830192600092919082900301818387803b15801561271457600080fd5b505af1158015612728573d6000803e3d6000fd5b505060095460055460408051631e42d69b60e21b81526001600160a01b038b811660048301528a81166024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561279457600080fd5b505af11580156127a8573d6000803e3d6000fd5b505050505b6000600460009054906101000a90046001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561281157600080fd5b505afa158015612825573d6000803e3d6000fd5b505050506040513d602081101561283b57600080fd5b5051905080156128d45760048054604080516323b872dd60e01b81526001600160a01b038a811694820194909452888416602482015260448101859052905192909116916323b872dd916064808201926020929091908290030181600087803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b505050506040513d60208110156128d157600080fd5b50505b600b5460065460408051637aeceb1f60e11b81526001600160a01b038a8116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b15801561293057600080fd5b505afa158015612944573d6000803e3d6000fd5b505050506040513d602081101561295a57600080fd5b505190508015612b6857600a54600b546040805163098bf59d60e01b81526001600160a01b038b81166004830181905293811660248301526044820186905260648201939093529051919092169163098bf59d91608480830192600092919082900301818387803b1580156129ce57600080fd5b505af11580156129e2573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b038d8116600483018190529381166024830152604482018890526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015612a5057600080fd5b505af1158015612a64573d6000803e3d6000fd5b5050600b5460065460408051631e42d69b60e21b81526001600160a01b038d811660048301528c81166024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015612ad057600080fd5b505af1158015612ae4573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b038c8116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b505050505b600d5460408051630f713c2360e41b81526001600160a01b038a8116600483015289811660248301529151919092169163f713c23091604480830192600092919082900301818387803b158015612bbe57600080fd5b505af1158015612bd2573d6000803e3d6000fd5b5050600e5460408051630f713c2360e41b81526001600160a01b038c811660048301528b81166024830152915191909216935063f713c2309250604480830192600092919082900301818387803b158015612c2c57600080fd5b505af1158015612c40573d6000803e3d6000fd5b50506001600055505050505050505050565b6004546001600160a01b031681565b6006546001600160a01b031681565b600060026000541415612cb8576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b600260005583612cfd576040805162461bcd60e51b815260206004820181905260248201526000805160206152b8833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b158015612d6657600080fd5b505af1158015612d7a573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015612de857600080fd5b505af1158015612dfc573d6000803e3d6000fd5b5050600c54600254604080516371d597ad60e01b81526001600160a01b0387811660048301529283166024820152604481018b9052606481018a90523060848201529051600095509190921692506371d597ad9160a48082019260209290919082900301818787803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b505050506040513d6020811015612e9b57600080fd5b505160025460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015612eed57600080fd5b505af1158015612f01573d6000803e3d6000fd5b50612f19925050506001600160a01b03851682613c72565b604080516001600160a01b03841681526020810188905281516000805160206151d1833981519152929181900390910190a1600160005595945050505050565b600a546001600160a01b031681565b6001546001600160a01b03163314612fb5576040805162461bcd60e51b81526020600482015260156024820152600080516020614f51833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002600054141561301d576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b15801561307c57600080fd5b505af1158015613090573d6000803e3d6000fd5b505050506040513d60208110156130a657600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b158015611cdf57600080fd5b6005546001600160a01b031681565b600f602052600090815260409020546001600160a01b031681565b600b546001600160a01b031681565b6002600054141561317d576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b6002600055600454610a9f90339081906001600160a01b0316846139ed565b600260005414156131e2576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b6002600055600d54604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561323257600080fd5b505afa158015613246573d6000803e3d6000fd5b505050506040513d602081101561325c57600080fd5b50511561329a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614f2b6026913960400191505060405180910390fd5b600e54604080516370a0823160e01b815233600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156132e557600080fd5b505afa1580156132f9573d6000803e3d6000fd5b505050506040513d602081101561330f57600080fd5b50511561334d5760405162461bcd60e51b8152600401808060200182810382526026815260200180614f2b6026913960400191505060405180910390fd5b61335681613d57565b336000908152600f6020526040812080546001600160a01b0319166001600160a01b03939093169290921790915560019055565b600260005414156133d0576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b6002600055600354610a9f90339081906001600160a01b0316846139ed565b60026000541415613435576040805162461bcd60e51b815260206004820152601f6024820152600080516020614f0b833981519152604482015290519081900360640190fd5b600260005561344333613bfc565b6001600055565b600c546001600160a01b031681565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610a359084906148a7565b600082116134ee576040805162461bcd60e51b815260206004820152601d60248201526000805160206152fb833981519152604482015290519081900360640190fd5b600754604080516310c1c10360e01b81526001600160a01b038781166004830152915160009392909216916310c1c10391602480820192602092909190829003018186803b15801561353f57600080fd5b505afa158015613553573d6000803e3d6000fd5b505050506040513d602081101561356957600080fd5b50516009546008546040805163098bf59d60e01b81526001600160a01b038a8116600483018190529381166024830152604482018990526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b1580156135d757600080fd5b505af11580156135eb573d6000803e3d6000fd5b50506008546007546040805163098bf59d60e01b81526001600160a01b038b8116600483018190529381166024830152604482018a90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b15801561365957600080fd5b505af115801561366d573d6000803e3d6000fd5b50506007546040805163098bf59d60e01b81526001600160a01b038a8116600483018190528a82166024840152604483018a90526064830152915191909216935063098bf59d9250608480830192600092919082900301818387803b1580156136d557600080fd5b505af11580156136e9573d6000803e3d6000fd5b50505050811561399c57600854604080516309f4173d60e11b81526001600160a01b03888116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b15801561374c57600080fd5b505af1158015613760573d6000803e3d6000fd5b505050506040513d602081101561377657600080fd5b5051905080156138005760095460055460408051631e42d69b60e21b81526001600160a01b038a81166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b1580156137e757600080fd5b505af11580156137fb573d6000803e3d6000fd5b505050505b60095460055460408051637aeceb1f60e11b81526001600160a01b038a8116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b15801561385c57600080fd5b505afa158015613870573d6000803e3d6000fd5b505050506040513d602081101561388657600080fd5b5051905080156139995760006138a6846138a08489614958565b906149b1565b6009546005546040805163098bf59d60e01b81526001600160a01b038d8116600483018190529381166024830152604482018690526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b15801561391257600080fd5b505af1158015613926573d6000803e3d6000fd5b505060055460408051632770a7eb60e21b81526001600160a01b038d81166004830152602482018790529151919092169350639dc29fac9250604480830192600092919082900301818387803b15801561397f57600080fd5b505af1158015613993573d6000803e3d6000fd5b50505050505b50505b604080516001600160a01b0380881682528616602082015280820185905290517fce8eb393006add0768cc6cefb3ca0fc4787015ce1ac86bd800e72a79993103459181900360600190a15050505050565b60008111613a30576040805162461bcd60e51b815260206004820152601d60248201526000805160206152fb833981519152604482015290519081900360640190fd5b60075460408051631e42d69b60e21b81526001600160a01b03878116600483015286811660248301528581166044830152606482018590529151919092169163790b5a6c91608480830192600092919082900301818387803b158015613a9557600080fd5b505af1158015613aa9573d6000803e3d6000fd5b505060085460075460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015613b1457600080fd5b505af1158015613b28573d6000803e3d6000fd5b505060095460085460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b158015613b9357600080fd5b505af1158015613ba7573d6000803e3d6000fd5b5050604080516001600160a01b0380881682528616602082015280820185905290517fad0723806aa1e5a8fb826fc9f0c5b589e585a6b60dc768a1b20691c95062d2d69350908190036060019150a150505050565b613c05816149f0565b613c0e81614ba8565b50565b600082820183811015613c69576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b90505b92915050565b80471015613cc7576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114613d12576040519150601f19603f3d011682016040523d82523d6000602084013e613d17565b606091505b5050905080610a355760405162461bcd60e51b815260040180806020018281038252603a815260200180614fa8603a913960400191505060405180910390fd5b6007546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b158015613da457600080fd5b505afa158015613db8573d6000803e3d6000fd5b505050506040513d6020811015613dce57600080fd5b505115613e0c5760405162461bcd60e51b8152600401808060200182810382526037815260200180614f716037913960400191505060405180910390fd5b60075460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b158015613e5957600080fd5b505afa158015613e6d573d6000803e3d6000fd5b505050506040513d6020811015613e8357600080fd5b505115613ec15760405162461bcd60e51b81526004018080602001828103825260348152602001806151496034913960400191505060405180910390fd5b6008546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b158015613f0e57600080fd5b505afa158015613f22573d6000803e3d6000fd5b505050506040513d6020811015613f3857600080fd5b505115613f765760405162461bcd60e51b81526004018080602001828103825260368152602001806150e06036913960400191505060405180910390fd5b60085460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b158015613fc357600080fd5b505afa158015613fd7573d6000803e3d6000fd5b505050506040513d6020811015613fed57600080fd5b50511561402b5760405162461bcd60e51b81526004018080602001828103825260338152602001806151166033913960400191505060405180910390fd5b6009546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b15801561407857600080fd5b505afa15801561408c573d6000803e3d6000fd5b505050506040513d60208110156140a257600080fd5b5051156140e05760405162461bcd60e51b815260040180806020018281038252603481526020018061519d6034913960400191505060405180910390fd5b60095460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b15801561412d57600080fd5b505afa158015614141573d6000803e3d6000fd5b505050506040513d602081101561415757600080fd5b5051156141955760405162461bcd60e51b81526004018080602001828103825260318152602001806152256031913960400191505060405180910390fd5b600d5460408051631ccdc0d760e21b81526001600160a01b03848116600483015291519190921691637337035c916024808301926020929190829003018186803b1580156141e257600080fd5b505afa1580156141f6573d6000803e3d6000fd5b505050506040513d602081101561420c57600080fd5b50511561424a5760405162461bcd60e51b815260040180806020018281038252603b8152602001806150a5603b913960400191505060405180910390fd5b600d5460408051635b8de71560e11b81526001600160a01b0384811660048301529151919092169163b71bce2a916024808301926020929190829003018186803b15801561429757600080fd5b505afa1580156142ab573d6000803e3d6000fd5b505050506040513d60208110156142c157600080fd5b5051156142ff5760405162461bcd60e51b81526004018080602001828103825260388152602001806152806038913960400191505060405180910390fd5b600a546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b15801561434c57600080fd5b505afa158015614360573d6000803e3d6000fd5b505050506040513d602081101561437657600080fd5b5051156143b45760405162461bcd60e51b815260040180806020018281038252603781526020018061504d6037913960400191505060405180910390fd5b600a5460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b15801561440157600080fd5b505afa158015614415573d6000803e3d6000fd5b505050506040513d602081101561442b57600080fd5b5051156144695760405162461bcd60e51b8152600401808060200182810382526034815260200180614ed76034913960400191505060405180910390fd5b600b546040805163a318021760e01b81526001600160a01b0384811660048301529151919092169163a3180217916024808301926020929190829003018186803b1580156144b657600080fd5b505afa1580156144ca573d6000803e3d6000fd5b505050506040513d60208110156144e057600080fd5b50511561451e5760405162461bcd60e51b81526004018080602001828103825260348152602001806151f16034913960400191505060405180910390fd5b600b5460408051633792def360e01b81526001600160a01b03848116600483015291519190921691633792def3916024808301926020929190829003018186803b15801561456b57600080fd5b505afa15801561457f573d6000803e3d6000fd5b505050506040513d602081101561459557600080fd5b5051156145d35760405162461bcd60e51b815260040180806020018281038252603181526020018061533e6031913960400191505060405180910390fd5b600e5460408051631ccdc0d760e21b81526001600160a01b03848116600483015291519190921691637337035c916024808301926020929190829003018186803b15801561462057600080fd5b505afa158015614634573d6000803e3d6000fd5b505050506040513d602081101561464a57600080fd5b5051156146885760405162461bcd60e51b815260040180806020018281038252603b8152602001806150a5603b913960400191505060405180910390fd5b600e5460408051635b8de71560e11b81526001600160a01b0384811660048301529151919092169163b71bce2a916024808301926020929190829003018186803b1580156146d557600080fd5b505afa1580156146e9573d6000803e3d6000fd5b505050506040513d60208110156146ff57600080fd5b50511561473d5760405162461bcd60e51b81526004018080602001828103825260388152602001806152806038913960400191505060405180910390fd5b600d54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561478a57600080fd5b505afa15801561479e573d6000803e3d6000fd5b505050506040513d60208110156147b457600080fd5b5051156147f25760405162461bcd60e51b815260040180806020018281038252602381526020018061531b6023913960400191505060405180910390fd5b600e54604080516370a0823160e01b81526001600160a01b038481166004830152915191909216916370a08231916024808301926020929190829003018186803b15801561483f57600080fd5b505afa158015614853573d6000803e3d6000fd5b505050506040513d602081101561486957600080fd5b505115613c0e5760405162461bcd60e51b81526004018080602001828103825260238152602001806152d86023913960400191505060405180910390fd5b60606148fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614c539092919063ffffffff16565b805190915015610a355780806020019051602081101561491b57600080fd5b5051610a355760405162461bcd60e51b815260040180806020018281038252602a815260200180615256602a913960400191505060405180910390fd5b60008261496757506000613c6c565b8282028284828161497457fe5b0414613c695760405162461bcd60e51b81526004018080602001828103825260218152602001806150846021913960400191505060405180910390fd5b6000613c6983836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250614c6c565b600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015614a4957600080fd5b505af1158015614a5d573d6000803e3d6000fd5b505050506040513d6020811015614a7357600080fd5b505190508015614a9757600454614a9790839081906001600160a01b0316846139ed565b600854604080516309f4173d60e11b81526001600160a01b03858116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015614af057600080fd5b505af1158015614b04573d6000803e3d6000fd5b505050506040513d6020811015614b1a57600080fd5b505190508015610a355760095460055460408051631e42d69b60e21b81526001600160a01b038781166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b158015614b8b57600080fd5b505af1158015614b9f573d6000803e3d6000fd5b50505050505050565b600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015614c0157600080fd5b505af1158015614c15573d6000803e3d6000fd5b505050506040513d6020811015614c2b57600080fd5b505190508015614c4f57600454614c4f90839081906001600160a01b0316846139ed565b5050565b6060614c628484600085614d0e565b90505b9392505050565b60008183614cf85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cbd578181015183820152602001614ca5565b50505050905090810190601f168015614cea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d0457fe5b0495945050505050565b606082471015614d4f5760405162461bcd60e51b81526004018080602001828103825260268152602001806150036026913960400191505060405180910390fd5b614d5885614e6a565b614da9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310614de85780518252601f199092019160209182019101614dc9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614e4a576040519150601f19603f3d011682016040523d82523d6000602084013e614e4f565b606091505b5091509150614e5f828286614e70565b979650505050505050565b3b151590565b60608315614e7f575081614c65565b825115614e8f5782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315614cbd578181015183820152602001614ca556fe526577617264526f757465723a207374616b6564476c70547261636b65722e63756d756c617469766552657761726473203e20305265656e7472616e637947756172643a207265656e7472616e742063616c6c00526577617264526f757465723a2073656e646572206861732076657374656420746f6b656e73476f7665726e61626c653a20666f7262696464656e0000000000000000000000526577617264526f757465723a207374616b6564476d78547261636b65722e617665726167655374616b6564416d6f756e7473203e2030416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526577617264526f757465723a20616c726561647920696e697469616c697a6564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c526577617264526f757465723a207472616e73666572206e6f74207369676e616c6c6564526577617264526f757465723a207374616b6564476c70547261636b65722e617665726167655374616b6564416d6f756e7473203e2030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526577617264526f757465723a20676d785665737465722e7472616e73666572726564417665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a20626f6e7573476d78547261636b65722e617665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a20626f6e7573476d78547261636b65722e63756d756c617469766552657761726473203e2030526577617264526f757465723a207374616b6564476d78547261636b65722e63756d756c617469766552657761726473203e2030a4725d47fa458d9222498e4d63f34527cf7318c1506f89d9092b35fdbcb64f3a526577617264526f757465723a20666565476d78547261636b65722e617665726167655374616b6564416d6f756e7473203e20301cb6202519b6b6c72ba5ed11e2c3f53af3cea010f96bfc705584e53e75cf034c526577617264526f757465723a20666565476c70547261636b65722e617665726167655374616b6564416d6f756e7473203e2030526577617264526f757465723a20666565476d78547261636b65722e63756d756c617469766552657761726473203e20305361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564526577617264526f757465723a20676d785665737465722e7472616e7366657272656443756d756c617469766552657761726473203e2030526577617264526f757465723a20696e76616c6964205f676c70416d6f756e74526577617264526f757465723a20676c705665737465722e62616c616e6365203e2030526577617264526f757465723a20696e76616c6964205f616d6f756e74000000526577617264526f757465723a20676d785665737465722e62616c616e6365203e2030526577617264526f757465723a20666565476c70547261636b65722e63756d756c617469766552657761726473203e2030a26469706673582212207236c915ee15d645cd3bf0538695d67e9a7913064b476809dcff259cb2fc3ab364736f6c634300060c0033
Deployed ByteCode Sourcemap
37371:17503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38438:4;;-1:-1:-1;;;;;38438:4:0;38424:10;:18;38416:53;;;;;-1:-1:-1;;;38416:53:0;;;;;;;;;;;;-1:-1:-1;;;38416:53:0;;;;;;;;;;;;;;;37371:17503;;;;;39553:156;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39553:156:0;;;;;;;;;;;;;;;;;:::i;40449:121::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40449:121:0;;:::i;37760:31::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;37760:31:0;;;;;;;;;;;;;;39717:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39717:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39717:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39717:293:0;;;;;;;;-1:-1:-1;39717:293:0;;-1:-1:-1;;;;;39717:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39717:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39717:293:0;;-1:-1:-1;39717:293:0;;-1:-1:-1;;;;;39717:293:0:i;42113:672::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42113:672:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;197:18;;;;;;;;;;;;;:::i;46898:207::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46898:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46898:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46898:207:0;;-1:-1:-1;46898:207:0;;-1:-1:-1;;;;;46898:207:0:i;37798:30::-;;;;;;;;;;;;;:::i;44544:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44544:114:0;-1:-1:-1;;;;;44544:114:0;;:::i;38485:986::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38485:986:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44666:2224::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44666:2224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37620:18::-;;;;;;;;;;;;;:::i;40711:645::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40711:645:0;;;;;;;;;;;;;;;;;;:::i;38030:24::-;;;;;;;;;;;;;:::i;37558:25::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;37592:19;;;;;;;;;;;;;:::i;37999:24::-;;;;;;;;;;;;;:::i;43551:392::-;;;;;;;;;;;;;:::i;37835:28::-;;;;;;;;;;;;;:::i;41364:741::-;;;;;;;;;;;;;;;;-1:-1:-1;41364:741:0;;;;;;;:::i;40018:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40018:157:0;;;;;;;;:::i;43951:247::-;;;;;;;;;;;;;:::i;40578:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40578:125:0;;:::i;47498:2254::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47498:2254:0;-1:-1:-1;;;;;47498:2254:0;;:::i;37645:20::-;;;;;;;;;;;;;:::i;37701:18::-;;;;;;;;;;;;;:::i;42793:750::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42793:750:0;;;;;;;;;;;-1:-1:-1;;;;;42793:750:0;;:::i;37872:40::-;;;;;;;;;;;;;:::i;397:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;397:76:0;-1:-1:-1;;;;;397:76:0;;:::i;44206:240::-;;;;;;;;;;;;;:::i;37672:20::-;;;;;;;;;;;;;:::i;38063:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38063:52:0;-1:-1:-1;;;;;38063:52:0;;:::i;37919:37::-;;;;;;;;;;;;;:::i;40314:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40314:127:0;;:::i;47113:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47113:377:0;-1:-1:-1;;;;;47113:377:0;;:::i;40183:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40183:123:0;;:::i;44454:82::-;;;;;;;;;;;;;:::i;37965:25::-;;;;;;;;;;;;;:::i;39553:156::-;340:3;;-1:-1:-1;;;;;340:3:0;326:10;:17;318:51;;;;;-1:-1:-1;;;318:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;318:51:0;;;;;;;;;;;;;;;39655:46:::1;-1:-1:-1::0;;;;;39655:27:0;::::1;39683:8:::0;39693:7;39655:27:::1;:46::i;:::-;39553:156:::0;;;:::o;40449:121::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;40543:3:::1;::::0;40519:43:::1;::::0;40531:10:::1;::::0;-1:-1:-1;;;;;40543:3:0::1;40548:7:::0;40543:3;40519:11:::1;:43::i;:::-;-1:-1:-1::0;2168:1:0;3130:7;:22;40449:121::o;37760:31::-;;;-1:-1:-1;;;;;37760:31:0;;:::o;39717:293::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;340:3:::1;::::0;-1:-1:-1;;;;;340:3:0::1;326:10;:17;318:51;;;::::0;;-1:-1:-1;;;318:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;318:51:0;;;;;;;;;;;;;::::1;;39861:3:::2;::::0;-1:-1:-1;;;;;39861:3:0::2;39846:12;39875:128;39899:9;:16;39895:1;:20;39875:128;;;39937:54;39947:10;39959:9;39969:1;39959:12;;;;;;;;;;;;;;39973:4;39979:8;39988:1;39979:11;;;;;;;;;;;;;;39937:9;:54::i;:::-;39917:3;;39875:128;;;-1:-1:-1::0;;2168:1:0;3130:7;:22;-1:-1:-1;;39717:293:0:o;42113:672::-;42248:7;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;42276:14;42268:59:::1;;;::::0;;-1:-1:-1;;;42268:59:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;42268:59:0;;;;;;;;;;;;;::::1;;42394:16;::::0;42439:13:::1;::::0;42379:95:::1;::::0;;-1:-1:-1;;;42379:95:0;;42358:10:::1;42379:95;::::0;::::1;::::0;;;-1:-1:-1;;;;;42439:13:0;;::::1;42379:95:::0;;;;;;;;;;;;;;;;;;42358:10;;42394:16;;;::::1;::::0;42379:50:::1;::::0;:95;;;;;42340:15:::1;::::0;42379:95;;;;;;;42340:15;42394:16;42379:95;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42500:13:0::1;::::0;42542:3:::1;::::0;42485:82:::1;::::0;;-1:-1:-1;;;42485:82:0;;-1:-1:-1;;;;;42485:82:0;;::::1;;::::0;::::1;::::0;;;42542:3;;::::1;42485:82:::0;;;;;;;;;;;;;;;;;;;42500:13;;;::::1;::::0;-1:-1:-1;42485:47:0::1;::::0;-1:-1:-1;42485:82:0;;;;;42500:13:::1;::::0;42485:82;;;;;;;42500:13;;42485:82;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42610:10:0::1;::::0;42598:101:::1;::::0;;-1:-1:-1;;;42598:101:0;;-1:-1:-1;;;;;42598:101:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;42578:17:::1;::::0;-1:-1:-1;42610:10:0;;;::::1;::::0;-1:-1:-1;42598:49:0::1;::::0;:101;;;;;::::1;::::0;;;;;;;;;42578:17;42610:10;42598:101;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42598:101:0;42717:31:::1;::::0;;-1:-1:-1;;;;;42717:31:0;::::1;::::0;;42598:101:::1;42717:31:::0;::::1;::::0;;;;;42598:101;;-1:-1:-1;;;;;;;;;;;;42717:31:0;;;;;;;;;::::1;2168:1:::0;3130:7;:22;42768:9;42113:672;-1:-1:-1;;;;;;42113:672:0:o;197:18::-;;;-1:-1:-1;;;;;197:18:0;;:::o;46898:207::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;340:3:::1;::::0;-1:-1:-1;;;;;340:3:0::1;326:10;:17;318:51;;;::::0;;-1:-1:-1;;;318:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;318:51:0;;;;;;;;;;;;;::::1;;47006:9:::2;47001:97;47025:9;:16;47021:1;:20;47001:97;;;47063:23;47073:9;47083:1;47073:12;;;;;;;;;;;;;;47063:9;:23::i;:::-;47043:3;;47001:97;;;-1:-1:-1::0;;2168:1:0;3130:7;:22;46898:207::o;37798:30::-;;;-1:-1:-1;;;;;37798:30:0;;:::o;44544:114::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;340:3:::1;::::0;-1:-1:-1;;;;;340:3:0::1;326:10;:17;318:51;;;::::0;;-1:-1:-1;;;318:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;318:51:0;;;;;;;;;;;;;::::1;;44631:19:::2;44641:8;44631:9;:19::i;38485:986::-:0;340:3;;-1:-1:-1;;;;;340:3:0;326:10;:17;318:51;;;;;-1:-1:-1;;;318:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;318:51:0;;;;;;;;;;;;;;;38930:13:::1;::::0;-1:-1:-1;;;38930:13:0;::::1;;;38929:14;38921:60;;;;-1:-1:-1::0;;;38921:60:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39008:4;38992:20:::0;;-1:-1:-1;;;;38992:20:0::1;-1:-1:-1::0;;;38992:20:0::1;::::0;;39025:4:::1;:12:::0;;-1:-1:-1;;;;;39025:12:0;;::::1;-1:-1:-1::0;;;;;;39025:12:0;;::::1;;::::0;;;39050:3:::1;:10:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;39071:5:::1;:14:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;39096:5:::1;:14:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;39123:3:::1;:10:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;39146:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;39193:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;39238:13:::1;:30:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;39281:13:::1;:30:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;39322:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;39371:10:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;39408:9:::1;:22:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;39441:9:::1;:22:::0;;;;;::::1;::::0;::::1;;::::0;;38485:986::o;44666:2224::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;;;44990:10:::1;::::0;45045:262;::::1;;;45110:9;::::0;45102:52:::1;::::0;;-1:-1:-1;;;45102:52:0;;-1:-1:-1;;;;;45102:52:0;;::::1;;::::0;::::1;::::0;;;;;;;;;45081:18:::1;::::0;45110:9;;;::::1;::::0;45102:34:::1;::::0;:52;;;;;::::1;::::0;;;;;;;;;45081:18;45110:9;45102:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;45102:52:0;45198:9:::1;::::0;45190:52:::1;::::0;;-1:-1:-1;;;45190:52:0;;-1:-1:-1;;;;;45190:52:0;;::::1;;::::0;::::1;::::0;;;;;;;;;45102;;-1:-1:-1;45169:18:0::1;::::0;45198:9;;;::::1;::::0;45190:34:::1;::::0;:52;;;;;45102::::1;::::0;45190;;;;;;;45169:18;45198:9;45190:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;45190:52:0;;-1:-1:-1;45269:26:0::1;:10:::0;45190:52;45269:14:::1;:26::i;:::-;45257:38;;45045:262;;;45323:15;:32;;;;;45354:1;45342:9;:13;45323:32;45319:108;;;45400:3;::::0;45372:43:::1;::::0;45382:7;;;;-1:-1:-1;;;;;45400:3:0::1;45405:9:::0;45372::::1;:43::i;:::-;45439:19;45477:17;45473:302;;;45549:16;::::0;45534:66:::1;::::0;;-1:-1:-1;;;45534:66:0;;-1:-1:-1;;;;;45534:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;45511:20:::1;::::0;45549:16;;;::::1;::::0;45534:48:::1;::::0;:66;;;;;::::1;::::0;;;;;;;;;45511:20;45549:16;45534:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;45534:66:0;45653:16:::1;::::0;45638:66:::1;::::0;;-1:-1:-1;;;45638:66:0;;-1:-1:-1;;;;;45638:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;45534;;-1:-1:-1;45615:20:0::1;::::0;45653:16;;;::::1;::::0;45638:48:::1;::::0;:66;;;;;45534::::1;::::0;45638;;;;;;;45615:20;45653:16;45638:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;45638:66:0;;-1:-1:-1;45733:30:0::1;:12:::0;45638:66;45733:16:::1;:30::i;:::-;45719:44;;45473:302;;;45791:17;:36;;;;;45826:1;45812:11;:15;45791:36;45787:116;;;45872:5;::::0;45844:47:::1;::::0;45854:7;;;;-1:-1:-1;;;;;45872:5:0::1;45879:11:::0;45844:9:::1;:47::i;:::-;45919:28;45915:301;;;46001:15;::::0;45986:65:::1;::::0;;-1:-1:-1;;;45986:65:0;;-1:-1:-1;;;;;45986:65:0;;::::1;;::::0;::::1;::::0;;;;;;;;;45964:19:::1;::::0;46001:15;;;::::1;::::0;45986:47:::1;::::0;:65;;;;;::::1;::::0;;;;;;;;;45964:19;46001:15;45986:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;45986:65:0;;-1:-1:-1;46070:15:0;;46066:139:::1;;46121:13;::::0;46170:5:::1;::::0;46106:83:::1;::::0;;-1:-1:-1;;;46106:83:0;;-1:-1:-1;;;;;46106:83:0;;::::1;;::::0;::::1;::::0;;;;;;;46170:5;;::::1;46106:83:::0;;;;;;;;;;;;46121:13;;;::::1;::::0;46106:45:::1;::::0;:83;;;;;46121:13:::1;::::0;46106:83;;;;;;;46121:13;;46106:83;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46066:139;45915:301;;46232:16;46228:655;;;46269:23;46265:607;;;46344:13;::::0;46329:69:::1;::::0;;-1:-1:-1;;;46329:69:0;;-1:-1:-1;;;;;46329:69:0;;::::1;;::::0;::::1;::::0;46392:4:::1;46329:69:::0;;;;;;46313:13:::1;::::0;46344;;;::::1;::::0;46329:45:::1;::::0;:69;;;;;::::1;::::0;;;;;;;;;46313:13;46344;46329:69;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;46329:69:0;46448:13:::1;::::0;46433:69:::1;::::0;;-1:-1:-1;;;46433:69:0;;-1:-1:-1;;;;;46433:69:0;;::::1;;::::0;::::1;::::0;46496:4:::1;46433:69:::0;;;;;;46329;;-1:-1:-1;46417:13:0::1;::::0;46448;;;::::1;::::0;46433:45:::1;::::0;:69;;;;;46329::::1;::::0;46433;;;;;;;46417:13;46448;46433:69;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;46433:69:0;;-1:-1:-1;46523:18:0::1;46544:16;:5:::0;46433:69;46544:9:::1;:16::i;:::-;46585:4;::::0;46579:32:::1;::::0;;-1:-1:-1;;;46579:32:0;;::::1;::::0;::::1;::::0;;;;;46523:37;;-1:-1:-1;;;;;;46585:4:0;;::::1;::::0;46579:20:::1;::::0;:32;;;;;46585:4:::1;::::0;46579:32;;;;;;;;46585:4;;46579:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;46632:38:0::1;::::0;-1:-1:-1;;;;;;;;46632:26:0;::::1;46659:10:::0;46632:26:::1;:38::i;:::-;46265:607;;;;;;46726:13;::::0;46711:63:::1;::::0;;-1:-1:-1;;;46711:63:0;;-1:-1:-1;;;;;46711:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;46726:13;;;::::1;::::0;46711:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;46726:13:::1;::::0;46711:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;46808:13:0::1;::::0;46793:63:::1;::::0;;-1:-1:-1;;;46793:63:0;;-1:-1:-1;;;;;46793:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;46808:13;;;::::1;::::0;46793:45:::1;::::0;:63;;;;;46711::::1;::::0;46793;;;;;;;46808:13:::1;::::0;46793:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;46265:607:0::1;-1:-1:-1::0;;2168:1:0;3130:7;:22;-1:-1:-1;;;;;;;;44666:2224:0:o;37620:18::-;;;-1:-1:-1;;;;;37620:18:0;;:::o;40711:645::-;40835:7;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;40863:11;40855:53:::1;;;::::0;;-1:-1:-1;;;40855:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;40855:53:0;;;;;;;;;;;;;::::1;;40992:10;::::0;40980:100:::1;::::0;;-1:-1:-1;;;40980:100:0;;40939:10:::1;40980:100;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;40980:100:0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;40939:10;;40921:15:::1;::::0;40992:10:::1;::::0;40980:46:::1;::::0;:100;;;;;::::1;::::0;;;;;;;;40921:15;40992:10;40980:100;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40980:100:0;41106:13:::1;::::0;41155:3:::1;::::0;41091:79:::1;::::0;;-1:-1:-1;;;41091:79:0;;-1:-1:-1;;;;;41091:79:0;;::::1;;::::0;::::1;::::0;;;;;;;41155:3;;::::1;41091:79:::0;;;;;;;;;;;;40980:100;;-1:-1:-1;41106:13:0;::::1;::::0;41091:45:::1;::::0;:79;;;;;41106:13:::1;::::0;41091:79;;;;;;;;41106:13;;41091:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41196:16:0::1;::::0;41248:13:::1;::::0;41181:92:::1;::::0;;-1:-1:-1;;;41181:92:0;;-1:-1:-1;;;;;41181:92:0;;::::1;;::::0;::::1;::::0;;;;;;;41248:13;;::::1;41181:92:::0;;;;;;;;;;;;41196:16;;;::::1;::::0;-1:-1:-1;41181:48:0::1;::::0;-1:-1:-1;41181:92:0;;;;;41196:16:::1;::::0;41181:92;;;;;;;41196:16;;41181:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41291:28:0::1;::::0;;-1:-1:-1;;;;;41291:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;41291:28:0;-1:-1:-1;41291:28:0;;;;;;;;-1:-1:-1;41291:28:0::1;2168:1:::0;3130:7;:22;41339:9;40711:645;-1:-1:-1;;;;;;40711:645:0:o;38030:24::-;;;-1:-1:-1;;;;;38030:24:0;;:::o;37558:25::-;;;-1:-1:-1;;;37558:25:0;;;;;:::o;37592:19::-;;;-1:-1:-1;;;;;37592:19:0;;:::o;37999:24::-;;;-1:-1:-1;;;;;37999:24:0;;:::o;43551:392::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;;;43657:13:::1;::::0;43642:63:::1;::::0;;-1:-1:-1;;;43642:63:0;;43619:10:::1;43642:63;::::0;::::1;::::0;;;;;;;;;;;43619:10;;-1:-1:-1;;;;;43657:13:0;;::::1;::::0;43642:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;;;43657:13;43642:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;43731:13:0::1;::::0;43716:63:::1;::::0;;-1:-1:-1;;;43716:63:0;;-1:-1:-1;;;;;43716:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;43731:13;;;::::1;::::0;43716:45:::1;::::0;:63;;;;;43642::::1;::::0;43716;;;;;;;43731:13:::1;::::0;43716:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;43807:16:0::1;::::0;43792:66:::1;::::0;;-1:-1:-1;;;43792:66:0;;-1:-1:-1;;;;;43792:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;43807:16;;;::::1;::::0;43792:48:::1;::::0;:66;;;;;43716:63:::1;::::0;43792:66;;;;;;;43807:16:::1;::::0;43792:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;43884:16:0::1;::::0;43869:66:::1;::::0;;-1:-1:-1;;;43869:66:0;;-1:-1:-1;;;;;43869:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;43884:16;;;::::1;::::0;43869:48:::1;::::0;:66;;;;;43792::::1;::::0;43869;;;;;;;43884:16:::1;::::0;43869:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;2168:1:0;3130:7;:22;-1:-1:-1;43551:392:0:o;37835:28::-;;;-1:-1:-1;;;;;37835:28:0;;:::o;41364:741::-;41466:7;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;41494:9:::1;41486:57;;;::::0;;-1:-1:-1;;;41486:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41562:4;;;;;;;;;-1:-1:-1::0;;;;;41562:4:0::1;-1:-1:-1::0;;;;;41556:19:0::1;;41583:9;41556:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41613:4:0::1;::::0;41627:10:::1;::::0;41606:43:::1;::::0;;-1:-1:-1;;;41606:43:0;;-1:-1:-1;;;;;41627:10:0;;::::1;41606:43;::::0;::::1;::::0;41639:9:::1;41606:43:::0;;;;;;41613:4;;;::::1;::::0;-1:-1:-1;41606:20:0::1;::::0;-1:-1:-1;41606:43:0;;;;;-1:-1:-1;41606:43:0::1;::::0;;;;;;41613:4:::1;::::0;41606:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;41733:10:0::1;::::0;41792:4:::1;::::0;41721:106:::1;::::0;;-1:-1:-1;;;41721:106:0;;41776:4:::1;41721:106;::::0;::::1;::::0;41680:10:::1;41721:106:::0;;;;;;-1:-1:-1;;;;;41792:4:0;;::::1;41721:106:::0;;;;41798:9:::1;41721:106:::0;;;;;;;;;;;;;;;;;;41680:10;;41662:15:::1;::::0;41733:10:::1;::::0;41721:46:::1;::::0;:106;;;;;41606:43:::1;::::0;41721:106;;;;;;;;41662:15;41733:10;41721:106;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;41721:106:0;41855:13:::1;::::0;41904:3:::1;::::0;41840:79:::1;::::0;;-1:-1:-1;;;41840:79:0;;-1:-1:-1;;;;;41840:79:0;;::::1;;::::0;::::1;::::0;;;;;;;41904:3;;::::1;41840:79:::0;;;;;;;;;;;;41721:106;;-1:-1:-1;41855:13:0;::::1;::::0;41840:45:::1;::::0;:79;;;;;41855:13:::1;::::0;41840:79;;;;;;;;41855:13;;41840:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41945:16:0::1;::::0;41997:13:::1;::::0;41930:92:::1;::::0;;-1:-1:-1;;;41930:92:0;;-1:-1:-1;;;;;41930:92:0;;::::1;;::::0;::::1;::::0;;;;;;;41997:13;;::::1;41930:92:::0;;;;;;;;;;;;41945:16;;;::::1;::::0;-1:-1:-1;41930:48:0::1;::::0;-1:-1:-1;41930:92:0;;;;;41945:16:::1;::::0;41930:92;;;;;;;41945:16;;41930:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42040:28:0::1;::::0;;-1:-1:-1;;;;;42040:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;42040:28:0;-1:-1:-1;42040:28:0;;;;;;;;-1:-1:-1;42040:28:0::1;2168:1:::0;3130:7;:22;42088:9;41364:741;-1:-1:-1;;;;41364:741:0:o;40018:157::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;340:3:::1;::::0;-1:-1:-1;;;;;340:3:0::1;326:10;:17;318:51;;;::::0;;-1:-1:-1;;;318:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;318:51:0;;;;;;;;;;;;;::::1;;40154:3:::2;::::0;40122:45:::2;::::0;40132:10:::2;::::0;40144:8;;-1:-1:-1;;;;;40154:3:0::2;40159:7:::0;40122:9:::2;:45::i;43951:247::-:0;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;;;44062:16:::1;::::0;44047:66:::1;::::0;;-1:-1:-1;;;44047:66:0;;44024:10:::1;44047:66;::::0;::::1;::::0;;;;;;;;;;;44024:10;;-1:-1:-1;;;;;44062:16:0;;::::1;::::0;44047:48:::1;::::0;:66;;;;;::::1;::::0;;;;;;;;;;;44062:16;44047:66;::::1;;::::0;::::1;;;;::::0;::::1;40578:125:::0;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;40674:5:::1;::::0;40650:45:::1;::::0;40662:10:::1;::::0;-1:-1:-1;;;;;40674:5:0::1;40681:7:::0;40674:5;40650:11:::1;:45::i;47498:2254::-:0;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;47587:9:::1;::::0;47580:36:::1;::::0;;-1:-1:-1;;;47580:36:0;;-1:-1:-1;;;;;47580:36:0;;::::1;;::::0;::::1;::::0;;;47587:9;;;::::1;::::0;47580:27:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;47587:9;47580:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47580:36:0;:41;47572:92:::1;;;;-1:-1:-1::0;;;47572:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47690:9;::::0;47683:36:::1;::::0;;-1:-1:-1;;;47683:36:0;;-1:-1:-1;;;;;47683:36:0;;::::1;;::::0;::::1;::::0;;;47690:9;;;::::1;::::0;47683:27:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;47690:9;47683:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47683:36:0;:41;47675:92:::1;;;;-1:-1:-1::0;;;47675:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;47828:25:0;;::::1;47780:16;47828:25:::0;;;:16:::1;:25;::::0;;;;;47799:10:::1;::::0;47828:25:::1;:37:::0;::::1;47820:86;;;;-1:-1:-1::0;;;47820:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;47924:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;47917:32;;-1:-1:-1;;;;;;47917:32:0::1;::::0;;47962:27:::1;47980:8:::0;47962:17:::1;:27::i;:::-;48000:18;48010:7;48000:9;:18::i;:::-;48066:16;::::0;48109:3:::1;::::0;48051:62:::1;::::0;;-1:-1:-1;;;48051:62:0;;-1:-1:-1;;;;;48051:62:0;;::::1;;::::0;::::1;::::0;48109:3;;::::1;48051:62:::0;;;;;;48031:17:::1;::::0;48066:16;;;::::1;::::0;48051:48:::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;48066:16;48051:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;48051:62:0;;-1:-1:-1;48128:13:0;;48124:148:::1;;48179:3;::::0;48158:43:::1;::::0;48170:7;;-1:-1:-1;;;;;48179:3:0::1;48184:9:::0;48179:3:::1;48158:11;:43::i;:::-;48245:3;::::0;48216:44:::1;::::0;48226:7;;48235:8;;-1:-1:-1;;;;;48245:3:0::1;48250:9:::0;48216::::1;:44::i;:::-;48321:16;::::0;48364:5:::1;::::0;;48306:64:::1;::::0;;-1:-1:-1;;;48306:64:0;;-1:-1:-1;;;;;48306:64:0;;::::1;::::0;;::::1;::::0;;;;48364:5;;::::1;48306:64:::0;;;;;48284:19:::1;::::0;48321:16;;;::::1;::::0;48306:48:::1;::::0;:64;;;;;::::1;::::0;;;;;;;;;48321:16;48306:64;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;48306:64:0;;-1:-1:-1;48385:15:0;;48381:158:::1;;48438:5;::::0;48417:47:::1;::::0;48429:7;;-1:-1:-1;;;;;48438:5:0::1;48445:11:::0;48438:5:::1;48417:11;:47::i;:::-;48508:5;::::0;48479:48:::1;::::0;48489:7;;48498:8;;-1:-1:-1;;;;;48508:5:0::1;48515:11:::0;48479:9:::1;:48::i;:::-;48588:13;::::0;48628:5:::1;::::0;48573:61:::1;::::0;;-1:-1:-1;;;48573:61:0;;-1:-1:-1;;;;;48573:61:0;;::::1;;::::0;::::1;::::0;48628:5;;::::1;48573:61:::0;;;;;;48551:19:::1;::::0;48588:13;;;::::1;::::0;48573:45:::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;48588:13;48573:61;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;48573:61:0;;-1:-1:-1;48649:15:0;;48645:232:::1;;48696:13;::::0;48738:5:::1;::::0;48681:85:::1;::::0;;-1:-1:-1;;;48681:85:0;;-1:-1:-1;;;;;48681:85:0;;::::1;;::::0;::::1;::::0;;;48738:5;;::::1;48681:85:::0;;;;;;;;;;;;;;;;;;;48696:13;;;::::1;::::0;48681:47:::1;::::0;:85;;;;;48696:13:::1;::::0;48681:85;;;;;;;48696:13;;48681:85;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;48796:13:0::1;::::0;48846:5:::1;::::0;48781:84:::1;::::0;;-1:-1:-1;;;48781:84:0;;-1:-1:-1;;;;;48781:84:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;48846:5;;::::1;48781:84:::0;;;;;;;;;;;;48796:13;;;::::1;::::0;-1:-1:-1;48781:45:0::1;::::0;-1:-1:-1;48781:84:0;;;;;48796:13:::1;::::0;48781:84;;;;;;;48796:13;;48781:84;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48645:232;48889:20;48919:5;;;;;;;;;-1:-1:-1::0;;;;;48919:5:0::1;-1:-1:-1::0;;;;;48912:23:0::1;;48936:7;48912:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;48912:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;48912:32:0;;-1:-1:-1;48959:16:0;;48955:108:::1;;48999:5;::::0;;48992:59:::1;::::0;;-1:-1:-1;;;48992:59:0;;-1:-1:-1;;;;;48992:59:0;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;48999:5;;;::::1;::::0;48992:26:::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;48999:5:::1;::::0;48992:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;48955:108:0::1;49110:13;::::0;49150:3:::1;::::0;49095:59:::1;::::0;;-1:-1:-1;;;49095:59:0;;-1:-1:-1;;;;;49095:59:0;;::::1;;::::0;::::1;::::0;49150:3;;::::1;49095:59:::0;;;;;;49075:17:::1;::::0;49110:13;;;::::1;::::0;49095:45:::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;49110:13;49095:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;49095:59:0;;-1:-1:-1;49169:13:0;;49165:442:::1;;49214:16;::::0;49259:13:::1;::::0;49199:94:::1;::::0;;-1:-1:-1;;;49199:94:0;;-1:-1:-1;;;;;49199:94:0;;::::1;;::::0;::::1;::::0;;;49259:13;;::::1;49199:94:::0;;;;;;;;;;;;;;;;;;;49214:16;;;::::1;::::0;49199:50:::1;::::0;:94;;;;;49214:16:::1;::::0;49199:94;;;;;;;49214:16;;49199:94;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49323:13:0::1;::::0;49365:3:::1;::::0;49308:81:::1;::::0;;-1:-1:-1;;;49308:81:0;;-1:-1:-1;;;;;49308:81:0;;::::1;;::::0;::::1;::::0;;;49365:3;;::::1;49308:81:::0;;;;;;;;;;;;;;;;;;;49323:13;;;::::1;::::0;-1:-1:-1;49308:47:0::1;::::0;-1:-1:-1;49308:81:0;;;;;49323:13:::1;::::0;49308:81;;;;;;;49323:13;;49308:81;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49421:13:0::1;::::0;49471:3:::1;::::0;49406:80:::1;::::0;;-1:-1:-1;;;49406:80:0;;-1:-1:-1;;;;;49406:80:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;49471:3;;::::1;49406:80:::0;;;;;;;;;;;;49421:13;;;::::1;::::0;-1:-1:-1;49406:45:0::1;::::0;-1:-1:-1;49406:80:0;;;;;49421:13:::1;::::0;49406:80;;;;;;;49421:13;;49406:80;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49516:16:0::1;::::0;49570:13:::1;::::0;49501:94:::1;::::0;;-1:-1:-1;;;49501:94:0;;-1:-1:-1;;;;;49501:94:0;;::::1;;::::0;::::1;::::0;;;;;;;49570:13;;::::1;49501:94:::0;;;;;;;;;;;;49516:16;;;::::1;::::0;-1:-1:-1;49501:48:0::1;::::0;-1:-1:-1;49501:94:0;;;;;49516:16:::1;::::0;49501:94;;;;;;;49516:16;;49501:94;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49165:442;49627:9;::::0;49619:57:::1;::::0;;-1:-1:-1;;;49619:57:0;;-1:-1:-1;;;;;49619:57:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;49627:9;;;::::1;::::0;49619:38:::1;::::0;:57;;;;;49627:9:::1;::::0;49619:57;;;;;;;49627:9;;49619:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;49695:9:0::1;::::0;49687:57:::1;::::0;;-1:-1:-1;;;49687:57:0;;-1:-1:-1;;;;;49687:57:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;49695:9;;;::::1;::::0;-1:-1:-1;49687:38:0::1;::::0;-1:-1:-1;49687:57:0;;;;;49695:9:::1;::::0;49687:57;;;;;;;49695:9;;49687:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2168:1:0;3130:7;:22;-1:-1:-1;;;;;;;;;47498:2254:0:o;37645:20::-;;;-1:-1:-1;;;;;37645:20:0;;:::o;37701:18::-;;;-1:-1:-1;;;;;37701:18:0;;:::o;42793:750::-;42920:7;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;42948:14;42940:59:::1;;;::::0;;-1:-1:-1;;;42940:59:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;42940:59:0;;;;;;;;;;;;;::::1;;43066:16;::::0;43111:13:::1;::::0;43051:95:::1;::::0;;-1:-1:-1;;;43051:95:0;;43030:10:::1;43051:95;::::0;::::1;::::0;;;-1:-1:-1;;;;;43111:13:0;;::::1;43051:95:::0;;;;;;;;;;;;;;;;;;43030:10;;43066:16;;;::::1;::::0;43051:50:::1;::::0;:95;;;;;43012:15:::1;::::0;43051:95;;;;;;;43012:15;43066:16;43051:95;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;43172:13:0::1;::::0;43214:3:::1;::::0;43157:82:::1;::::0;;-1:-1:-1;;;43157:82:0;;-1:-1:-1;;;;;43157:82:0;;::::1;;::::0;::::1;::::0;;;43214:3;;::::1;43157:82:::0;;;;;;;;;;;;;;;;;;;43172:13;;;::::1;::::0;-1:-1:-1;43157:47:0::1;::::0;-1:-1:-1;43157:82:0;;;;;43172:13:::1;::::0;43157:82;;;;;;;43172:13;;43157:82;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;43282:10:0::1;::::0;43329:4:::1;::::0;43270:100:::1;::::0;;-1:-1:-1;;;43270:100:0;;-1:-1:-1;;;;;43270:100:0;;::::1;;::::0;::::1;::::0;43329:4;;::::1;43270:100:::0;;;;;;;;;;;;;;;;43364:4:::1;43270:100:::0;;;;;;43250:17:::1;::::0;-1:-1:-1;43282:10:0;;;::::1;::::0;-1:-1:-1;43270:49:0::1;::::0;:100;;;;;::::1;::::0;;;;;;;;;43250:17;43282:10;43270:100;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43270:100:0;43389:4:::1;::::0;43383:31:::1;::::0;;-1:-1:-1;;;43383:31:0;;::::1;::::0;::::1;::::0;;;;;43270:100;;-1:-1:-1;;;;;;43389:4:0;;::::1;::::0;43383:20:::1;::::0;:31;;;;;43389:4:::1;::::0;43383:31;;;;;;;;43389:4;;43383:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;43427:30:0::1;::::0;-1:-1:-1;;;;;;;;43427:19:0;::::1;43447:9:::0;43427:19:::1;:30::i;:::-;43475:31;::::0;;-1:-1:-1;;;;;43475:31:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;43475:31:0;;;;;;;;;::::1;2168:1:::0;3130:7;:22;43526:9;42793:750;-1:-1:-1;;;;;42793:750:0:o;37872:40::-;;;-1:-1:-1;;;;;37872:40:0;;:::o;397:76::-;340:3;;-1:-1:-1;;;;;340:3:0;326:10;:17;318:51;;;;;-1:-1:-1;;;318:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;318:51:0;;;;;;;;;;;;;;;455:3:::1;:10:::0;;-1:-1:-1;;;;;;455:10:0::1;-1:-1:-1::0;;;;;455:10:0;;;::::1;::::0;;;::::1;::::0;;397:76::o;44206:240::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;;;44316:13:::1;::::0;44301:63:::1;::::0;;-1:-1:-1;;;44301:63:0;;44278:10:::1;44301:63;::::0;::::1;::::0;;;;;;;;;;;44278:10;;-1:-1:-1;;;;;44316:13:0;;::::1;::::0;44301:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;;;44316:13;44301:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;44390:13:0::1;::::0;44375:63:::1;::::0;;-1:-1:-1;;;44375:63:0;;-1:-1:-1;;;;;44375:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;44390:13;;;::::1;::::0;44375:45:::1;::::0;:63;;;;;44301::::1;::::0;44375;;;;;;;44390:13:::1;::::0;44375:63;::::1;;::::0;::::1;;;;::::0;::::1;37672:20:::0;;;-1:-1:-1;;;;;37672:20:0;;:::o;38063:52::-;;;;;;;;;;;;-1:-1:-1;;;;;38063:52:0;;:::o;37919:37::-;;;-1:-1:-1;;;;;37919:37:0;;:::o;40314:127::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;40418:5:::1;::::0;40384:49:::1;::::0;40394:10:::1;::::0;;;-1:-1:-1;;;;;40418:5:0::1;40425:7:::0;40384:9:::1;:49::i;47113:377::-:0;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;47204:9:::1;::::0;47197:39:::1;::::0;;-1:-1:-1;;;47197:39:0;;47225:10:::1;47197:39;::::0;::::1;::::0;;;-1:-1:-1;;;;;47204:9:0;;::::1;::::0;47197:27:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;;47204:9;47197:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47197:39:0;:44;47189:95:::1;;;;-1:-1:-1::0;;;47189:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47310:9;::::0;47303:39:::1;::::0;;-1:-1:-1;;;47303:39:0;;47331:10:::1;47303:39;::::0;::::1;::::0;;;-1:-1:-1;;;;;47310:9:0;;::::1;::::0;47303:27:::1;::::0;:39;;;;;::::1;::::0;;;;;;;;;47310:9;47303:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47303:39:0;:44;47295:95:::1;;;;-1:-1:-1::0;;;47295:95:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47403:28;47421:9;47403:17;:28::i;:::-;47459:10;47442:28;::::0;;;:16:::1;:28;::::0;;;;:40;;-1:-1:-1;;;;;;47442:40:0::1;-1:-1:-1::0;;;;;47442:40:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;3130:22:0;;47113:377::o;40183:123::-;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;40285:3:::1;::::0;40251:47:::1;::::0;40261:10:::1;::::0;;;-1:-1:-1;;;;;40285:3:0::1;40290:7:::0;40251:9:::1;:47::i;44454:82::-:0;2212:1;2818:7;;:19;;2810:63;;;;;-1:-1:-1;;;2810:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2810:63:0;;;;;;;;;;;;;;;2212:1;2951:7;:18;44507:21:::1;44517:10;44507:9;:21::i;:::-;2168:1:::0;3130:7;:22;44454:82::o;37965:25::-;;;-1:-1:-1;;;;;37965:25:0;;:::o;20006:177::-;20116:58;;;-1:-1:-1;;;;;20116:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20116:58:0;-1:-1:-1;;;20116:58:0;;;20089:86;;20109:5;;20089:19;:86::i;53523:1348::-;53657:1;53647:7;:11;53639:53;;;;;-1:-1:-1;;;53639:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;53639:53:0;;;;;;;;;;;;;;;53738:16;;53723:56;;;-1:-1:-1;;;53723:56:0;;-1:-1:-1;;;;;53723:56:0;;;;;;;;;53705:15;;53738:16;;;;;53723:46;;:56;;;;;;;;;;;;;;;53738:16;53723:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53723:56:0;53807:13;;53850:15;;53792:93;;;-1:-1:-1;;;53792:93:0;;-1:-1:-1;;;;;53792:93:0;;;;;;;;;53850:15;;;53792:93;;;;;;;;;;;;;;;;;;;53723:56;;-1:-1:-1;53807:13:0;;;53792:47;;:93;;;;;53807:13;;53792:93;;;;;;;;53807:13;;53792:93;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53911:15:0;;53956:16;;53896:96;;;-1:-1:-1;;;53896:96:0;;-1:-1:-1;;;;;53896:96:0;;;;;;;;;53956:16;;;53896:96;;;;;;;;;;;;;;;;;;;53911:15;;;;;-1:-1:-1;53896:49:0;;-1:-1:-1;53896:96:0;;;;;53911:15;;53896:96;;;;;;;53911:15;;53896:96;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54018:16:0;;54003:87;;;-1:-1:-1;;;54003:87:0;;-1:-1:-1;;;;;54003:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;54018:16;;;;;-1:-1:-1;54003:50:0;;-1:-1:-1;54003:87:0;;;;;54018:16;;54003:87;;;;;;;54018:16;;54003:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54107:18;54103:706;;;54179:15;;54164:67;;;-1:-1:-1;;;54164:67:0;;-1:-1:-1;;;;;54164:67:0;;;;;;;;;;;;;;;54142:19;;54179:15;;;;;54164:47;;:67;;;;;;;;;;;;;;;54142:19;54179:15;54164:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54164:67:0;;-1:-1:-1;54250:15:0;;54246:141;;54301:13;;54352:5;;54286:85;;;-1:-1:-1;;;54286:85:0;;-1:-1:-1;;;;;54286:85:0;;;;;;;;;;;;;54352:5;;;54286:85;;;;;;;;;;;;54301:13;;;;;54286:45;;:85;;;;;54301:13;;54286:85;;;;;;;54301:13;;54286:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54246:141;54440:13;;54481:5;;54425:62;;;-1:-1:-1;;;54425:62:0;;-1:-1:-1;;;;;54425:62:0;;;;;;;54481:5;;;54425:62;;;;;;54403:19;;54440:13;;;;;54425:45;;:62;;;;;;;;;;;;;;;54440:13;54425:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54425:62:0;;-1:-1:-1;54506:15:0;;54502:296;;54542:23;54568:37;54597:7;54568:24;:11;54584:7;54568:15;:24::i;:::-;:28;;:37::i;:::-;54639:13;;54682:5;;54624:91;;;-1:-1:-1;;;54624:91:0;;-1:-1:-1;;;;;54624:91:0;;;;;;;;;54682:5;;;54624:91;;;;;;;;;;;;;;;;;;;54542:63;;-1:-1:-1;54639:13:0;;;54624:47;;:91;;;;;54639:13;;54624:91;;;;;;;;54639:13;;54624:91;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54744:5:0;;54734:48;;;-1:-1:-1;;;54734:48:0;;-1:-1:-1;;;;;54734:48:0;;;;;;;;;;;;;;;54744:5;;;;;-1:-1:-1;54734:21:0;;-1:-1:-1;54734:48:0;;;;;54744:5;;54734:48;;;;;;;54744:5;;54734:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54502:296;;54103:706;;;54826:37;;;-1:-1:-1;;;;;54826:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53523:1348;;;;;:::o;52975:540::-;53107:1;53097:7;:11;53089:53;;;;;-1:-1:-1;;;53089:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;53089:53:0;;;;;;;;;;;;;;;53170:16;;53155:92;;;-1:-1:-1;;;53155:92:0;;-1:-1:-1;;;;;53155:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53170:16;;;;;53155:48;;:92;;;;;53170:16;;53155:92;;;;;;;53170:16;;53155:92;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53273:15:0;;53326:16;;53258:94;;;-1:-1:-1;;;53258:94:0;;-1:-1:-1;;;;;53258:94:0;;;;;;;;;;;;;53326:16;;;53258:94;;;;;;;;;;;;53273:15;;;;;-1:-1:-1;53258:47:0;;-1:-1:-1;53258:94:0;;;;;53273:15;;53258:94;;;;;;;53273:15;;53258:94;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53378:13:0;;53429:15;;53363:91;;;-1:-1:-1;;;53363:91:0;;-1:-1:-1;;;;;53363:91:0;;;;;;;;;;;;;53429:15;;;53363:91;;;;;;;;;;;;53378:13;;;;;-1:-1:-1;53363:45:0;;-1:-1:-1;53363:91:0;;;;;53378:13;;53363:91;;;;;;;53378:13;;53363:91;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53472:35:0;;;-1:-1:-1;;;;;53472:35:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53472:35:0;;;;;;;-1:-1:-1;53472:35:0;52975:540;;;;:::o;52059:119::-;52115:22;52128:8;52115:12;:22::i;:::-;52148;52161:8;52148:12;:22::i;:::-;52059:119;:::o;4089:181::-;4147:7;4179:5;;;4203:6;;;;4195:46;;;;;-1:-1:-1;;;4195:46:0;;;;;;;;;;;;-1:-1:-1;;;4195:46:0;;;;;;;;;;;;;;;4261:1;-1:-1:-1;4089:181:0;;;;;:::o;13463:397::-;13578:6;13553:21;:31;;13545:73;;;;;-1:-1:-1;;;13545:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13728:35;;13710:12;;-1:-1:-1;;;;;13728:14:0;;;13751:6;;13710:12;13728:35;13710:12;13728:35;13751:6;13728:14;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13709:54;;;13782:7;13774:78;;;;-1:-1:-1;;;13774:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49760:2291;49853:16;;49838:64;;;-1:-1:-1;;;49838:64:0;;-1:-1:-1;;;;;49838:64:0;;;;;;;;;49853:16;;;;;49838:53;;:64;;;;;;;;;;;;;;49853:16;49838:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49838:64:0;:69;49830:137;;;;-1:-1:-1;;;49830:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50001:16;;49986:61;;;-1:-1:-1;;;49986:61:0;;-1:-1:-1;;;;;49986:61:0;;;;;;;;;50001:16;;;;;49986:50;;:61;;;;;;;;;;;;;;50001:16;49986:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49986:61:0;:66;49978:131;;;;-1:-1:-1;;;49978:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50145:15;;50130:63;;;-1:-1:-1;;;50130:63:0;;-1:-1:-1;;;;;50130:63:0;;;;;;;;;50145:15;;;;;50130:52;;:63;;;;;;;;;;;;;;50145:15;50130:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50130:63:0;:68;50122:135;;;;-1:-1:-1;;;50122:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50291:15;;50276:60;;;-1:-1:-1;;;50276:60:0;;-1:-1:-1;;;;;50276:60:0;;;;;;;;;50291:15;;;;;50276:49;;:60;;;;;;;;;;;;;;50291:15;50276:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50276:60:0;:65;50268:129;;;;-1:-1:-1;;;50268:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50433:13;;50418:61;;;-1:-1:-1;;;50418:61:0;;-1:-1:-1;;;;;50418:61:0;;;;;;;;;50433:13;;;;;50418:50;;:61;;;;;;;;;;;;;;50433:13;50418:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50418:61:0;:66;50410:131;;;;-1:-1:-1;;;50410:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50575:13;;50560:58;;;-1:-1:-1;;;50560:58:0;;-1:-1:-1;;;;;50560:58:0;;;;;;;;;50575:13;;;;;50560:47;;:58;;;;;;;;;;;;;;50575:13;50560:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50560:58:0;:63;50552:125;;;;-1:-1:-1;;;50552:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50706:9;;50698:61;;;-1:-1:-1;;;50698:61:0;;-1:-1:-1;;;;;50698:61:0;;;;;;;;;50706:9;;;;;50698:50;;:61;;;;;;;;;;;;;;50706:9;50698:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50698:61:0;:66;50690:138;;;;-1:-1:-1;;;50690:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50855:9;;50847:58;;;-1:-1:-1;;;50847:58:0;;-1:-1:-1;;;;;50847:58:0;;;;;;;;;50855:9;;;;;50847:47;;:58;;;;;;;;;;;;;;50855:9;50847:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50847:58:0;:63;50839:132;;;;-1:-1:-1;;;50839:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51007:16;;50992:64;;;-1:-1:-1;;;50992:64:0;;-1:-1:-1;;;;;50992:64:0;;;;;;;;;51007:16;;;;;50992:53;;:64;;;;;;;;;;;;;;51007:16;50992:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50992:64:0;:69;50984:137;;;;-1:-1:-1;;;50984:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51155:16;;51140:61;;;-1:-1:-1;;;51140:61:0;;-1:-1:-1;;;;;51140:61:0;;;;;;;;;51155:16;;;;;51140:50;;:61;;;;;;;;;;;;;;51155:16;51140:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51140:61:0;:66;51132:131;;;;-1:-1:-1;;;51132:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51299:13;;51284:61;;;-1:-1:-1;;;51284:61:0;;-1:-1:-1;;;;;51284:61:0;;;;;;;;;51299:13;;;;;51284:50;;:61;;;;;;;;;;;;;;51299:13;51284:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51284:61:0;:66;51276:131;;;;-1:-1:-1;;;51276:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51441:13;;51426:58;;;-1:-1:-1;;;51426:58:0;;-1:-1:-1;;;;;51426:58:0;;;;;;;;;51441:13;;;;;51426:47;;:58;;;;;;;;;;;;;;51441:13;51426:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51426:58:0;:63;51418:125;;;;-1:-1:-1;;;51418:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51572:9;;51564:61;;;-1:-1:-1;;;51564:61:0;;-1:-1:-1;;;;;51564:61:0;;;;;;;;;51572:9;;;;;51564:50;;:61;;;;;;;;;;;;;;51572:9;51564:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51564:61:0;:66;51556:138;;;;-1:-1:-1;;;51556:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51721:9;;51713:58;;;-1:-1:-1;;;51713:58:0;;-1:-1:-1;;;;;51713:58:0;;;;;;;;;51721:9;;;;;51713:47;;:58;;;;;;;;;;;;;;51721:9;51713:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51713:58:0;:63;51705:132;;;;-1:-1:-1;;;51705:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51865:9;;51858:38;;;-1:-1:-1;;;51858:38:0;;-1:-1:-1;;;;;51858:38:0;;;;;;;;;51865:9;;;;;51858:27;;:38;;;;;;;;;;;;;;51865:9;51858:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51858:38:0;:43;51850:91;;;;-1:-1:-1;;;51850:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51967:9;;51960:38;;;-1:-1:-1;;;51960:38:0;;-1:-1:-1;;;;;51960:38:0;;;;;;;;;51967:9;;;;;51960:27;;:38;;;;;;;;;;;;;;51967:9;51960:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51960:38:0;:43;51952:91;;;;-1:-1:-1;;;51952:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22311:761;22735:23;22761:69;22789:4;22761:69;;;;;;;;;;;;;;;;;22769:5;-1:-1:-1;;;;;22761:27:0;;;:69;;;;;:::i;:::-;22845:17;;22735:95;;-1:-1:-1;22845:21:0;22841:224;;22987:10;22976:30;;;;;;;;;;;;;;;-1:-1:-1;22976:30:0;22968:85;;;;-1:-1:-1;;;22968:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5443:471;5501:7;5746:6;5742:47;;-1:-1:-1;5776:1:0;5769:8;;5742:47;5813:5;;;5817:1;5813;:5;:1;5837:5;;;;;:10;5829:56;;;;-1:-1:-1;;;5829:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6390:132;6448:7;6475:39;6479:1;6482;6475:39;;;;;;;;;;;;;-1:-1:-1;;;6475:39:0;;;:3;:39::i;52186:509::-;52282:16;;52267:68;;;-1:-1:-1;;;52267:68:0;;-1:-1:-1;;;;;52267:68:0;;;;;;;;;;;;;;;52245:19;;52282:16;;;;;52267:48;;:68;;;;;;;;;;;;;;;52245:19;52282:16;52267:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52267:68:0;;-1:-1:-1;52350:15:0;;52346:97;;52412:5;;52382:49;;52392:8;;;;-1:-1:-1;;;;;52412:5:0;52419:11;52382:9;:49::i;:::-;52492:15;;52477:67;;;-1:-1:-1;;;52477:67:0;;-1:-1:-1;;;;;52477:67:0;;;;;;;;;;;;;;;52455:19;;52492:15;;;;;52477:47;;:67;;;;;;;;;;;;;;;52455:19;52492:15;52477:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52477:67:0;;-1:-1:-1;52559:15:0;;52555:133;;52606:13;;52657:5;;52591:85;;;-1:-1:-1;;;52591:85:0;;-1:-1:-1;;;;;52591:85:0;;;;;;;;;;;;;52657:5;;;52591:85;;;;;;;;;;;;52606:13;;;;;52591:45;;:85;;;;;52606:13;;52591:85;;;;;;;52606:13;;52591:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52186:509;;;:::o;52703:264::-;52799:16;;52784:68;;;-1:-1:-1;;;52784:68:0;;-1:-1:-1;;;;;52784:68:0;;;;;;;;;;;;;;;52762:19;;52799:16;;;;;52784:48;;:68;;;;;;;;;;;;;;;52762:19;52799:16;52784:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52784:68:0;;-1:-1:-1;52867:15:0;;52863:97;;52929:5;;52899:49;;52909:8;;;;-1:-1:-1;;;;;52929:5:0;52936:11;52899:9;:49::i;:::-;52703:264;;:::o;15024:195::-;15127:12;15159:52;15181:6;15189:4;15195:1;15198:12;15159:21;:52::i;:::-;15152:59;;15024:195;;;;;;:::o;7018:278::-;7104:7;7139:12;7132:5;7124:28;;;;-1:-1:-1;;;7124:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7163:9;7179:1;7175;:5;;;;;;;7018:278;-1:-1:-1;;;;;7018:278:0:o;16076:530::-;16203:12;16261:5;16236:21;:30;;16228:81;;;;-1:-1:-1;;;16228:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16328:18;16339:6;16328:10;:18::i;:::-;16320:60;;;;;-1:-1:-1;;;16320:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16454:12;16468:23;16495:6;-1:-1:-1;;;;;16495:11:0;16515:5;16523:4;16495:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16495:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16453:75;;;;16546:52;16564:7;16573:10;16585:12;16546:17;:52::i;:::-;16539:59;16076:530;-1:-1:-1;;;;;;;16076:530:0:o;12106:422::-;12473:20;12512:8;;;12106:422::o;18616:742::-;18731:12;18760:7;18756:595;;;-1:-1:-1;18791:10:0;18784:17;;18756:595;18905:17;;:21;18901:439;;19168:10;19162:17;19229:15;19216:10;19212:2;19208:19;19201:44;19116:148;19304:20;;-1:-1:-1;;;19304:20:0;;;;;;;;;;;;;;;;;19311:12;;19304:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://7236c915ee15d645cd3bf0538695d67e9a7913064b476809dcff259cb2fc3ab3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.