Overview
ETH Balance
78.111431238355956837 ETH
Eth Value
$267,099.29 (@ $3,419.46/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 354 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Claim Reward Of | 20206180 | 1 hr ago | IN | 0 ETH | 0.00033974 | ||||
Claim Reward Of | 20206178 | 1 hr ago | IN | 0 ETH | 0.00039039 | ||||
Claim Reward Of | 20206168 | 1 hr ago | IN | 0 ETH | 0.00039211 | ||||
Claim Reward Of | 20206166 | 1 hr ago | IN | 0 ETH | 0.00038351 | ||||
Claim Reward Of | 20206155 | 1 hr ago | IN | 0 ETH | 0.00036886 | ||||
Claim Reward Of | 20206139 | 1 hr ago | IN | 0 ETH | 0.00029811 | ||||
Claim Reward Of | 20206135 | 1 hr ago | IN | 0 ETH | 0.00029757 | ||||
Claim Reward Of | 20194419 | 40 hrs ago | IN | 0 ETH | 0.00023072 | ||||
Claim Reward Of | 20190621 | 2 days ago | IN | 0 ETH | 0.00077668 | ||||
Claim Reward Of | 20182443 | 3 days ago | IN | 0 ETH | 0.00048819 | ||||
Claim Reward Of | 20179082 | 3 days ago | IN | 0 ETH | 0.00044375 | ||||
Claim Reward Of | 20175518 | 4 days ago | IN | 0 ETH | 0.00026595 | ||||
Claim Reward Of | 20175167 | 4 days ago | IN | 0 ETH | 0.00042619 | ||||
Claim Reward Of | 20175121 | 4 days ago | IN | 0 ETH | 0.00030242 | ||||
Redeem Vesting R... | 20168619 | 5 days ago | IN | 0 ETH | 0.0009109 | ||||
Claim Reward Of | 20167516 | 5 days ago | IN | 0 ETH | 0.00070311 | ||||
Claim Reward Of | 20164320 | 5 days ago | IN | 0 ETH | 0.00087278 | ||||
Claim Reward Of | 20163033 | 6 days ago | IN | 0 ETH | 0.00124925 | ||||
Redeem Vesting R... | 20162386 | 6 days ago | IN | 0 ETH | 0.00147664 | ||||
Claim Reward Of | 20152652 | 7 days ago | IN | 0 ETH | 0.00027475 | ||||
Claim Reward Of | 20144934 | 8 days ago | IN | 0 ETH | 0.00024502 | ||||
Claim Reward Of | 20144149 | 8 days ago | IN | 0 ETH | 0.00029779 | ||||
Claim Reward Of | 20143853 | 8 days ago | IN | 0 ETH | 0.00039509 | ||||
Claim Reward Of | 20138881 | 9 days ago | IN | 0 ETH | 0.00071557 | ||||
Claim Reward Of | 20138873 | 9 days ago | IN | 0 ETH | 0.00077125 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20206180 | 1 hr ago | 0.00024634 ETH | ||||
20206178 | 1 hr ago | 0.06799822 ETH | ||||
20206178 | 1 hr ago | 0.0012317 ETH | ||||
20206168 | 1 hr ago | 0.1222768 ETH | ||||
20206168 | 1 hr ago | 0.00024634 ETH | ||||
20206166 | 1 hr ago | 0.02904661 ETH | ||||
20206166 | 1 hr ago | 0.00135487 ETH | ||||
20206155 | 1 hr ago | 0.06797531 ETH | ||||
20206155 | 1 hr ago | 0.00209389 ETH | ||||
20206139 | 1 hr ago | 0.13592232 ETH | ||||
20206139 | 1 hr ago | 0.00049268 ETH | ||||
20206135 | 1 hr ago | 0.02378403 ETH | ||||
20206135 | 1 hr ago | 1.45118897 ETH | ||||
20194419 | 40 hrs ago | 0.25457538 ETH | ||||
20194419 | 40 hrs ago | 0.47075575 ETH | ||||
20190621 | 2 days ago | 0.01179436 ETH | ||||
20190621 | 2 days ago | 1.01270376 ETH | ||||
20182443 | 3 days ago | 0.1822985 ETH | ||||
20182443 | 3 days ago | 0.41569875 ETH | ||||
20179082 | 3 days ago | 0.03364383 ETH | ||||
20179082 | 3 days ago | 0.4418108 ETH | ||||
20175518 | 4 days ago | 0.00168481 ETH | ||||
20175518 | 4 days ago | 0.04335584 ETH | ||||
20175167 | 4 days ago | 0.12025806 ETH | ||||
20175167 | 4 days ago | 0.00566582 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
TreasuryBootstrapRevenueShare
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-22 */ //SPDX-License-Identifier: MIT // File: contracts/impl/OwnableView.sol pragma solidity ^0.8.0; abstract contract OwnableView { bytes32 internal constant OWNER_KEY = 0xdc6edb7e21c7d6802c30a4249460696aa4c6ef3b5aee9c59996f8fedc7fbaefe; modifier onlyOwner() { require(msg.sender == _owner(), "Unauthorized"); _; } function _owner() internal view returns (address value) { assembly { value := sload(OWNER_KEY) } } } // File: contracts/model/IOwnable.sol pragma solidity ^0.8.0; interface IOwnable { event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function owner() external view returns (address); function renounceOwnership() external; function transferOwnership(address newOwner) external; } // File: contracts/impl/Ownable.sol pragma solidity ^0.8.0; abstract contract Ownable is IOwnable, OwnableView { constructor(address initialOwner) { _transferOwnership(initialOwner); } function owner() override external view returns (address) { return _owner(); } function renounceOwnership() override external onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) override external onlyOwner { require(newOwner != address(0), "Invalid"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) private { address oldOwner = _owner(); assembly { sstore(OWNER_KEY, newOwner) } emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/model/IERC20Approve.sol pragma solidity ^0.8.0; interface IERC20Approve { function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); } // File: contracts/vert/uniswapV3/IPoolInitializer.sol pragma solidity ^0.8.0; interface IPoolInitializer { function createAndInitializePoolIfNecessary( address token0, address token1, uint24 fee, uint160 sqrtPriceX96 ) external payable returns (address pool); } // File: contracts/vert/uniswapV3/IUniswapV3Factory.sol pragma solidity ^0.8.0; interface IUniswapV3Factory { event OwnerChanged(address indexed oldOwner, address indexed newOwner); event PoolCreated( address indexed token0, address indexed token1, uint24 indexed fee, int24 tickSpacing, address pool ); event FeeAmountEnabled(uint24 indexed fee, int24 indexed tickSpacing); function owner() external view returns (address); function feeAmountTickSpacing(uint24 fee) external view returns (int24); function getPool( address tokenA, address tokenB, uint24 fee ) external view returns (address pool); function createPool( address tokenA, address tokenB, uint24 fee ) external returns (address pool); function setOwner(address _owner) external; function enableFeeAmount(uint24 fee, int24 tickSpacing) external; } // File: contracts/vert/uniswapV3/IPeripheryPayments.sol //License-Identifier: MIT pragma solidity ^0.8.0; interface IPeripheryPayments { function unwrapWETH9(uint256 amountMinimum, address recipient) external payable; function refundETH() external payable; function sweepToken( address token, uint256 amountMinimum, address recipient ) external payable; } // File: contracts/vert/uniswapV3/IMulticall.sol //License-Identifier: MIT pragma solidity ^0.8.0; interface IMulticall { function multicall(bytes[] calldata data) external payable returns (bytes[] memory results); } // File: contracts/vert/uniswapV3/IPeripheryImmutableState.sol //License-Identifier: MIT pragma solidity ^0.8.0; interface IPeripheryImmutableState { function factory() external view returns (address); function WETH9() external view returns (address); } // File: contracts/vert/uniswapV3/ISwapRouter.sol //License-Identifier: MIT pragma solidity ^0.8.0; interface ISwapRouter is IMulticall, IPeripheryImmutableState, IPeripheryPayments { struct ExactInputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; uint160 sqrtPriceLimitX96; } function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut); struct ExactInputParams { bytes path; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; } function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut); struct ExactOutputSingleParams { address tokenIn; address tokenOut; uint24 fee; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; uint160 sqrtPriceLimitX96; } function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn); struct ExactOutputParams { bytes path; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; } function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn); } // File: contracts/vert/uniswapV3/INonfungiblePositionManager.sol pragma solidity ^0.8.0; interface INonfungiblePositionManager is IMulticall, IPeripheryImmutableState, IPeripheryPayments { function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function transferFrom(address from, address to, uint256 tokenId) external; function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; function positions(uint256 tokenId) external view returns ( uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1 ); struct MintParams { address token0; address token1; uint24 fee; int24 tickLower; int24 tickUpper; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; address recipient; uint256 deadline; } function mint(MintParams calldata params) external payable returns ( uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1 ); struct IncreaseLiquidityParams { uint256 tokenId; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; uint256 deadline; } function increaseLiquidity(IncreaseLiquidityParams calldata params) external payable returns ( uint128 liquidity, uint256 amount0, uint256 amount1 ); struct DecreaseLiquidityParams { uint256 tokenId; uint128 liquidity; uint256 amount0Min; uint256 amount1Min; uint256 deadline; } function decreaseLiquidity(DecreaseLiquidityParams calldata params) external payable returns (uint256 amount0, uint256 amount1); struct CollectParams { uint256 tokenId; address recipient; uint128 amount0Max; uint128 amount1Max; } function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1); function burn(uint256 tokenId) external payable; } // File: contracts/vert/UtilitiesLib.sol pragma solidity ^0.8.0; library UtilitiesLib { uint256 internal constant AMOUNT_PERCENTAGE = 2e17; uint256 internal constant TREASURY_PERCENTAGE = 5e16; uint256 internal constant MARKETING_PERCENTAGE = 12e16; uint256 internal constant BOOTSTRAP_PERCENTAGE = 13e16; uint256 internal constant REVENUE_SHARE_PERCENTAGE = 1e17; uint256 internal constant ANTI_WHALE_MAX_BALANCE = 1500000e18; uint256 internal constant ANTI_WHALE_MAX_TRANSFER = 750000e18; } // File: @ethereansos/farming-base/contracts/BaseFarming.sol ///License-Identifier: MIT pragma solidity ^0.8.0; interface IERC20Token { function balanceOf(address owner) external view returns (uint); function transfer(address to, uint value) external returns (bool); } library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } } interface IFarmingLiquidityProvider { function totalFarmingLiquidity() external view returns(uint256); function setNextRebalanceEvent(uint256 nextRebalanceEvent) external; } contract BaseFarming { using SafeMath for uint256; struct FarmingPosition { uint256 rewardTokenToRedeem; uint256 rewardPerTokenPaid; uint256 lastLiquidityBalance; } uint256 public constant FULL_PRECISION = 1e18; uint256 public constant TIME_SLOT_IN_SECONDS = 15; address public farmingLiquidityProvider; address public rewardToken; uint256 public rebalanceIntervalInEventSlots; uint256 public startEvent; uint256 public lastUpdateEvent; uint256 public nextRebalanceEvent; uint256 private _rewardPerEvent; uint256 private _rewardPerTokenStored; uint256 private _reservedBalance; uint256 private _previousLiquidityPoolTotalSupply; bool internal _resetOnly; bool internal _inhibitCallback; uint256 public totalFarmingLiquidity; mapping(address => FarmingPosition) private _positions; /// @notice Get the reward per event for the current season /// divided by the farming additional precision function rewardPerEvent() public view returns(uint256) { return _rewardPerEvent / FULL_PRECISION; } /// @notice Get the reserved balance for the current season /// divided by the farming additional precision function reservedBalance() public view returns(uint256) { return _reservedBalance / FULL_PRECISION; } function _increaseReservedBalance(uint256 amount) internal { _reservedBalance = _reservedBalance.add(amount * FULL_PRECISION); } function _decreaseReservedBalance(uint256 amount) internal { _reservedBalance = _reservedBalance.sub(amount * FULL_PRECISION); } function calculateIfThereIsMoreReward() external view returns(uint256 seasonReward) { return _calculateIfThereIsMoreReward(_resetOnly); } function _claimReward(address account, address[] memory rewardReceivers, uint256[] memory rewardReceiversPercentage) internal returns(uint256 claimedReward, uint256 _nextRebalanceEvent, uint256 rewardPerEvent_) { uint lastLiquidityBalance = _positions[account].lastLiquidityBalance; (_nextRebalanceEvent, rewardPerEvent_) = _tryRebalance(_totalSupply(), lastLiquidityBalance == 0, false); claimedReward = _syncPosition( account, lastLiquidityBalance, rewardReceivers, rewardReceiversPercentage ); } /// @notice Sync positions and try to rebalance and start farming seasons function _sync( address from, address to, uint256 fromLiquidityPoolTokenBalance, uint256 toLiquidityPoolTokenBalance, uint256 liquidityPoolTotalSupply ) internal returns(uint256 _nextRebalanceEvent) { (_nextRebalanceEvent,) = _tryRebalance(liquidityPoolTotalSupply, false, false); address[] memory voidRewardReceivers = new address[](0); uint256[] memory voidRewardReceiversPercentage = new uint256[](0); if (from != address(0)) _syncPosition(from, fromLiquidityPoolTokenBalance, voidRewardReceivers, voidRewardReceiversPercentage); if (to != address(0)) _syncPosition(to, toLiquidityPoolTokenBalance, voidRewardReceivers, voidRewardReceiversPercentage); } /// @notice Start and stop the farming perpetual seasons. If the season is started compute the _rewardPerTokenStored /// @param _nextRebalanceEvent is updated after season is started (or stopped) /// @param rewardPerEvent_ is returned in his correct precision, so is divided by PRECISION function _tryRebalance(uint256 liquidityPoolTotalSupply, bool inhibit, bool reset) internal returns(uint256 _nextRebalanceEvent, uint256 rewardPerEvent_) { /// @dev Gas savings for Optimism L1 blocks static call /// and variables that are loaded from storage uint256 blockEventstamp = block.timestamp; uint256 previousLiquidityPoolTotalSupply = _previousLiquidityPoolTotalSupply; uint256 _startEvent = startEvent; uint256 _lastUpdateEvent = lastUpdateEvent; /// @dev Gas savings reusing output variables _nextRebalanceEvent = nextRebalanceEvent; rewardPerEvent_ = _rewardPerEvent; /// @notice Compute the rewards for the time interval (if the season is started) if(_nextRebalanceEvent != 0) { uint256 currentEvent = blockEventstamp < _nextRebalanceEvent ? blockEventstamp : _nextRebalanceEvent; /// @dev Inhibit the _rewardPerTokenStored update when inhibit variable is true. /// This is used for bypass incorrect _rewardPerTokenStored updates in the _tryRebalance function. if(!inhibit && previousLiquidityPoolTotalSupply != 0) { uint256 computedLastUpdateEvent = _lastUpdateEvent < _startEvent ? _startEvent : _lastUpdateEvent; _rewardPerTokenStored = _rewardPerTokenStored.add(((((currentEvent.sub(computedLastUpdateEvent)))).mul(rewardPerEvent_)) / previousLiquidityPoolTotalSupply); lastUpdateEvent = currentEvent; } } _previousLiquidityPoolTotalSupply = liquidityPoolTotalSupply; /// @notice Start (or stop) the new season if(reset || blockEventstamp >= _nextRebalanceEvent || liquidityPoolTotalSupply == 0) { uint256 reservedBalance_ = _reservedBalance; if (_nextRebalanceEvent > blockEventstamp) { reservedBalance_ = reservedBalance_.sub((((_nextRebalanceEvent.sub(blockEventstamp))).mul(rewardPerEvent_))); } /// @dev Using lastUpdateEvent storage variable to store the value lastUpdateEvent = 0; /// @dev Gas savings using memory variables _startEvent = 0; _nextRebalanceEvent = 0; rewardPerEvent_ = 0; uint256 seasonReward = _calculateIfThereIsMoreReward(reset); /// @notice Update the _nextRebalanceEvent, _rewardPerEvent, _reservedBalance /// for the new starting season if(seasonReward > 0 && liquidityPoolTotalSupply != 0) { uint256 _rebalanceIntervalInEvents = rebalanceIntervalInEventSlots.mul(TIME_SLOT_IN_SECONDS); _startEvent = blockEventstamp; reservedBalance_ = reservedBalance_.add(seasonReward); _nextRebalanceEvent = blockEventstamp.add(_rebalanceIntervalInEvents); rewardPerEvent_ = seasonReward / _rebalanceIntervalInEvents; } /// @dev Update storage output variables after changing values startEvent = _startEvent; _reservedBalance = reservedBalance_; nextRebalanceEvent = _nextRebalanceEvent; _rewardPerEvent = rewardPerEvent_; _tryNotifyNewRebalanceEvent(_nextRebalanceEvent); } /// @notice Output variables /// _rewardPerEvent is returned in his correct precision, so is divided by PRECISION /// nextRebalanceEvent is updated after season is started (or stopped) rewardPerEvent_ = rewardPerEvent_ / FULL_PRECISION; } /// @notice Calculate the reward for the `account` position function _calculateRewardUntilNow(address account) private view returns(uint256 reward) { reward = (_rewardPerTokenStored.sub(_positions[account].rewardPerTokenPaid)).mul(_positions[account].lastLiquidityBalance); } /// @notice Sync `account` position and eventually claim the accrued reward function _syncPosition(address account, uint256 liquidityPoolTokenBalance, address[] memory rewardReceivers, uint256[] memory rewardReceiversPercentage) private returns (uint256 claimedReward) { FarmingPosition memory position = _positions[account]; /// @dev Inline definitions for gas savings position.rewardTokenToRedeem = position.rewardTokenToRedeem.add(_calculateRewardUntilNow(account)); position.lastLiquidityBalance = liquidityPoolTokenBalance; position.rewardPerTokenPaid = _rewardPerTokenStored; /// @dev Claim the accrued reward if (_checkRewardParameters(rewardReceivers, rewardReceiversPercentage)) { /// @dev claimedReward is divided by PRECISION to transfer the correct amount claimedReward = position.rewardTokenToRedeem / FULL_PRECISION; if (claimedReward > 0) { uint256 rebuiltReward; /// @dev Decrement accrued reward (rebuiltReward) from _reservedBalance and position.rewardTokenToRedeem in 10**18 precision _reservedBalance = _reservedBalance.sub(rebuiltReward = claimedReward.mul(FULL_PRECISION)); position.rewardTokenToRedeem = position.rewardTokenToRedeem.sub(rebuiltReward); /// @dev Send reward tokens to the reward receivers _transferReward(claimedReward, rewardReceivers, rewardReceiversPercentage); } } /// @dev Reassign memory position to storage _positions _positions[account] = position; } function _transferReward(uint256 claimedReward, address[] memory rewardReceivers, uint256[] memory rewardReceiversPercentage) private { address _rewardToken = rewardToken; uint256 remainingAmount = claimedReward; for(uint256 i = 0; i < rewardReceiversPercentage.length; i++) { uint256 value = _calculatePercentage(claimedReward, rewardReceiversPercentage[i]); _safeTransfer(_rewardToken, rewardReceivers[i], value); remainingAmount -= value; } _safeTransfer(_rewardToken, rewardReceivers[rewardReceivers.length - 1], remainingAmount); } function _checkRewardParameters(address[] memory rewardReceivers, uint256[] memory rewardReceiversPercentage) private pure returns(bool) { if(rewardReceivers.length == 0) { return false; } require(rewardReceiversPercentage.length == (rewardReceivers.length - 1), "percentage"); uint256 availableAmount = FULL_PRECISION; for(uint256 i = 0; i < rewardReceiversPercentage.length; i++) { uint256 percentage = rewardReceiversPercentage[i]; require(percentage != 0 && percentage < availableAmount, "percentage"); availableAmount -= percentage; } require(availableAmount != 0, "percentage"); return true; } function _calculatePercentage(uint256 total, uint256 percentage) internal pure returns (uint256) { return (total * ((percentage * 1e18) / FULL_PRECISION)) / 1e18; } function _safeTransfer(address tokenAddress, address to, uint256 value) internal { if(value == 0) { return; } if(to == address(this)) { return; } if(tokenAddress == address(0)) { require(_sendETH(to, value), 'FARMING: TRANSFER_FAILED'); return; } if(to == address(0)) { return _safeBurn(tokenAddress, value); } (bool success, bytes memory data) = tokenAddress.call(abi.encodeWithSelector(IERC20Token(address(0)).transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'FARMING: TRANSFER_FAILED'); } function _safeBurn(address erc20TokenAddress, uint256 value) internal { (bool result, bytes memory returnData) = erc20TokenAddress.call(abi.encodeWithSelector(0x42966c68, value));//burn(uint256) result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); if(!result) { (result, returnData) = erc20TokenAddress.call(abi.encodeWithSelector(IERC20Token(erc20TokenAddress).transfer.selector, address(0), value)); result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); } if(!result) { (result, returnData) = erc20TokenAddress.call(abi.encodeWithSelector(IERC20Token(erc20TokenAddress).transfer.selector, 0x000000000000000000000000000000000000dEaD, value)); result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); } if(!result) { (result, returnData) = erc20TokenAddress.call(abi.encodeWithSelector(IERC20Token(erc20TokenAddress).transfer.selector, 0xdeaDDeADDEaDdeaDdEAddEADDEAdDeadDEADDEaD, value)); result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); } } function _sendETH(address to, uint256 value) private returns(bool) { assembly { let res := call(gas(), to, value, 0, 0, 0, 0) } return true; } function _balanceOf(address tokenAddress) private view returns(uint256) { return tokenAddress == address(0) ? address(this).balance : IERC20Token(tokenAddress).balanceOf(address(this)); } function _tryNotifyNewRebalanceEvent(uint256 _nextRebalanceEvent) private { if(_inhibitCallback) { return; } /// @dev Gas savings to avoid multiple storage loads address _farmingLiquidityProvider = farmingLiquidityProvider; /// @notice Set the new _nextRebalanceEvent to the farmingliquidityprovider if the caller is not the farmingliquidityprovider if(msg.sender != _farmingLiquidityProvider) { IFarmingLiquidityProvider(_farmingLiquidityProvider).setNextRebalanceEvent(_nextRebalanceEvent); } } function _totalSupply() internal view returns(uint256) { address _farmingLiquidityProvider = farmingLiquidityProvider; return _farmingLiquidityProvider == address(this) ? totalFarmingLiquidity : IFarmingLiquidityProvider(_farmingLiquidityProvider).totalFarmingLiquidity(); } function _calculateIfThereIsMoreReward(bool reset) private view returns(uint256 seasonReward) { seasonReward = _resetOnly && !reset ? 0 : (_balanceOf(rewardToken).mul(FULL_PRECISION)).sub(_reservedBalance); } function _initialize(address _farmingLiquidityProvider, uint256 _rebalanceIntervalInEvents) internal { require(farmingLiquidityProvider == address(0), 'Farming: ALREADY_INITIALIZED'); require((farmingLiquidityProvider =_farmingLiquidityProvider) != address(0), 'Farming: LIQUIDITY_PROVIDER'); rebalanceIntervalInEventSlots = _rebalanceIntervalInEvents / TIME_SLOT_IN_SECONDS; } function _receive() internal view { require(rewardToken == address(0)); require(msg.sig == bytes4(0)); require(keccak256(msg.data) == keccak256("")); } } // File: contracts/vert/IVestingContract.sol pragma solidity ^0.8.0; interface IVestingContract { function completeInitialization() external; } // File: contracts/vert/ITreasuryBootstrapRevenueShare.sol pragma solidity ^0.8.0; interface ITreasuryBootstrapRevenueShare { function completeInitialization(address treasuryAddress) external returns(address operatorAddress); function setTreasuryAddress(address newValue) external returns(address oldValue); function updatePositionOf(address account, uint256 amount, uint256 vestedAmount) external payable; function finalizePosition(uint256 treasuryBalance, uint256 additionalLiquidity, uint256 vestingEnds) external payable; } // File: contracts/vert/TreasuryBootstrapRevenueShare.sol pragma solidity ^0.8.0; library TreasuryBootstrapRevenueShareLib { function collectFees(bytes memory conversionInput, address uniswapV3NonfungiblePositionsManager, address token, address WETH, uint256 tokenId, address conversionAddress, uint24 fee, address uniswapV3SwapRouter) external returns(uint256 collectedAmount0, uint256 collectedAmount1, bytes memory conversionOutput) { bytes[] memory data = new bytes[](3); INonfungiblePositionManager nonfungiblePositionManager = INonfungiblePositionManager(uniswapV3NonfungiblePositionsManager); data[0] = abi.encodeWithSelector(nonfungiblePositionManager.collect.selector, INonfungiblePositionManager.CollectParams({ tokenId: tokenId, recipient: address(0), amount0Max: 0xffffffffffffffffffffffffffffffff, amount1Max: 0xffffffffffffffffffffffffffffffff })); data[1] = abi.encodeWithSelector(nonfungiblePositionManager.unwrapWETH9.selector, 0, address(this)); data[2] = abi.encodeWithSelector(nonfungiblePositionManager.sweepToken.selector, token, 0, conversionAddress != address(0) ? conversionAddress : address(this)); (collectedAmount0, collectedAmount1) = abi.decode(IMulticall(uniswapV3NonfungiblePositionsManager).multicall(data)[0], (uint256, uint256)); uint256 amount = token < WETH ? collectedAmount0 : collectedAmount1; if(amount > 0) { conversionOutput = _convertAmountInETH(amount, conversionInput, token, WETH, conversionAddress, fee, uniswapV3SwapRouter); } } function _convertAmountInETH(uint256 amount, bytes memory conversionInput, address token, address WETH, address conversionAddress, uint24 fee, address uniswapV3SwapRouter) private returns(bytes memory conversionOutput) { if(conversionAddress != address(0)) { uint256 codeLength; assembly { codeLength := extcodesize(conversionAddress) } if(codeLength > 0) { return IConvertInETH(conversionAddress).convert(token, amount, conversionInput); } else { return ""; } } (uint24 _fee, uint256 amountOutMinimum) = abi.decode(conversionInput, (uint24, uint256)); ISwapRouter swapRouter = ISwapRouter(uniswapV3SwapRouter); IERC20Approve(token).approve(address(swapRouter), amount); bytes[] memory data = new bytes[](2); data[0] = abi.encodeWithSelector(swapRouter.exactInput.selector, ISwapRouter.ExactInputParams({ path : abi.encodePacked(token, _fee == 0 ? fee : _fee, WETH), recipient : address(0), deadline : block.timestamp + 10000, amountIn : amount, amountOutMinimum : amountOutMinimum })); data[1] = abi.encodeWithSelector(swapRouter.unwrapWETH9.selector, 0, address(this)); conversionOutput = swapRouter.multicall(data)[0]; } function _safeTransfer(address tokenAddress, address to, uint256 value) internal { if(value == 0) { return; } if(to == address(this)) { return; } if(tokenAddress == address(0)) { require(_sendETH(to, value), 'FARMING: TRANSFER_FAILED'); return; } if(to == address(0)) { return _safeBurn(tokenAddress, value); } (bool success, bytes memory data) = tokenAddress.call(abi.encodeWithSelector(IERC20Token(address(0)).transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'FARMING: TRANSFER_FAILED'); } function _safeBurn(address erc20TokenAddress, uint256 value) internal { (bool result, bytes memory returnData) = erc20TokenAddress.call(abi.encodeWithSelector(0x42966c68, value));//burn(uint256) result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); if(!result) { (result, returnData) = erc20TokenAddress.call(abi.encodeWithSelector(IERC20Token(erc20TokenAddress).transfer.selector, address(0), value)); result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); } if(!result) { (result, returnData) = erc20TokenAddress.call(abi.encodeWithSelector(IERC20Token(erc20TokenAddress).transfer.selector, 0x000000000000000000000000000000000000dEaD, value)); result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); } if(!result) { (result, returnData) = erc20TokenAddress.call(abi.encodeWithSelector(IERC20Token(erc20TokenAddress).transfer.selector, 0xdeaDDeADDEaDdeaDdEAddEADDEAdDeadDEADDEaD, value)); result = result && (returnData.length == 0 || abi.decode(returnData, (bool))); } } function _sendETH(address to, uint256 value) private returns(bool) { assembly { let res := call(gas(), to, value, 0, 0, 0, 0) } return true; } } contract TreasuryBootstrapRevenueShare is ITreasuryBootstrapRevenueShare, Ownable, BaseFarming { uint256 public constant MONTH_IN_SECONDS = 2628000; struct AccountPosition { uint256 vestedAmount; uint256 ethAmount; uint128 positionLiquidity; uint256 farmingBalance; } uint256 public accounts; address public immutable destinationAddress; address public immutable uniswapV3NonfungiblePositionsManager; address public immutable uniswapV3SwapRouter; address public immutable WETH; address public pool; uint24 public immutable fee; uint160 public immutable sqrtPriceX96; int24 public tickLower; int24 public tickUpper; uint256 public vestingEnds; uint256 public priceSlippagePercentage; mapping(address => AccountPosition) public positionOf; uint256 public farmingDuration; address public token; address public treasuryAddress; uint256 public treasuryFarmingBalance; uint256 public tokenId; address public conversionAddress; uint256 public redeemableETH; constructor(address initialOwner, address _destinationAddress, address _conversionAddress, uint256 _farmingDuration, address _uniswapV3NonfungiblePositionsManager, address _uniswapV3SwapRouter, uint24 _fee, uint160 _sqrtPriceX96, uint256 _priceSlippagePercentage, int24 _tickLower, int24 _tickUpper) Ownable(initialOwner) { _inhibitCallback = true; _initialize(address(this), MONTH_IN_SECONDS * (farmingDuration = _farmingDuration)); destinationAddress = _destinationAddress; conversionAddress = _conversionAddress; WETH = IPeripheryImmutableState(uniswapV3NonfungiblePositionsManager = _uniswapV3NonfungiblePositionsManager).WETH9(); uniswapV3SwapRouter = _uniswapV3SwapRouter; tickLower = _tickLower; tickUpper = _tickUpper; fee = _fee; sqrtPriceX96 = _sqrtPriceX96; priceSlippagePercentage = _priceSlippagePercentage; } receive() external payable { _receive(); } function onERC721Received(address,address,uint256,bytes calldata) external view returns (bytes4) { require(tokenId == 0); return this.onERC721Received.selector; } function setPriceSlippagePercentage(uint256 newValue) external onlyOwner { priceSlippagePercentage = newValue; } function setConversionAddress(address newValue) external onlyOwner returns(address oldValue) { oldValue = conversionAddress; conversionAddress = newValue; } function completeInitialization(address _treasuryAddress) override external returns(address operatorAddress) { require(token == address(0)); treasuryAddress = _treasuryAddress; uint256 tokenPosition = (token = msg.sender) < WETH ? 0 : 1; return pool = IPoolInitializer(uniswapV3NonfungiblePositionsManager).createAndInitializePoolIfNecessary( tokenPosition == 0 ? msg.sender : WETH, tokenPosition == 1 ? msg.sender : WETH, fee, sqrtPriceX96 ); } function updatePositionOf(address account, uint256 amount, uint256 vestedAmount) override external payable { require(msg.sender == token); _increaseReservedBalance(msg.value); redeemableETH += msg.value; AccountPosition storage _accountPosition = positionOf[account]; if(_accountPosition.ethAmount == 0) { accounts++; } _accountPosition.ethAmount += msg.value; (uint128 liquidity, uint256 remainingAmount) = _mintOrIncreaseLiquidity(amount); amount += vestedAmount; _accountPosition.vestedAmount += vestedAmount + remainingAmount; _accountPosition.positionLiquidity += liquidity; _accountPosition.farmingBalance += amount; totalFarmingLiquidity += amount; require(_accountPosition.farmingBalance <= UtilitiesLib.ANTI_WHALE_MAX_BALANCE, "Anti-whale system active"); _sync(address(0), account, 0, _accountPosition.farmingBalance, totalFarmingLiquidity); } function finalizePosition(uint256 treasuryBalance, uint256 additionalLiquidity, uint256 _vestingEnds) external payable { require(msg.sender == token); vestingEnds = _vestingEnds; (,uint256 remainingAmount) = _mintOrIncreaseLiquidity(treasuryBalance + additionalLiquidity); if(remainingAmount > 0) { _safeBurn(token, remainingAmount); } treasuryFarmingBalance += treasuryBalance; totalFarmingLiquidity += treasuryBalance; address[] memory rewardReceivers = new address[](1); _sync(address(0), rewardReceivers[0] = treasuryAddress, 0, treasuryFarmingBalance, totalFarmingLiquidity); _claimReward(rewardReceivers[0], rewardReceivers, new uint256[](0)); } function redeemVestingResult() external { AccountPosition storage _accountPosition = positionOf[msg.sender]; uint256 vestedAmount = _accountPosition.vestedAmount; uint256 ethAmount = _accountPosition.ethAmount; require(vestedAmount != 0 && ethAmount != 0, "unknown account"); _accountPosition.vestedAmount = 0; _accountPosition.ethAmount = 0; address[] memory rewardReceivers = new address[](1); if(vestingEnds == 0 || block.timestamp < vestingEnds) { _decreaseReservedBalance(ethAmount); redeemableETH -= ethAmount; _safeTransfer(address(0), msg.sender, ethAmount); _safeBurn(token, vestedAmount); totalFarmingLiquidity -= _accountPosition.farmingBalance; _sync(msg.sender, address(0), _accountPosition.farmingBalance = 0, 0, totalFarmingLiquidity); rewardReceivers[0] = treasuryAddress; delete positionOf[msg.sender]; accounts--; } else { _safeTransfer(token, rewardReceivers[0] = msg.sender, vestedAmount); sendRemainingETH(); } _claimReward(msg.sender, rewardReceivers, new uint256[](0)); } modifier afterVestingPeriod() { _afterVestingPeriod(); _; } function sendRemainingETH() public afterVestingPeriod { _sendRemainingETH(); } function setTreasuryAddress(address newValue) external afterVestingPeriod returns(address oldValue) { require((oldValue = treasuryAddress) == msg.sender, "unauthorized"); treasuryAddress = newValue; _sync(oldValue, newValue, 0, treasuryFarmingBalance, totalFarmingLiquidity); address[] memory rewardReceivers = new address[](1); rewardReceivers[0] = newValue; _claimReward(oldValue, rewardReceivers, new uint256[](0)); } function claimReward(address[] memory rewardReceivers, uint256[] memory rewardReceiversPercentage) external afterVestingPeriod returns(uint256 claimedReward, uint256 _nextRebalanceEvent, uint256 rewardPerEvent_) { return _claimReward(msg.sender, rewardReceivers, rewardReceiversPercentage); } function claimRewardOf(address account) external afterVestingPeriod returns(uint256 claimedReward, uint256 _nextRebalanceEvent, uint256 rewardPerEvent_) { address[] memory rewardReceivers = new address[](1); return _claimReward(rewardReceivers[0] = account, rewardReceivers, new uint256[](0)); } function redeemRevenueSharePositionForever(uint256 amount0Min, uint256 amount1Min) external afterVestingPeriod returns (uint256 amount0, uint256 amount1) { AccountPosition storage _accountPosition = positionOf[msg.sender]; require(_accountPosition.positionLiquidity != 0, "unknown account"); uint256 vestedAmount = _accountPosition.vestedAmount; _accountPosition.vestedAmount = 0; _accountPosition.ethAmount = 0; if(vestedAmount != 0) { _safeTransfer(token, msg.sender, vestedAmount); } address to = address(0); uint256 toBalance = 0; if(farmingDuration == 1) { to = treasuryAddress; treasuryFarmingBalance += _accountPosition.farmingBalance; toBalance = treasuryFarmingBalance; } else { totalFarmingLiquidity -= _accountPosition.farmingBalance; } _sync(msg.sender, to, _accountPosition.farmingBalance = 0, toBalance, totalFarmingLiquidity); address[] memory rewardReceivers = new address[](1); rewardReceivers[0] = msg.sender; _claimReward(msg.sender, rewardReceivers, new uint256[](0)); bytes[] memory data = new bytes[](3); INonfungiblePositionManager nonfungiblePositionManager = INonfungiblePositionManager(uniswapV3NonfungiblePositionsManager); (amount0, amount1) = nonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams({ tokenId: tokenId, liquidity: _accountPosition.positionLiquidity, amount0Min: amount0Min, amount1Min: amount1Min, deadline : block.timestamp + 1000 })); delete positionOf[msg.sender]; accounts--; data[0] = abi.encodeWithSelector(nonfungiblePositionManager.collect.selector, INonfungiblePositionManager.CollectParams({ tokenId: tokenId, recipient: address(0), amount0Max: uint128(amount0), amount1Max: uint128(amount1) })); data[1] = abi.encodeWithSelector(nonfungiblePositionManager.unwrapWETH9.selector, 0, msg.sender); data[2] = abi.encodeWithSelector(nonfungiblePositionManager.sweepToken.selector, token, 0, msg.sender); (amount0, amount1) = abi.decode(IMulticall(uniswapV3NonfungiblePositionsManager).multicall(data)[0], (uint256, uint256)); } function collectFees(bytes memory conversionInput) external returns(uint256 collectedAmount0, uint256 collectedAmount1, bytes memory conversionOutput) { (collectedAmount0, collectedAmount1, conversionOutput) = TreasuryBootstrapRevenueShareLib.collectFees(conversionInput, uniswapV3NonfungiblePositionsManager, token, WETH, tokenId, conversionAddress, fee, uniswapV3SwapRouter); _afterVestingPeriod(); } function _mintOrIncreaseLiquidity(uint256 amount) private returns(uint128 liquidity, uint256 remainingAmount) { uint256 tokenPosition = token < WETH ? 0 : 1; IERC20Approve(token).approve(uniswapV3NonfungiblePositionsManager, amount); (uint256 amount0, uint256 amount1) = tokenPosition == 0 ? (amount, uint256(0)) : (uint256(0), amount); if(tokenId == 0) { (tokenId, liquidity, amount0, amount1) = INonfungiblePositionManager(uniswapV3NonfungiblePositionsManager).mint(INonfungiblePositionManager.MintParams({ token0: tokenPosition == 0 ? token : WETH, token1: tokenPosition == 1 ? token : WETH, fee: fee, tickLower: tickLower, tickUpper: tickUpper, amount0Desired: amount0, amount1Desired: amount1, amount0Min: _calculatePercentage(amount0, FULL_PRECISION - priceSlippagePercentage), amount1Min: _calculatePercentage(amount1, FULL_PRECISION - priceSlippagePercentage), recipient: address(this), deadline: block.timestamp + 10000 })); } else { (liquidity, amount0, amount1) = INonfungiblePositionManager(uniswapV3NonfungiblePositionsManager).increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams({ tokenId: tokenId, amount0Desired: amount0, amount1Desired: amount1, amount0Min: _calculatePercentage(amount0, FULL_PRECISION - priceSlippagePercentage), amount1Min: _calculatePercentage(amount1, FULL_PRECISION - priceSlippagePercentage), deadline: block.timestamp + 10000 })); } remainingAmount = (amount - (tokenPosition == 0 ? amount0 : amount1)); } function _sendRemainingETH() private { uint256 _redeemableETH = redeemableETH; if(_redeemableETH != 0) { redeemableETH = 0; _decreaseReservedBalance(_redeemableETH); _safeTransfer(address(0), destinationAddress, _redeemableETH); } } function _afterVestingPeriod() private { require(vestingEnds != 0 && block.timestamp >= vestingEnds, "in vesting period"); _sendRemainingETH(); if(nextRebalanceEvent != 0 && block.timestamp >= nextRebalanceEvent && farmingDuration != 1) { rebalanceIntervalInEventSlots = (MONTH_IN_SECONDS * (farmingDuration = (farmingDuration /= 2) == 0 ? 1 : farmingDuration)) / TIME_SLOT_IN_SECONDS; } address[] memory rewardReceivers = new address[](1); _claimReward(rewardReceivers[0] = treasuryAddress, rewardReceivers, new uint256[](0)); } } interface IConvertInETH { function convert(address tokenAddress, uint256 amount, bytes calldata conversionInput) external returns(bytes memory conversionOutput); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_destinationAddress","type":"address"},{"internalType":"address","name":"_conversionAddress","type":"address"},{"internalType":"uint256","name":"_farmingDuration","type":"uint256"},{"internalType":"address","name":"_uniswapV3NonfungiblePositionsManager","type":"address"},{"internalType":"address","name":"_uniswapV3SwapRouter","type":"address"},{"internalType":"uint24","name":"_fee","type":"uint24"},{"internalType":"uint160","name":"_sqrtPriceX96","type":"uint160"},{"internalType":"uint256","name":"_priceSlippagePercentage","type":"uint256"},{"internalType":"int24","name":"_tickLower","type":"int24"},{"internalType":"int24","name":"_tickUpper","type":"int24"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"FULL_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MONTH_IN_SECONDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_SLOT_IN_SECONDS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateIfThereIsMoreReward","outputs":[{"internalType":"uint256","name":"seasonReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"rewardReceivers","type":"address[]"},{"internalType":"uint256[]","name":"rewardReceiversPercentage","type":"uint256[]"}],"name":"claimReward","outputs":[{"internalType":"uint256","name":"claimedReward","type":"uint256"},{"internalType":"uint256","name":"_nextRebalanceEvent","type":"uint256"},{"internalType":"uint256","name":"rewardPerEvent_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claimRewardOf","outputs":[{"internalType":"uint256","name":"claimedReward","type":"uint256"},{"internalType":"uint256","name":"_nextRebalanceEvent","type":"uint256"},{"internalType":"uint256","name":"rewardPerEvent_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"conversionInput","type":"bytes"}],"name":"collectFees","outputs":[{"internalType":"uint256","name":"collectedAmount0","type":"uint256"},{"internalType":"uint256","name":"collectedAmount1","type":"uint256"},{"internalType":"bytes","name":"conversionOutput","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"completeInitialization","outputs":[{"internalType":"address","name":"operatorAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"conversionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"destinationAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmingLiquidityProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"treasuryBalance","type":"uint256"},{"internalType":"uint256","name":"additionalLiquidity","type":"uint256"},{"internalType":"uint256","name":"_vestingEnds","type":"uint256"}],"name":"finalizePosition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lastUpdateEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebalanceEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"positionOf","outputs":[{"internalType":"uint256","name":"vestedAmount","type":"uint256"},{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint128","name":"positionLiquidity","type":"uint128"},{"internalType":"uint256","name":"farmingBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceSlippagePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceIntervalInEventSlots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"}],"name":"redeemRevenueSharePositionForever","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemVestingResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemableETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendRemainingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newValue","type":"address"}],"name":"setConversionAddress","outputs":[{"internalType":"address","name":"oldValue","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setPriceSlippagePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newValue","type":"address"}],"name":"setTreasuryAddress","outputs":[{"internalType":"address","name":"oldValue","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sqrtPriceX96","outputs":[{"internalType":"uint160","name":"","type":"uint160"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startEvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tickLower","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tickUpper","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFarmingLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFarmingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV3NonfungiblePositionsManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV3SwapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"vestedAmount","type":"uint256"}],"name":"updatePositionOf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"vestingEnds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
61014060405234801562000011575f80fd5b50604051620067ef380380620067ef833981810160405281019062000037919062000604565b8a6200004981620002ad60201b60201c565b506001600a60016101000a81548160ff0219169083151502179055506200008c30896012819055622819a062000080919062000737565b6200034160201b60201c565b8973ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508860175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508673ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525073ffffffffffffffffffffffffffffffffffffffff16634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a2919062000781565b73ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508573ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505081600e60146101000a81548162ffffff021916908360020b62ffffff16021790555080600e60176101000a81548162ffffff021916908360020b62ffffff1602179055508462ffffff166101008162ffffff16815250508373ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff168152505082601081905550505050505050505050505062000901565b5f620002be6200049860201b60201c565b9050817fdc6edb7e21c7d6802c30a4249460696aa4c6ef3b5aee9c59996f8fedc7fbaefe558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620003d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c8906200080f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16825f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905573ffffffffffffffffffffffffffffffffffffffff16036200047f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000476906200087d565b60405180910390fd5b600f816200048e9190620008ca565b6002819055505050565b5f7fdc6edb7e21c7d6802c30a4249460696aa4c6ef3b5aee9c59996f8fedc7fbaefe54905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620004ef82620004c4565b9050919050565b6200050181620004e3565b81146200050c575f80fd5b50565b5f815190506200051f81620004f6565b92915050565b5f819050919050565b620005398162000525565b811462000544575f80fd5b50565b5f8151905062000557816200052e565b92915050565b5f62ffffff82169050919050565b62000576816200055d565b811462000581575f80fd5b50565b5f8151905062000594816200056b565b92915050565b620005a581620004c4565b8114620005b0575f80fd5b50565b5f81519050620005c3816200059a565b92915050565b5f8160020b9050919050565b620005e081620005c9565b8114620005eb575f80fd5b50565b5f81519050620005fe81620005d5565b92915050565b5f805f805f805f805f805f6101608c8e031215620006275762000626620004c0565b5b5f620006368e828f016200050f565b9b50506020620006498e828f016200050f565b9a505060406200065c8e828f016200050f565b99505060606200066f8e828f0162000547565b9850506080620006828e828f016200050f565b97505060a0620006958e828f016200050f565b96505060c0620006a88e828f0162000584565b95505060e0620006bb8e828f01620005b3565b945050610100620006cf8e828f0162000547565b935050610120620006e38e828f01620005ee565b925050610140620006f78e828f01620005ee565b9150509295989b509295989b9093969950565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620007438262000525565b9150620007508362000525565b9250828202620007608162000525565b915082820484148315176200077a57620007796200070a565b5b5092915050565b5f60208284031215620007995762000798620004c0565b5b5f620007a8848285016200050f565b91505092915050565b5f82825260208201905092915050565b7f4661726d696e673a20414c52454144595f494e495449414c495a4544000000005f82015250565b5f620007f7601c83620007b1565b91506200080482620007c1565b602082019050919050565b5f6020820190508181035f8301526200082881620007e9565b9050919050565b7f4661726d696e673a204c49515549444954595f50524f564944455200000000005f82015250565b5f62000865601b83620007b1565b915062000872826200082f565b602082019050919050565b5f6020820190508181035f830152620008968162000857565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620008d68262000525565b9150620008e38362000525565b925082620008f657620008f56200089d565b5b828204905092915050565b60805160a05160c05160e0516101005161012051615e1a620009d55f395f8181611b3101526123ec01525f8181610efd015281816123cb015281816124b201526131ea01525f8181610eb7015281816121380152818161229101528181612373015281816123a301528181612f6c0152818161311a015261318601525f8181610c2a0152610f1e01525f8181610e7401528181610fbf0152818161166801528181611a3f015281816123300152818161302b015281816130cb015261333c01525f8181612193015261390e0152615e1a5ff3fe6080604052600436106102b0575f3560e01c806381c602b111610174578063c5f956af116100db578063e2fd38e911610094578063f42d437e1161006e578063f42d437e14610a60578063f7c618c114610a8a578063fc0c546a14610ab4578063fd2d39c514610ade576102bf565b8063e2fd38e9146109f2578063ec5687bd14610a1c578063f2fde38b14610a38576102bf565b8063c5f956af146108e4578063ca3254691461090e578063d9dbde6614610938578063dc27f99414610962578063dce7ea531461098c578063ddca3f43146109c8576102bf565b80639c8592f41161012d5780639c8592f41461081e578063a1aabda614610848578063a355120a14610872578063acb50b0e1461088e578063ad5c4648146108a4578063b1f7cec8146108ce576102bf565b806381c602b11461070f578063849e90b3146107395780638d829752146107765780638da5cb5b146107a05780638db791d2146107ca578063921cb5e4146107f4576102bf565b80634b5c4d65116102185780636605bfda116101d15780636605bfda1461060157806368cd03f61461063d578063715018a6146106675780637171225c1461067d57806379fb9a46146106a75780637c64ac43146106e5576102bf565b80634b5c4d65146104f15780634c1314931461051b578063505bbf43146105595780635068f9311461058357806355b812a8146105ad57806359c4f905146105d7576102bf565b806317d70f7c1161026a57806317d70f7c146103e55780631ca93b4b1461040f578063271a3027146104395780633b5cb5f8146104615780633f4676dc1461048b578063441817da146104b5576102bf565b8062bc574b146102c357806305a6c432146102ed5780630c7d67631461032b57806312a4c68414610355578063150b7a021461037f57806316f0115b146103bb576102bf565b366102bf576102bd610b1d565b005b5f80fd5b3480156102ce575f80fd5b506102d7610c28565b6040516102e49190614437565b60405180910390f35b3480156102f8575f80fd5b50610313600480360381019061030e91906146ce565b610c4c565b60405161032293929190614753565b60405180910390f35b348015610336575f80fd5b5061033f610c6f565b60405161034c9190614788565b60405180910390f35b348015610360575f80fd5b50610369610c75565b6040516103769190614788565b60405180910390f35b34801561038a575f80fd5b506103a560048036038101906103a091906147fa565b610c7b565b6040516103b291906148b8565b60405180910390f35b3480156103c6575f80fd5b506103cf610c9c565b6040516103dc9190614437565b60405180910390f35b3480156103f0575f80fd5b506103f9610cc1565b6040516104069190614788565b60405180910390f35b34801561041a575f80fd5b50610423610cc7565b6040516104309190614788565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a91906148d1565b610ce3565b005b34801561046c575f80fd5b50610475610d62565b6040516104829190614788565b60405180910390f35b348015610496575f80fd5b5061049f610d68565b6040516104ac9190614788565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d691906148fc565b610d6e565b6040516104e89190614437565b60405180910390f35b3480156104fc575f80fd5b50610505610e4d565b6040516105129190614788565b60405180910390f35b348015610526575f80fd5b50610541600480360381019061053c91906149d7565b610e53565b60405161055093929190614a98565b60405180910390f35b348015610564575f80fd5b5061056d610fbd565b60405161057a9190614437565b60405180910390f35b34801561058e575f80fd5b50610597610fe1565b6040516105a49190614788565b60405180910390f35b3480156105b8575f80fd5b506105c1610fe7565b6040516105ce9190614aef565b60405180910390f35b3480156105e2575f80fd5b506105eb610ffa565b6040516105f89190614aef565b60405180910390f35b34801561060c575f80fd5b50610627600480360381019061062291906148fc565b61100d565b6040516106349190614437565b60405180910390f35b348015610648575f80fd5b506106516111f1565b60405161065e9190614788565b60405180910390f35b348015610672575f80fd5b5061067b6111f7565b005b348015610688575f80fd5b50610691611277565b60405161069e9190614788565b60405180910390f35b3480156106b2575f80fd5b506106cd60048036038101906106c891906148fc565b61127e565b6040516106dc93929190614753565b60405180910390f35b3480156106f0575f80fd5b506106f9611383565b6040516107069190614788565b60405180910390f35b34801561071a575f80fd5b50610723611389565b6040516107309190614788565b60405180910390f35b348015610744575f80fd5b5061075f600480360381019061075a9190614b08565b61138f565b60405161076d929190614b46565b60405180910390f35b348015610781575f80fd5b5061078a611b1c565b6040516107979190614788565b60405180910390f35b3480156107ab575f80fd5b506107b4611b21565b6040516107c19190614437565b60405180910390f35b3480156107d5575f80fd5b506107de611b2f565b6040516107eb9190614b7c565b60405180910390f35b3480156107ff575f80fd5b50610808611b53565b6040516108159190614788565b60405180910390f35b348015610829575f80fd5b50610832611b5f565b60405161083f9190614788565b60405180910390f35b348015610853575f80fd5b5061085c611b65565b6040516108699190614788565b60405180910390f35b61088c60048036038101906108879190614b95565b611b81565b005b348015610899575f80fd5b506108a2611dbc565b005b3480156108af575f80fd5b506108b8612136565b6040516108c59190614437565b60405180910390f35b3480156108d9575f80fd5b506108e261215a565b005b3480156108ef575f80fd5b506108f861216c565b6040516109059190614437565b60405180910390f35b348015610919575f80fd5b50610922612191565b60405161092f9190614437565b60405180910390f35b348015610943575f80fd5b5061094c6121b5565b6040516109599190614437565b60405180910390f35b34801561096d575f80fd5b506109766121d8565b6040516109839190614788565b60405180910390f35b348015610997575f80fd5b506109b260048036038101906109ad91906148fc565b6121f5565b6040516109bf9190614437565b60405180910390f35b3480156109d3575f80fd5b506109dc6124b0565b6040516109e99190614c02565b60405180910390f35b3480156109fd575f80fd5b50610a066124d4565b604051610a139190614788565b60405180910390f35b610a366004803603810190610a319190614c1b565b6124da565b005b348015610a43575f80fd5b50610a5e6004803603810190610a5991906148fc565b6126f8565b005b348015610a6b575f80fd5b50610a746127e7565b604051610a819190614437565b60405180910390f35b348015610a95575f80fd5b50610a9e61280c565b604051610aab9190614437565b60405180910390f35b348015610abf575f80fd5b50610ac8612831565b604051610ad59190614437565b60405180910390f35b348015610ae9575f80fd5b50610b046004803603810190610aff91906148fc565b612856565b604051610b149493929190614c95565b60405180910390f35b5f73ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b75575f80fd5b5f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19165f357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610be4575f80fd5b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705f36604051610c15929190614d06565b604051809103902014610c26575f80fd5b565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f805f610c5761289d565b610c62338686612a82565b9250925092509250925092565b60125481565b60025481565b5f8060165414610c89575f80fd5b63150b7a0260e01b905095945050505050565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b5f670de0b6b3a7640000600654610cde9190614d78565b905090565b610ceb612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90614e02565b60405180910390fd5b8060108190555050565b60155481565b600b5481565b5f610d77612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90614e02565b60405180910390fd5b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b60185481565b5f80606073ca883a296fa19d0ce326caa8bc6de328bbf47cd863fe372348857f000000000000000000000000000000000000000000000000000000000000000060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000060165460175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040518963ffffffff1660e01b8152600401610f60989796959493929190614e95565b5f60405180830381865af4158015610f7a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610fa29190614f9a565b809350819450829550505050610fb661289d565b9193909250565b7f000000000000000000000000000000000000000000000000000000000000000081565b60045481565b600e60179054906101000a900460020b81565b600e60149054906101000a900460020b81565b5f61101661289d565b3373ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90615050565b60405180910390fd5b8160145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110f981835f601554600b54612b25565b505f600167ffffffffffffffff81111561111657611115614475565b5b6040519080825280602002602001820160405280156111445781602001602082028036833780820191505090505b50905082815f8151811061115b5761115a61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506111e882825f67ffffffffffffffff8111156111b4576111b3614475565b5b6040519080825280602002602001820160405280156111e25781602001602082028036833780820191505090505b50612a82565b50505050919050565b600d5481565b6111ff612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461126c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126390614e02565b60405180910390fd5b6112755f612c5b565b565b622819a081565b5f805f61128961289d565b5f600167ffffffffffffffff8111156112a5576112a4614475565b5b6040519080825280602002602001820160405280156112d35781602001602082028036833780820191505090505b50905061137585825f815181106112ed576112ec61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250825f67ffffffffffffffff81111561134157611340614475565b5b60405190808252806020026020018201604052801561136f5781602001602082028036833780820191505090505b50612a82565b935093509350509193909250565b600f5481565b60105481565b5f8061139961289d565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f816002015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff160361144c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611443906150e5565b60405180910390fd5b5f815f015490505f825f01819055505f82600101819055505f81146114985761149760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff163383612ce7565b5b5f806001601254036114ee5760145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150836003015460155f8282546114dd9190615103565b92505081905550601554905061150b565b8360030154600b5f8282546115039190615136565b925050819055505b61152133835f8760030181905584600b54612b25565b505f600167ffffffffffffffff81111561153e5761153d614475565b5b60405190808252806020026020018201604052801561156c5781602001602082028036833780820191505090505b50905033815f815181106115835761158261506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061161033825f67ffffffffffffffff8111156115dc576115db614475565b5b60405190808252806020026020018201604052801561160a5781602001602082028036833780820191505090505b50612a82565b5050505f600367ffffffffffffffff81111561162f5761162e614475565b5b60405190808252806020026020018201604052801561166257816020015b606081526020019060019003908161164d5790505b5090505f7f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff16630c49ccbe6040518060a0016040528060165481526020018a6002015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020016103e8426117099190615103565b8152506040518263ffffffff1660e01b815260040161172891906151ed565b60408051808303815f875af1158015611743573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117679190615206565b809950819a50505060115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f6101000a8154906fffffffffffffffffffffffffffffffff0219169055600382015f90555050600d5f8154809291906117f790615244565b919050555063fc6f786560e01b604051806080016040528060165481526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020018b6fffffffffffffffffffffffffffffffff1681526020018a6fffffffffffffffffffffffffffffffff1681525060405160240161187191906152cd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050825f815181106118e1576118e061506e565b5b60200260200101819052506349404b7c60e01b5f33604051602401611907929190615334565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050826001815181106119785761197761506e565b5b602002602001018190525063df2ab5bb60e01b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f336040516024016119c19392919061535b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505082600281518110611a3257611a3161506e565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ac9650d8836040518263ffffffff1660e01b8152600401611a969190615493565b5f604051808303815f875af1158015611ab1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ad99190615591565b5f81518110611aeb57611aea61506e565b5b6020026020010151806020019051810190611b069190615206565b809950819a505050505050505050509250929050565b600f81565b5f611b2a612afd565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b670de0b6b3a764000081565b60055481565b5f670de0b6b3a7640000600854611b7c9190614d78565b905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bd9575f80fd5b611be234612f36565b3460185f828254611bf39190615103565b925050819055505f60115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f816001015403611c5d57600d5f815480929190611c57906155d8565b91905055505b34816001015f828254611c709190615103565b925050819055505f80611c8285612f67565b915091508385611c929190615103565b94508084611ca09190615103565b835f015f828254611cb19190615103565b9250508190555081836002015f8282829054906101000a90046fffffffffffffffffffffffffffffffff16611ce6919061561f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555084836003015f828254611d2f9190615103565b9250508190555084600b5f828254611d479190615103565b925050819055506a013da329b633647180000083600301541115611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906156ac565b60405180910390fd5b611db35f875f8660030154600b54612b25565b50505050505050565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f015490505f826001015490505f8214158015611e1b57505f8114155b611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e51906150e5565b60405180910390fd5b5f835f01819055505f83600101819055505f600167ffffffffffffffff811115611e8757611e86614475565b5b604051908082528060200260200182016040528015611eb55781602001602082028036833780820191505090505b5090505f600f541480611ec95750600f5442105b1561205957611ed78261347b565b8160185f828254611ee89190615136565b92505081905550611efa5f3384612ce7565b611f2560135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134ac565b8360030154600b5f828254611f3a9190615136565b92505081905550611f57335f80876003018190555f600b54612b25565b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110611f8d57611f8c61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f6101000a8154906fffffffffffffffffffffffffffffffff0219169055600382015f90555050600d5f81548092919061204f90615244565b91905055506120da565b6120d160135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633835f815181106120925761209161506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525085612ce7565b6120d961215a565b5b61212d33825f67ffffffffffffffff8111156120f9576120f8614475565b5b6040519080825280602002602001820160405280156121275781602001602082028036833780820191505090505b50612a82565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61216261289d565b61216a6138eb565b565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6121f0600a5f9054906101000a900460ff16613937565b905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224e575f80fd5b8160145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163360135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905573ffffffffffffffffffffffffffffffffffffffff1610612327576001612329565b5f5b60ff1690507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166313ead5625f8314612397577f0000000000000000000000000000000000000000000000000000000000000000612399565b335b600184146123c7577f00000000000000000000000000000000000000000000000000000000000000006123c9565b335b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040518563ffffffff1660e01b815260040161242a94939291906156ca565b6020604051808303815f875af1158015612446573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061246a9190615721565b600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612532575f80fd5b80600f819055505f61254e83856125499190615103565b612f67565b9150505f8111156125855761258460135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134ac565b5b8360155f8282546125969190615103565b9250508190555083600b5f8282546125ae9190615103565b925050819055505f600167ffffffffffffffff8111156125d1576125d0614475565b5b6040519080825280602002602001820160405280156125ff5781602001602082028036833780820191505090505b5090506126805f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16835f8151811061263b5761263a61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505f601554600b54612b25565b506126ee815f815181106126975761269661506e565b5b6020026020010151825f67ffffffffffffffff8111156126ba576126b9614475565b5b6040519080825280602002602001820160405280156126e85781602001602082028036833780820191505090505b50612a82565b5050505050505050565b612700612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614e02565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d290615796565b60405180910390fd5b6127e481612c5b565b50565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011602052805f5260405f205f91509050805f015490806001015490806002015f9054906101000a90046fffffffffffffffffffffffffffffffff16908060030154905084565b5f600f54141580156128b15750600f544210155b6128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e7906157fe565b60405180910390fd5b6128f86138eb565b5f6005541415801561290c57506005544210155b801561291b5750600160125414155b1561296f57600f5f600260125f8282546129359190614d78565b925050819055146129485760125461294b565b60015b6012819055622819a061295e919061581c565b6129689190614d78565b6002819055505b5f600167ffffffffffffffff81111561298b5761298a614475565b5b6040519080825280602002602001820160405280156129b95781602001602082028036833780820191505090505b509050612a7c60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16825f815181106129f4576129f361506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250825f67ffffffffffffffff811115612a4857612a47614475565b5b604051908082528060200260200182016040528015612a765781602001602082028036833780820191505090505b50612a82565b50505050565b5f805f80600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600201549050612add612ad46139bb565b5f83145f613a8e565b8093508194505050612af187828888613c7d565b93505093509350939050565b5f7fdc6edb7e21c7d6802c30a4249460696aa4c6ef3b5aee9c59996f8fedc7fbaefe54905090565b5f612b31825f80613a8e565b50809150505f8067ffffffffffffffff811115612b5157612b50614475565b5b604051908082528060200260200182016040528015612b7f5781602001602082028036833780820191505090505b5090505f8067ffffffffffffffff811115612b9d57612b9c614475565b5b604051908082528060200260200182016040528015612bcb5781602001602082028036833780820191505090505b5090505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612c0f57612c0d88878484613c7d565b505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612c5057612c4e87868484613c7d565b505b505095945050505050565b5f612c64612afd565b9050817fdc6edb7e21c7d6802c30a4249460696aa4c6ef3b5aee9c59996f8fedc7fbaefe558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f810315612f31573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315612f31575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612da457612d608282613e1d565b612d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d96906158a7565b60405180910390fd5b612f31565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612de657612de183826134ac565b612f31565b5f808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8585604051602401612e1a9291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612e84919061591c565b5f604051808303815f865af19150503d805f8114612ebd576040519150601f19603f3d011682016040523d82523d5f602084013e612ec2565b606091505b5091509150818015612eef57505f81511480612eee575080806020019051810190612eed9190615967565b5b5b612f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f25906158a7565b60405180910390fd5b50505b505050565b612f5e670de0b6b3a764000082612f4d919061581c565b600854613e3190919063ffffffff16565b60088190555050565b5f805f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1610612fe5576001612fe7565b5f5b60ff16905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000866040518363ffffffff1660e01b81526004016130689291906158c5565b6020604051808303815f875af1158015613084573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a89190615967565b505f805f83146130b9575f866130bc565b855f5b915091505f6016540361333a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052805f871461313e577f0000000000000000000000000000000000000000000000000000000000000000613161565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff168152602001600187146131aa577f00000000000000000000000000000000000000000000000000000000000000006131cd565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000062ffffff168152602001600e60149054906101000a900460020b60020b8152602001600e60179054906101000a900460020b60020b815260200185815260200184815260200161326e86601054670de0b6b3a76400006132699190615136565b613e89565b815260200161329285601054670de0b6b3a764000061328d9190615136565b613e89565b81526020013073ffffffffffffffffffffffffffffffffffffffff168152602001612710426132c19190615103565b8152506040518263ffffffff1660e01b81526004016132e09190615a8f565b6080604051808303815f875af11580156132fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133209190615ad3565b60165f829650839750849a50859190505550505050613457565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663219f5d176040518060c0016040528060165481526020018581526020018481526020016133b486601054670de0b6b3a76400006133af9190615136565b613e89565b81526020016133d885601054670de0b6b3a76400006133d39190615136565b613e89565b8152602001612710426133eb9190615103565b8152506040518263ffffffff1660e01b815260040161340a9190615bb0565b6060604051808303815f875af1158015613426573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061344a9190615bc9565b8093508194508297505050505b5f83146134645780613466565b815b866134719190615136565b9350505050915091565b6134a3670de0b6b3a764000082613492919061581c565b600854613ecf90919063ffffffff16565b60088190555050565b5f808373ffffffffffffffffffffffffffffffffffffffff166342966c68846040516024016134db9190614788565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613529919061591c565b5f604051808303815f865af19150503d805f8114613562576040519150601f19603f3d011682016040523d82523d5f602084013e613567565b606091505b509150915081801561359457505f815114806135935750808060200190518101906135929190615967565b5b5b9150816136a9578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b5f856040516024016135cd9291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613637919061591c565b5f604051808303815f865af19150503d805f8114613670576040519150601f19603f3d011682016040523d82523d5f602084013e613675565b606091505b5080925081935050508180156136a657505f815114806136a55750808060200190518101906136a49190615967565b5b5b91505b816137be578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b61dead856040516024016136e29291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161374c919061591c565b5f604051808303815f865af19150503d805f8114613785576040519150601f19603f3d011682016040523d82523d5f602084013e61378a565b606091505b5080925081935050508180156137bb57505f815114806137ba5750808060200190518101906137b99190615967565b5b5b91505b816138e5578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b73deaddeaddeaddeaddeaddeaddeaddeaddeaddead856040516024016138099291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613873919061591c565b5f604051808303815f865af19150503d805f81146138ac576040519150601f19603f3d011682016040523d82523d5f602084013e6138b1565b606091505b5080925081935050508180156138e257505f815114806138e15750808060200190518101906138e09190615967565b5b5b91505b50505050565b5f60185490505f8114613934575f6018819055506139088161347b565b6139335f7f000000000000000000000000000000000000000000000000000000000000000083612ce7565b5b50565b5f600a5f9054906101000a900460ff168015613951575081155b6139b2576139ad60085461399f670de0b6b3a764000061399160015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613f27565b613fe190919063ffffffff16565b613ecf90919063ffffffff16565b6139b4565b5f5b9050919050565b5f805f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613a84578073ffffffffffffffffffffffffffffffffffffffff16633f4676dc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a7f9190615c19565b613a88565b600b545b91505090565b5f805f4290505f60095490505f60035490505f6004549050600554955060065494505f8614613b43575f868510613ac55786613ac7565b845b905088158015613ad757505f8414155b15613b41575f838310613aea5782613aec565b835b9050613b3285613b1789613b098587613ecf90919063ffffffff16565b613fe190919063ffffffff16565b613b219190614d78565b600754613e3190919063ffffffff16565b60078190555081600481905550505b505b886009819055508680613b565750858410155b80613b6057505f89145b15613c5b575f600854905084871115613bad57613baa613b9b87613b8d888b613ecf90919063ffffffff16565b613fe190919063ffffffff16565b82613ecf90919063ffffffff16565b90505b5f6004819055505f92505f96505f95505f613bc789613937565b90505f81118015613bd857505f8b14155b15613c33575f613bf4600f600254613fe190919063ffffffff16565b9050869450613c0c8284613e3190919063ffffffff16565b9250613c218188613e3190919063ffffffff16565b98508082613c2f9190614d78565b9750505b83600381905550816008819055508760058190555086600681905550613c588861404d565b50505b670de0b6b3a764000085613c6f9190614d78565b945050505050935093915050565b5f80600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f8201548152602001600182015481526020016002820154815250509050613d04613cf287614124565b825f0151613e3190919063ffffffff16565b815f01818152505084816040018181525050600754816020018181525050613d2c84846141d3565b15613db757670de0b6b3a7640000815f0151613d489190614d78565b91505f821115613db6575f613d85613d71670de0b6b3a764000085613fe190919063ffffffff16565b915081600854613ecf90919063ffffffff16565b600881905550613da181835f0151613ecf90919063ffffffff16565b825f018181525050613db4838686614322565b505b5b80600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505050949350505050565b5f805f805f85875af1506001905092915050565b5f828284613e3f9190615103565b9150811015613e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7a90615c8e565b60405180910390fd5b92915050565b5f670de0b6b3a764000080670de0b6b3a764000084613ea8919061581c565b613eb29190614d78565b84613ebd919061581c565b613ec79190614d78565b905092915050565b5f828284613edd9190615136565b9150811115613f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1890615cf6565b60405180910390fd5b92915050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613fd8578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613f949190614437565b602060405180830381865afa158015613faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fd39190615c19565b613fda565b475b9050919050565b5f80821480614008575082828385613ff9919061581c565b9250826140069190614d78565b145b614047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161403e90615d5e565b60405180910390fd5b92915050565b600a60019054906101000a900460ff16614121575f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461411f578073ffffffffffffffffffffffffffffffffffffffff1663d3f37d4e836040518263ffffffff1660e01b81526004016140f19190614788565b5f604051808303815f87803b158015614108575f80fd5b505af115801561411a573d5f803e3d5ffd5b505050505b505b50565b5f6141cc600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600201546141be600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154600754613ecf90919063ffffffff16565b613fe190919063ffffffff16565b9050919050565b5f808351036141e4575f905061431c565b600183516141f29190615136565b825114614234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161422b90615dc6565b60405180910390fd5b5f670de0b6b3a764000090505f5b83518110156142d3575f84828151811061425f5761425e61506e565b5b602002602001015190505f811415801561427857508281105b6142b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142ae90615dc6565b60405180910390fd5b80836142c39190615136565b9250508080600101915050614242565b505f8103614316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430d90615dc6565b60405180910390fd5b60019150505b92915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8490505f5b83518110156143be575f61437b8786848151811061436e5761436d61506e565b5b6020026020010151613e89565b90506143a2848784815181106143945761439361506e565b5b602002602001015183612ce7565b80836143ae9190615136565b925050808060010191505061434d565b506143f18285600187516143d29190615136565b815181106143e3576143e261506e565b5b602002602001015183612ce7565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614421826143f8565b9050919050565b61443181614417565b82525050565b5f60208201905061444a5f830184614428565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6144ab82614465565b810181811067ffffffffffffffff821117156144ca576144c9614475565b5b80604052505050565b5f6144dc614450565b90506144e882826144a2565b919050565b5f67ffffffffffffffff82111561450757614506614475565b5b602082029050602081019050919050565b5f80fd5b61452581614417565b811461452f575f80fd5b50565b5f813590506145408161451c565b92915050565b5f614558614553846144ed565b6144d3565b9050808382526020820190506020840283018581111561457b5761457a614518565b5b835b818110156145a457806145908882614532565b84526020840193505060208101905061457d565b5050509392505050565b5f82601f8301126145c2576145c1614461565b5b81356145d2848260208601614546565b91505092915050565b5f67ffffffffffffffff8211156145f5576145f4614475565b5b602082029050602081019050919050565b5f819050919050565b61461881614606565b8114614622575f80fd5b50565b5f813590506146338161460f565b92915050565b5f61464b614646846145db565b6144d3565b9050808382526020820190506020840283018581111561466e5761466d614518565b5b835b8181101561469757806146838882614625565b845260208401935050602081019050614670565b5050509392505050565b5f82601f8301126146b5576146b4614461565b5b81356146c5848260208601614639565b91505092915050565b5f80604083850312156146e4576146e3614459565b5b5f83013567ffffffffffffffff8111156147015761470061445d565b5b61470d858286016145ae565b925050602083013567ffffffffffffffff81111561472e5761472d61445d565b5b61473a858286016146a1565b9150509250929050565b61474d81614606565b82525050565b5f6060820190506147665f830186614744565b6147736020830185614744565b6147806040830184614744565b949350505050565b5f60208201905061479b5f830184614744565b92915050565b5f80fd5b5f8083601f8401126147ba576147b9614461565b5b8235905067ffffffffffffffff8111156147d7576147d66147a1565b5b6020830191508360018202830111156147f3576147f2614518565b5b9250929050565b5f805f805f6080868803121561481357614812614459565b5b5f61482088828901614532565b955050602061483188828901614532565b945050604061484288828901614625565b935050606086013567ffffffffffffffff8111156148635761486261445d565b5b61486f888289016147a5565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6148b28161487e565b82525050565b5f6020820190506148cb5f8301846148a9565b92915050565b5f602082840312156148e6576148e5614459565b5b5f6148f384828501614625565b91505092915050565b5f6020828403121561491157614910614459565b5b5f61491e84828501614532565b91505092915050565b5f80fd5b5f67ffffffffffffffff82111561494557614944614475565b5b61494e82614465565b9050602081019050919050565b828183375f83830152505050565b5f61497b6149768461492b565b6144d3565b90508281526020810184848401111561499757614996614927565b5b6149a284828561495b565b509392505050565b5f82601f8301126149be576149bd614461565b5b81356149ce848260208601614969565b91505092915050565b5f602082840312156149ec576149eb614459565b5b5f82013567ffffffffffffffff811115614a0957614a0861445d565b5b614a15848285016149aa565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614a55578082015181840152602081019050614a3a565b5f8484015250505050565b5f614a6a82614a1e565b614a748185614a28565b9350614a84818560208601614a38565b614a8d81614465565b840191505092915050565b5f606082019050614aab5f830186614744565b614ab86020830185614744565b8181036040830152614aca8184614a60565b9050949350505050565b5f8160020b9050919050565b614ae981614ad4565b82525050565b5f602082019050614b025f830184614ae0565b92915050565b5f8060408385031215614b1e57614b1d614459565b5b5f614b2b85828601614625565b9250506020614b3c85828601614625565b9150509250929050565b5f604082019050614b595f830185614744565b614b666020830184614744565b9392505050565b614b76816143f8565b82525050565b5f602082019050614b8f5f830184614b6d565b92915050565b5f805f60608486031215614bac57614bab614459565b5b5f614bb986828701614532565b9350506020614bca86828701614625565b9250506040614bdb86828701614625565b9150509250925092565b5f62ffffff82169050919050565b614bfc81614be5565b82525050565b5f602082019050614c155f830184614bf3565b92915050565b5f805f60608486031215614c3257614c31614459565b5b5f614c3f86828701614625565b9350506020614c5086828701614625565b9250506040614c6186828701614625565b9150509250925092565b5f6fffffffffffffffffffffffffffffffff82169050919050565b614c8f81614c6b565b82525050565b5f608082019050614ca85f830187614744565b614cb56020830186614744565b614cc26040830185614c86565b614ccf6060830184614744565b95945050505050565b5f81905092915050565b5f614ced8385614cd8565b9350614cfa83858461495b565b82840190509392505050565b5f614d12828486614ce2565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614d8282614606565b9150614d8d83614606565b925082614d9d57614d9c614d1e565b5b828204905092915050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f614dec600c83614da8565b9150614df782614db8565b602082019050919050565b5f6020820190508181035f830152614e1981614de0565b9050919050565b5f82825260208201905092915050565b5f614e3a82614a1e565b614e448185614e20565b9350614e54818560208601614a38565b614e5d81614465565b840191505092915050565b614e7181614417565b82525050565b614e8081614606565b82525050565b614e8f81614be5565b82525050565b5f610100820190508181035f830152614eae818b614e30565b9050614ebd602083018a614e68565b614eca6040830189614e68565b614ed76060830188614e68565b614ee46080830187614e77565b614ef160a0830186614e68565b614efe60c0830185614e86565b614f0b60e0830184614e68565b9998505050505050505050565b5f81519050614f268161460f565b92915050565b5f614f3e614f398461492b565b6144d3565b905082815260208101848484011115614f5a57614f59614927565b5b614f65848285614a38565b509392505050565b5f82601f830112614f8157614f80614461565b5b8151614f91848260208601614f2c565b91505092915050565b5f805f60608486031215614fb157614fb0614459565b5b5f614fbe86828701614f18565b9350506020614fcf86828701614f18565b925050604084015167ffffffffffffffff811115614ff057614fef61445d565b5b614ffc86828701614f6d565b9150509250925092565b7f756e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f61503a600c83614da8565b915061504582615006565b602082019050919050565b5f6020820190508181035f8301526150678161502e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f756e6b6e6f776e206163636f756e7400000000000000000000000000000000005f82015250565b5f6150cf600f83614da8565b91506150da8261509b565b602082019050919050565b5f6020820190508181035f8301526150fc816150c3565b9050919050565b5f61510d82614606565b915061511883614606565b92508282019050808211156151305761512f614d4b565b5b92915050565b5f61514082614606565b915061514b83614606565b925082820390508181111561516357615162614d4b565b5b92915050565b61517281614606565b82525050565b61518181614c6b565b82525050565b60a082015f82015161519b5f850182615169565b5060208201516151ae6020850182615178565b5060408201516151c16040850182615169565b5060608201516151d46060850182615169565b5060808201516151e76080850182615169565b50505050565b5f60a0820190506152005f830184615187565b92915050565b5f806040838503121561521c5761521b614459565b5b5f61522985828601614f18565b925050602061523a85828601614f18565b9150509250929050565b5f61524e82614606565b91505f82036152605761525f614d4b565b5b600182039050919050565b61527481614417565b82525050565b608082015f82015161528e5f850182615169565b5060208201516152a1602085018261526b565b5060408201516152b46040850182615178565b5060608201516152c76060850182615178565b50505050565b5f6080820190506152e05f83018461527a565b92915050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61531e615319615314846152e6565b6152fb565b6152ef565b9050919050565b61532e81615304565b82525050565b5f6040820190506153475f830185615325565b6153546020830184614428565b9392505050565b5f60608201905061536e5f830186614428565b61537b6020830185615325565b6153886040830184614428565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6153d382614a1e565b6153dd81856153b9565b93506153ed818560208601614a38565b6153f681614465565b840191505092915050565b5f61540c83836153c9565b905092915050565b5f602082019050919050565b5f61542a82615390565b615434818561539a565b935083602082028501615446856153aa565b805f5b8581101561548157848403895281516154628582615401565b945061546d83615414565b925060208a01995050600181019050615449565b50829750879550505050505092915050565b5f6020820190508181035f8301526154ab8184615420565b905092915050565b5f67ffffffffffffffff8211156154cd576154cc614475565b5b602082029050602081019050919050565b5f6154f06154eb846154b3565b6144d3565b9050808382526020820190506020840283018581111561551357615512614518565b5b835b8181101561555a57805167ffffffffffffffff81111561553857615537614461565b5b8086016155458982614f6d565b85526020850194505050602081019050615515565b5050509392505050565b5f82601f83011261557857615577614461565b5b81516155888482602086016154de565b91505092915050565b5f602082840312156155a6576155a5614459565b5b5f82015167ffffffffffffffff8111156155c3576155c261445d565b5b6155cf84828501615564565b91505092915050565b5f6155e282614606565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361561457615613614d4b565b5b600182019050919050565b5f61562982614c6b565b915061563483614c6b565b925082820190506fffffffffffffffffffffffffffffffff81111561565c5761565b614d4b565b5b92915050565b7f416e74692d7768616c652073797374656d2061637469766500000000000000005f82015250565b5f615696601883614da8565b91506156a182615662565b602082019050919050565b5f6020820190508181035f8301526156c38161568a565b9050919050565b5f6080820190506156dd5f830187614428565b6156ea6020830186614428565b6156f76040830185614bf3565b6157046060830184614b6d565b95945050505050565b5f8151905061571b8161451c565b92915050565b5f6020828403121561573657615735614459565b5b5f6157438482850161570d565b91505092915050565b7f496e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f615780600783614da8565b915061578b8261574c565b602082019050919050565b5f6020820190508181035f8301526157ad81615774565b9050919050565b7f696e2076657374696e6720706572696f640000000000000000000000000000005f82015250565b5f6157e8601183614da8565b91506157f3826157b4565b602082019050919050565b5f6020820190508181035f830152615815816157dc565b9050919050565b5f61582682614606565b915061583183614606565b925082820261583f81614606565b9150828204841483151761585657615855614d4b565b5b5092915050565b7f4641524d494e473a205452414e534645525f4641494c454400000000000000005f82015250565b5f615891601883614da8565b915061589c8261585d565b602082019050919050565b5f6020820190508181035f8301526158be81615885565b9050919050565b5f6040820190506158d85f830185614428565b6158e56020830184614744565b9392505050565b5f6158f682614a1e565b6159008185614cd8565b9350615910818560208601614a38565b80840191505092915050565b5f61592782846158ec565b915081905092915050565b5f8115159050919050565b61594681615932565b8114615950575f80fd5b50565b5f815190506159618161593d565b92915050565b5f6020828403121561597c5761597b614459565b5b5f61598984828501615953565b91505092915050565b61599b81614be5565b82525050565b6159aa81614ad4565b82525050565b61016082015f8201516159c55f85018261526b565b5060208201516159d8602085018261526b565b5060408201516159eb6040850182615992565b5060608201516159fe60608501826159a1565b506080820151615a1160808501826159a1565b5060a0820151615a2460a0850182615169565b5060c0820151615a3760c0850182615169565b5060e0820151615a4a60e0850182615169565b50610100820151615a5f610100850182615169565b50610120820151615a7461012085018261526b565b50610140820151615a89610140850182615169565b50505050565b5f61016082019050615aa35f8301846159b0565b92915050565b615ab281614c6b565b8114615abc575f80fd5b50565b5f81519050615acd81615aa9565b92915050565b5f805f8060808587031215615aeb57615aea614459565b5b5f615af887828801614f18565b9450506020615b0987828801615abf565b9350506040615b1a87828801614f18565b9250506060615b2b87828801614f18565b91505092959194509250565b60c082015f820151615b4b5f850182615169565b506020820151615b5e6020850182615169565b506040820151615b716040850182615169565b506060820151615b846060850182615169565b506080820151615b976080850182615169565b5060a0820151615baa60a0850182615169565b50505050565b5f60c082019050615bc35f830184615b37565b92915050565b5f805f60608486031215615be057615bdf614459565b5b5f615bed86828701615abf565b9350506020615bfe86828701614f18565b9250506040615c0f86828701614f18565b9150509250925092565b5f60208284031215615c2e57615c2d614459565b5b5f615c3b84828501614f18565b91505092915050565b7f64732d6d6174682d6164642d6f766572666c6f770000000000000000000000005f82015250565b5f615c78601483614da8565b9150615c8382615c44565b602082019050919050565b5f6020820190508181035f830152615ca581615c6c565b9050919050565b7f64732d6d6174682d7375622d756e646572666c6f7700000000000000000000005f82015250565b5f615ce0601583614da8565b9150615ceb82615cac565b602082019050919050565b5f6020820190508181035f830152615d0d81615cd4565b9050919050565b7f64732d6d6174682d6d756c2d6f766572666c6f770000000000000000000000005f82015250565b5f615d48601483614da8565b9150615d5382615d14565b602082019050919050565b5f6020820190508181035f830152615d7581615d3c565b9050919050565b7f70657263656e74616765000000000000000000000000000000000000000000005f82015250565b5f615db0600a83614da8565b9150615dbb82615d7c565b602082019050919050565b5f6020820190508181035f830152615ddd81615da4565b905091905056fea264697066735822122097acec69a57de94181cda30ab7ed6376a1914ac8baa163b7852f28988f3ec7d964736f6c634300081800330000000000000000000000005a46c3a544d160f39a96036a88ad09f95035a892000000000000000000000000bc5052b0aa6149fe86747cb7e99524f56fb6402a000000000000000000000000fad75c63c3817f1931357aec9a7736bb8067a1d90000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000183d3e95f01af549e542b2e000000000000000000000000000000000000000000000000006a94d74f430000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f38ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4868
Deployed Bytecode
0x6080604052600436106102b0575f3560e01c806381c602b111610174578063c5f956af116100db578063e2fd38e911610094578063f42d437e1161006e578063f42d437e14610a60578063f7c618c114610a8a578063fc0c546a14610ab4578063fd2d39c514610ade576102bf565b8063e2fd38e9146109f2578063ec5687bd14610a1c578063f2fde38b14610a38576102bf565b8063c5f956af146108e4578063ca3254691461090e578063d9dbde6614610938578063dc27f99414610962578063dce7ea531461098c578063ddca3f43146109c8576102bf565b80639c8592f41161012d5780639c8592f41461081e578063a1aabda614610848578063a355120a14610872578063acb50b0e1461088e578063ad5c4648146108a4578063b1f7cec8146108ce576102bf565b806381c602b11461070f578063849e90b3146107395780638d829752146107765780638da5cb5b146107a05780638db791d2146107ca578063921cb5e4146107f4576102bf565b80634b5c4d65116102185780636605bfda116101d15780636605bfda1461060157806368cd03f61461063d578063715018a6146106675780637171225c1461067d57806379fb9a46146106a75780637c64ac43146106e5576102bf565b80634b5c4d65146104f15780634c1314931461051b578063505bbf43146105595780635068f9311461058357806355b812a8146105ad57806359c4f905146105d7576102bf565b806317d70f7c1161026a57806317d70f7c146103e55780631ca93b4b1461040f578063271a3027146104395780633b5cb5f8146104615780633f4676dc1461048b578063441817da146104b5576102bf565b8062bc574b146102c357806305a6c432146102ed5780630c7d67631461032b57806312a4c68414610355578063150b7a021461037f57806316f0115b146103bb576102bf565b366102bf576102bd610b1d565b005b5f80fd5b3480156102ce575f80fd5b506102d7610c28565b6040516102e49190614437565b60405180910390f35b3480156102f8575f80fd5b50610313600480360381019061030e91906146ce565b610c4c565b60405161032293929190614753565b60405180910390f35b348015610336575f80fd5b5061033f610c6f565b60405161034c9190614788565b60405180910390f35b348015610360575f80fd5b50610369610c75565b6040516103769190614788565b60405180910390f35b34801561038a575f80fd5b506103a560048036038101906103a091906147fa565b610c7b565b6040516103b291906148b8565b60405180910390f35b3480156103c6575f80fd5b506103cf610c9c565b6040516103dc9190614437565b60405180910390f35b3480156103f0575f80fd5b506103f9610cc1565b6040516104069190614788565b60405180910390f35b34801561041a575f80fd5b50610423610cc7565b6040516104309190614788565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a91906148d1565b610ce3565b005b34801561046c575f80fd5b50610475610d62565b6040516104829190614788565b60405180910390f35b348015610496575f80fd5b5061049f610d68565b6040516104ac9190614788565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d691906148fc565b610d6e565b6040516104e89190614437565b60405180910390f35b3480156104fc575f80fd5b50610505610e4d565b6040516105129190614788565b60405180910390f35b348015610526575f80fd5b50610541600480360381019061053c91906149d7565b610e53565b60405161055093929190614a98565b60405180910390f35b348015610564575f80fd5b5061056d610fbd565b60405161057a9190614437565b60405180910390f35b34801561058e575f80fd5b50610597610fe1565b6040516105a49190614788565b60405180910390f35b3480156105b8575f80fd5b506105c1610fe7565b6040516105ce9190614aef565b60405180910390f35b3480156105e2575f80fd5b506105eb610ffa565b6040516105f89190614aef565b60405180910390f35b34801561060c575f80fd5b50610627600480360381019061062291906148fc565b61100d565b6040516106349190614437565b60405180910390f35b348015610648575f80fd5b506106516111f1565b60405161065e9190614788565b60405180910390f35b348015610672575f80fd5b5061067b6111f7565b005b348015610688575f80fd5b50610691611277565b60405161069e9190614788565b60405180910390f35b3480156106b2575f80fd5b506106cd60048036038101906106c891906148fc565b61127e565b6040516106dc93929190614753565b60405180910390f35b3480156106f0575f80fd5b506106f9611383565b6040516107069190614788565b60405180910390f35b34801561071a575f80fd5b50610723611389565b6040516107309190614788565b60405180910390f35b348015610744575f80fd5b5061075f600480360381019061075a9190614b08565b61138f565b60405161076d929190614b46565b60405180910390f35b348015610781575f80fd5b5061078a611b1c565b6040516107979190614788565b60405180910390f35b3480156107ab575f80fd5b506107b4611b21565b6040516107c19190614437565b60405180910390f35b3480156107d5575f80fd5b506107de611b2f565b6040516107eb9190614b7c565b60405180910390f35b3480156107ff575f80fd5b50610808611b53565b6040516108159190614788565b60405180910390f35b348015610829575f80fd5b50610832611b5f565b60405161083f9190614788565b60405180910390f35b348015610853575f80fd5b5061085c611b65565b6040516108699190614788565b60405180910390f35b61088c60048036038101906108879190614b95565b611b81565b005b348015610899575f80fd5b506108a2611dbc565b005b3480156108af575f80fd5b506108b8612136565b6040516108c59190614437565b60405180910390f35b3480156108d9575f80fd5b506108e261215a565b005b3480156108ef575f80fd5b506108f861216c565b6040516109059190614437565b60405180910390f35b348015610919575f80fd5b50610922612191565b60405161092f9190614437565b60405180910390f35b348015610943575f80fd5b5061094c6121b5565b6040516109599190614437565b60405180910390f35b34801561096d575f80fd5b506109766121d8565b6040516109839190614788565b60405180910390f35b348015610997575f80fd5b506109b260048036038101906109ad91906148fc565b6121f5565b6040516109bf9190614437565b60405180910390f35b3480156109d3575f80fd5b506109dc6124b0565b6040516109e99190614c02565b60405180910390f35b3480156109fd575f80fd5b50610a066124d4565b604051610a139190614788565b60405180910390f35b610a366004803603810190610a319190614c1b565b6124da565b005b348015610a43575f80fd5b50610a5e6004803603810190610a5991906148fc565b6126f8565b005b348015610a6b575f80fd5b50610a746127e7565b604051610a819190614437565b60405180910390f35b348015610a95575f80fd5b50610a9e61280c565b604051610aab9190614437565b60405180910390f35b348015610abf575f80fd5b50610ac8612831565b604051610ad59190614437565b60405180910390f35b348015610ae9575f80fd5b50610b046004803603810190610aff91906148fc565b612856565b604051610b149493929190614c95565b60405180910390f35b5f73ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b75575f80fd5b5f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19165f357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610be4575f80fd5b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705f36604051610c15929190614d06565b604051809103902014610c26575f80fd5b565b7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b5f805f610c5761289d565b610c62338686612a82565b9250925092509250925092565b60125481565b60025481565b5f8060165414610c89575f80fd5b63150b7a0260e01b905095945050505050565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b5f670de0b6b3a7640000600654610cde9190614d78565b905090565b610ceb612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90614e02565b60405180910390fd5b8060108190555050565b60155481565b600b5481565b5f610d77612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90614e02565b60405180910390fd5b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b60185481565b5f80606073ca883a296fa19d0ce326caa8bc6de328bbf47cd863fe372348857f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8860135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260165460175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000000000000000000000000000000000000000027107f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615646040518963ffffffff1660e01b8152600401610f60989796959493929190614e95565b5f60405180830381865af4158015610f7a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610fa29190614f9a565b809350819450829550505050610fb661289d565b9193909250565b7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8881565b60045481565b600e60179054906101000a900460020b81565b600e60149054906101000a900460020b81565b5f61101661289d565b3373ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90615050565b60405180910390fd5b8160145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110f981835f601554600b54612b25565b505f600167ffffffffffffffff81111561111657611115614475565b5b6040519080825280602002602001820160405280156111445781602001602082028036833780820191505090505b50905082815f8151811061115b5761115a61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506111e882825f67ffffffffffffffff8111156111b4576111b3614475565b5b6040519080825280602002602001820160405280156111e25781602001602082028036833780820191505090505b50612a82565b50505050919050565b600d5481565b6111ff612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461126c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126390614e02565b60405180910390fd5b6112755f612c5b565b565b622819a081565b5f805f61128961289d565b5f600167ffffffffffffffff8111156112a5576112a4614475565b5b6040519080825280602002602001820160405280156112d35781602001602082028036833780820191505090505b50905061137585825f815181106112ed576112ec61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250825f67ffffffffffffffff81111561134157611340614475565b5b60405190808252806020026020018201604052801561136f5781602001602082028036833780820191505090505b50612a82565b935093509350509193909250565b600f5481565b60105481565b5f8061139961289d565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f816002015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff160361144c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611443906150e5565b60405180910390fd5b5f815f015490505f825f01819055505f82600101819055505f81146114985761149760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff163383612ce7565b5b5f806001601254036114ee5760145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150836003015460155f8282546114dd9190615103565b92505081905550601554905061150b565b8360030154600b5f8282546115039190615136565b925050819055505b61152133835f8760030181905584600b54612b25565b505f600167ffffffffffffffff81111561153e5761153d614475565b5b60405190808252806020026020018201604052801561156c5781602001602082028036833780820191505090505b50905033815f815181106115835761158261506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061161033825f67ffffffffffffffff8111156115dc576115db614475565b5b60405190808252806020026020018201604052801561160a5781602001602082028036833780820191505090505b50612a82565b5050505f600367ffffffffffffffff81111561162f5761162e614475565b5b60405190808252806020026020018201604052801561166257816020015b606081526020019060019003908161164d5790505b5090505f7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8890508073ffffffffffffffffffffffffffffffffffffffff16630c49ccbe6040518060a0016040528060165481526020018a6002015f9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020016103e8426117099190615103565b8152506040518263ffffffff1660e01b815260040161172891906151ed565b60408051808303815f875af1158015611743573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117679190615206565b809950819a50505060115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f6101000a8154906fffffffffffffffffffffffffffffffff0219169055600382015f90555050600d5f8154809291906117f790615244565b919050555063fc6f786560e01b604051806080016040528060165481526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020018b6fffffffffffffffffffffffffffffffff1681526020018a6fffffffffffffffffffffffffffffffff1681525060405160240161187191906152cd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050825f815181106118e1576118e061506e565b5b60200260200101819052506349404b7c60e01b5f33604051602401611907929190615334565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050826001815181106119785761197761506e565b5b602002602001018190525063df2ab5bb60e01b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f336040516024016119c19392919061535b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505082600281518110611a3257611a3161506e565b5b60200260200101819052507f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8873ffffffffffffffffffffffffffffffffffffffff1663ac9650d8836040518263ffffffff1660e01b8152600401611a969190615493565b5f604051808303815f875af1158015611ab1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ad99190615591565b5f81518110611aeb57611aea61506e565b5b6020026020010151806020019051810190611b069190615206565b809950819a505050505050505050509250929050565b600f81565b5f611b2a612afd565b905090565b7f00000000000000000000000000000000000000000183d3e95f01af549e542b2e81565b670de0b6b3a764000081565b60055481565b5f670de0b6b3a7640000600854611b7c9190614d78565b905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bd9575f80fd5b611be234612f36565b3460185f828254611bf39190615103565b925050819055505f60115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f816001015403611c5d57600d5f815480929190611c57906155d8565b91905055505b34816001015f828254611c709190615103565b925050819055505f80611c8285612f67565b915091508385611c929190615103565b94508084611ca09190615103565b835f015f828254611cb19190615103565b9250508190555081836002015f8282829054906101000a90046fffffffffffffffffffffffffffffffff16611ce6919061561f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555084836003015f828254611d2f9190615103565b9250508190555084600b5f828254611d479190615103565b925050819055506a013da329b633647180000083600301541115611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906156ac565b60405180910390fd5b611db35f875f8660030154600b54612b25565b50505050505050565b5f60115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f015490505f826001015490505f8214158015611e1b57505f8114155b611e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e51906150e5565b60405180910390fd5b5f835f01819055505f83600101819055505f600167ffffffffffffffff811115611e8757611e86614475565b5b604051908082528060200260200182016040528015611eb55781602001602082028036833780820191505090505b5090505f600f541480611ec95750600f5442105b1561205957611ed78261347b565b8160185f828254611ee89190615136565b92505081905550611efa5f3384612ce7565b611f2560135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134ac565b8360030154600b5f828254611f3a9190615136565b92505081905550611f57335f80876003018190555f600b54612b25565b5060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110611f8d57611f8c61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f6101000a8154906fffffffffffffffffffffffffffffffff0219169055600382015f90555050600d5f81548092919061204f90615244565b91905055506120da565b6120d160135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633835f815181106120925761209161506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525085612ce7565b6120d961215a565b5b61212d33825f67ffffffffffffffff8111156120f9576120f8614475565b5b6040519080825280602002602001820160405280156121275781602001602082028036833780820191505090505b50612a82565b50505050505050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b61216261289d565b61216a6138eb565b565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000bc5052b0aa6149fe86747cb7e99524f56fb6402a81565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6121f0600a5f9054906101000a900460ff16613937565b905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224e575f80fd5b8160145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff163360135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905573ffffffffffffffffffffffffffffffffffffffff1610612327576001612329565b5f5b60ff1690507f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8873ffffffffffffffffffffffffffffffffffffffff166313ead5625f8314612397577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612399565b335b600184146123c7577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26123c9565b335b7f00000000000000000000000000000000000000000000000000000000000027107f00000000000000000000000000000000000000000183d3e95f01af549e542b2e6040518563ffffffff1660e01b815260040161242a94939291906156ca565b6020604051808303815f875af1158015612446573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061246a9190615721565b600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055915050919050565b7f000000000000000000000000000000000000000000000000000000000000271081565b60035481565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612532575f80fd5b80600f819055505f61254e83856125499190615103565b612f67565b9150505f8111156125855761258460135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134ac565b5b8360155f8282546125969190615103565b9250508190555083600b5f8282546125ae9190615103565b925050819055505f600167ffffffffffffffff8111156125d1576125d0614475565b5b6040519080825280602002602001820160405280156125ff5781602001602082028036833780820191505090505b5090506126805f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16835f8151811061263b5761263a61506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505f601554600b54612b25565b506126ee815f815181106126975761269661506e565b5b6020026020010151825f67ffffffffffffffff8111156126ba576126b9614475565b5b6040519080825280602002602001820160405280156126e85781602001602082028036833780820191505090505b50612a82565b5050505050505050565b612700612afd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614e02565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d290615796565b60405180910390fd5b6127e481612c5b565b50565b60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011602052805f5260405f205f91509050805f015490806001015490806002015f9054906101000a90046fffffffffffffffffffffffffffffffff16908060030154905084565b5f600f54141580156128b15750600f544210155b6128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e7906157fe565b60405180910390fd5b6128f86138eb565b5f6005541415801561290c57506005544210155b801561291b5750600160125414155b1561296f57600f5f600260125f8282546129359190614d78565b925050819055146129485760125461294b565b60015b6012819055622819a061295e919061581c565b6129689190614d78565b6002819055505b5f600167ffffffffffffffff81111561298b5761298a614475565b5b6040519080825280602002602001820160405280156129b95781602001602082028036833780820191505090505b509050612a7c60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16825f815181106129f4576129f361506e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250825f67ffffffffffffffff811115612a4857612a47614475565b5b604051908082528060200260200182016040528015612a765781602001602082028036833780820191505090505b50612a82565b50505050565b5f805f80600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600201549050612add612ad46139bb565b5f83145f613a8e565b8093508194505050612af187828888613c7d565b93505093509350939050565b5f7fdc6edb7e21c7d6802c30a4249460696aa4c6ef3b5aee9c59996f8fedc7fbaefe54905090565b5f612b31825f80613a8e565b50809150505f8067ffffffffffffffff811115612b5157612b50614475565b5b604051908082528060200260200182016040528015612b7f5781602001602082028036833780820191505090505b5090505f8067ffffffffffffffff811115612b9d57612b9c614475565b5b604051908082528060200260200182016040528015612bcb5781602001602082028036833780820191505090505b5090505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612c0f57612c0d88878484613c7d565b505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612c5057612c4e87868484613c7d565b505b505095945050505050565b5f612c64612afd565b9050817fdc6edb7e21c7d6802c30a4249460696aa4c6ef3b5aee9c59996f8fedc7fbaefe558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f810315612f31573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315612f31575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612da457612d608282613e1d565b612d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d96906158a7565b60405180910390fd5b612f31565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612de657612de183826134ac565b612f31565b5f808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8585604051602401612e1a9291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612e84919061591c565b5f604051808303815f865af19150503d805f8114612ebd576040519150601f19603f3d011682016040523d82523d5f602084013e612ec2565b606091505b5091509150818015612eef57505f81511480612eee575080806020019051810190612eed9190615967565b5b5b612f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f25906158a7565b60405180910390fd5b50505b505050565b612f5e670de0b6b3a764000082612f4d919061581c565b600854613e3190919063ffffffff16565b60088190555050565b5f805f7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1610612fe5576001612fe7565b5f5b60ff16905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88866040518363ffffffff1660e01b81526004016130689291906158c5565b6020604051808303815f875af1158015613084573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a89190615967565b505f805f83146130b9575f866130bc565b855f5b915091505f6016540361333a577f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8873ffffffffffffffffffffffffffffffffffffffff1663883164566040518061016001604052805f871461313e577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613161565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff168152602001600187146131aa577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26131cd565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000271062ffffff168152602001600e60149054906101000a900460020b60020b8152602001600e60179054906101000a900460020b60020b815260200185815260200184815260200161326e86601054670de0b6b3a76400006132699190615136565b613e89565b815260200161329285601054670de0b6b3a764000061328d9190615136565b613e89565b81526020013073ffffffffffffffffffffffffffffffffffffffff168152602001612710426132c19190615103565b8152506040518263ffffffff1660e01b81526004016132e09190615a8f565b6080604051808303815f875af11580156132fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133209190615ad3565b60165f829650839750849a50859190505550505050613457565b7f000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8873ffffffffffffffffffffffffffffffffffffffff1663219f5d176040518060c0016040528060165481526020018581526020018481526020016133b486601054670de0b6b3a76400006133af9190615136565b613e89565b81526020016133d885601054670de0b6b3a76400006133d39190615136565b613e89565b8152602001612710426133eb9190615103565b8152506040518263ffffffff1660e01b815260040161340a9190615bb0565b6060604051808303815f875af1158015613426573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061344a9190615bc9565b8093508194508297505050505b5f83146134645780613466565b815b866134719190615136565b9350505050915091565b6134a3670de0b6b3a764000082613492919061581c565b600854613ecf90919063ffffffff16565b60088190555050565b5f808373ffffffffffffffffffffffffffffffffffffffff166342966c68846040516024016134db9190614788565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613529919061591c565b5f604051808303815f865af19150503d805f8114613562576040519150601f19603f3d011682016040523d82523d5f602084013e613567565b606091505b509150915081801561359457505f815114806135935750808060200190518101906135929190615967565b5b5b9150816136a9578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b5f856040516024016135cd9291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613637919061591c565b5f604051808303815f865af19150503d805f8114613670576040519150601f19603f3d011682016040523d82523d5f602084013e613675565b606091505b5080925081935050508180156136a657505f815114806136a55750808060200190518101906136a49190615967565b5b5b91505b816137be578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b61dead856040516024016136e29291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161374c919061591c565b5f604051808303815f865af19150503d805f8114613785576040519150601f19603f3d011682016040523d82523d5f602084013e61378a565b606091505b5080925081935050508180156137bb57505f815114806137ba5750808060200190518101906137b99190615967565b5b5b91505b816138e5578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b73deaddeaddeaddeaddeaddeaddeaddeaddeaddead856040516024016138099291906158c5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613873919061591c565b5f604051808303815f865af19150503d805f81146138ac576040519150601f19603f3d011682016040523d82523d5f602084013e6138b1565b606091505b5080925081935050508180156138e257505f815114806138e15750808060200190518101906138e09190615967565b5b5b91505b50505050565b5f60185490505f8114613934575f6018819055506139088161347b565b6139335f7f000000000000000000000000bc5052b0aa6149fe86747cb7e99524f56fb6402a83612ce7565b5b50565b5f600a5f9054906101000a900460ff168015613951575081155b6139b2576139ad60085461399f670de0b6b3a764000061399160015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613f27565b613fe190919063ffffffff16565b613ecf90919063ffffffff16565b6139b4565b5f5b9050919050565b5f805f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613a84578073ffffffffffffffffffffffffffffffffffffffff16633f4676dc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a7f9190615c19565b613a88565b600b545b91505090565b5f805f4290505f60095490505f60035490505f6004549050600554955060065494505f8614613b43575f868510613ac55786613ac7565b845b905088158015613ad757505f8414155b15613b41575f838310613aea5782613aec565b835b9050613b3285613b1789613b098587613ecf90919063ffffffff16565b613fe190919063ffffffff16565b613b219190614d78565b600754613e3190919063ffffffff16565b60078190555081600481905550505b505b886009819055508680613b565750858410155b80613b6057505f89145b15613c5b575f600854905084871115613bad57613baa613b9b87613b8d888b613ecf90919063ffffffff16565b613fe190919063ffffffff16565b82613ecf90919063ffffffff16565b90505b5f6004819055505f92505f96505f95505f613bc789613937565b90505f81118015613bd857505f8b14155b15613c33575f613bf4600f600254613fe190919063ffffffff16565b9050869450613c0c8284613e3190919063ffffffff16565b9250613c218188613e3190919063ffffffff16565b98508082613c2f9190614d78565b9750505b83600381905550816008819055508760058190555086600681905550613c588861404d565b50505b670de0b6b3a764000085613c6f9190614d78565b945050505050935093915050565b5f80600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f8201548152602001600182015481526020016002820154815250509050613d04613cf287614124565b825f0151613e3190919063ffffffff16565b815f01818152505084816040018181525050600754816020018181525050613d2c84846141d3565b15613db757670de0b6b3a7640000815f0151613d489190614d78565b91505f821115613db6575f613d85613d71670de0b6b3a764000085613fe190919063ffffffff16565b915081600854613ecf90919063ffffffff16565b600881905550613da181835f0151613ecf90919063ffffffff16565b825f018181525050613db4838686614322565b505b5b80600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015590505050949350505050565b5f805f805f85875af1506001905092915050565b5f828284613e3f9190615103565b9150811015613e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7a90615c8e565b60405180910390fd5b92915050565b5f670de0b6b3a764000080670de0b6b3a764000084613ea8919061581c565b613eb29190614d78565b84613ebd919061581c565b613ec79190614d78565b905092915050565b5f828284613edd9190615136565b9150811115613f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1890615cf6565b60405180910390fd5b92915050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613fd8578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613f949190614437565b602060405180830381865afa158015613faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fd39190615c19565b613fda565b475b9050919050565b5f80821480614008575082828385613ff9919061581c565b9250826140069190614d78565b145b614047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161403e90615d5e565b60405180910390fd5b92915050565b600a60019054906101000a900460ff16614121575f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461411f578073ffffffffffffffffffffffffffffffffffffffff1663d3f37d4e836040518263ffffffff1660e01b81526004016140f19190614788565b5f604051808303815f87803b158015614108575f80fd5b505af115801561411a573d5f803e3d5ffd5b505050505b505b50565b5f6141cc600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600201546141be600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154600754613ecf90919063ffffffff16565b613fe190919063ffffffff16565b9050919050565b5f808351036141e4575f905061431c565b600183516141f29190615136565b825114614234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161422b90615dc6565b60405180910390fd5b5f670de0b6b3a764000090505f5b83518110156142d3575f84828151811061425f5761425e61506e565b5b602002602001015190505f811415801561427857508281105b6142b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142ae90615dc6565b60405180910390fd5b80836142c39190615136565b9250508080600101915050614242565b505f8103614316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430d90615dc6565b60405180910390fd5b60019150505b92915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f8490505f5b83518110156143be575f61437b8786848151811061436e5761436d61506e565b5b6020026020010151613e89565b90506143a2848784815181106143945761439361506e565b5b602002602001015183612ce7565b80836143ae9190615136565b925050808060010191505061434d565b506143f18285600187516143d29190615136565b815181106143e3576143e261506e565b5b602002602001015183612ce7565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614421826143f8565b9050919050565b61443181614417565b82525050565b5f60208201905061444a5f830184614428565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6144ab82614465565b810181811067ffffffffffffffff821117156144ca576144c9614475565b5b80604052505050565b5f6144dc614450565b90506144e882826144a2565b919050565b5f67ffffffffffffffff82111561450757614506614475565b5b602082029050602081019050919050565b5f80fd5b61452581614417565b811461452f575f80fd5b50565b5f813590506145408161451c565b92915050565b5f614558614553846144ed565b6144d3565b9050808382526020820190506020840283018581111561457b5761457a614518565b5b835b818110156145a457806145908882614532565b84526020840193505060208101905061457d565b5050509392505050565b5f82601f8301126145c2576145c1614461565b5b81356145d2848260208601614546565b91505092915050565b5f67ffffffffffffffff8211156145f5576145f4614475565b5b602082029050602081019050919050565b5f819050919050565b61461881614606565b8114614622575f80fd5b50565b5f813590506146338161460f565b92915050565b5f61464b614646846145db565b6144d3565b9050808382526020820190506020840283018581111561466e5761466d614518565b5b835b8181101561469757806146838882614625565b845260208401935050602081019050614670565b5050509392505050565b5f82601f8301126146b5576146b4614461565b5b81356146c5848260208601614639565b91505092915050565b5f80604083850312156146e4576146e3614459565b5b5f83013567ffffffffffffffff8111156147015761470061445d565b5b61470d858286016145ae565b925050602083013567ffffffffffffffff81111561472e5761472d61445d565b5b61473a858286016146a1565b9150509250929050565b61474d81614606565b82525050565b5f6060820190506147665f830186614744565b6147736020830185614744565b6147806040830184614744565b949350505050565b5f60208201905061479b5f830184614744565b92915050565b5f80fd5b5f8083601f8401126147ba576147b9614461565b5b8235905067ffffffffffffffff8111156147d7576147d66147a1565b5b6020830191508360018202830111156147f3576147f2614518565b5b9250929050565b5f805f805f6080868803121561481357614812614459565b5b5f61482088828901614532565b955050602061483188828901614532565b945050604061484288828901614625565b935050606086013567ffffffffffffffff8111156148635761486261445d565b5b61486f888289016147a5565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6148b28161487e565b82525050565b5f6020820190506148cb5f8301846148a9565b92915050565b5f602082840312156148e6576148e5614459565b5b5f6148f384828501614625565b91505092915050565b5f6020828403121561491157614910614459565b5b5f61491e84828501614532565b91505092915050565b5f80fd5b5f67ffffffffffffffff82111561494557614944614475565b5b61494e82614465565b9050602081019050919050565b828183375f83830152505050565b5f61497b6149768461492b565b6144d3565b90508281526020810184848401111561499757614996614927565b5b6149a284828561495b565b509392505050565b5f82601f8301126149be576149bd614461565b5b81356149ce848260208601614969565b91505092915050565b5f602082840312156149ec576149eb614459565b5b5f82013567ffffffffffffffff811115614a0957614a0861445d565b5b614a15848285016149aa565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614a55578082015181840152602081019050614a3a565b5f8484015250505050565b5f614a6a82614a1e565b614a748185614a28565b9350614a84818560208601614a38565b614a8d81614465565b840191505092915050565b5f606082019050614aab5f830186614744565b614ab86020830185614744565b8181036040830152614aca8184614a60565b9050949350505050565b5f8160020b9050919050565b614ae981614ad4565b82525050565b5f602082019050614b025f830184614ae0565b92915050565b5f8060408385031215614b1e57614b1d614459565b5b5f614b2b85828601614625565b9250506020614b3c85828601614625565b9150509250929050565b5f604082019050614b595f830185614744565b614b666020830184614744565b9392505050565b614b76816143f8565b82525050565b5f602082019050614b8f5f830184614b6d565b92915050565b5f805f60608486031215614bac57614bab614459565b5b5f614bb986828701614532565b9350506020614bca86828701614625565b9250506040614bdb86828701614625565b9150509250925092565b5f62ffffff82169050919050565b614bfc81614be5565b82525050565b5f602082019050614c155f830184614bf3565b92915050565b5f805f60608486031215614c3257614c31614459565b5b5f614c3f86828701614625565b9350506020614c5086828701614625565b9250506040614c6186828701614625565b9150509250925092565b5f6fffffffffffffffffffffffffffffffff82169050919050565b614c8f81614c6b565b82525050565b5f608082019050614ca85f830187614744565b614cb56020830186614744565b614cc26040830185614c86565b614ccf6060830184614744565b95945050505050565b5f81905092915050565b5f614ced8385614cd8565b9350614cfa83858461495b565b82840190509392505050565b5f614d12828486614ce2565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614d8282614606565b9150614d8d83614606565b925082614d9d57614d9c614d1e565b5b828204905092915050565b5f82825260208201905092915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f614dec600c83614da8565b9150614df782614db8565b602082019050919050565b5f6020820190508181035f830152614e1981614de0565b9050919050565b5f82825260208201905092915050565b5f614e3a82614a1e565b614e448185614e20565b9350614e54818560208601614a38565b614e5d81614465565b840191505092915050565b614e7181614417565b82525050565b614e8081614606565b82525050565b614e8f81614be5565b82525050565b5f610100820190508181035f830152614eae818b614e30565b9050614ebd602083018a614e68565b614eca6040830189614e68565b614ed76060830188614e68565b614ee46080830187614e77565b614ef160a0830186614e68565b614efe60c0830185614e86565b614f0b60e0830184614e68565b9998505050505050505050565b5f81519050614f268161460f565b92915050565b5f614f3e614f398461492b565b6144d3565b905082815260208101848484011115614f5a57614f59614927565b5b614f65848285614a38565b509392505050565b5f82601f830112614f8157614f80614461565b5b8151614f91848260208601614f2c565b91505092915050565b5f805f60608486031215614fb157614fb0614459565b5b5f614fbe86828701614f18565b9350506020614fcf86828701614f18565b925050604084015167ffffffffffffffff811115614ff057614fef61445d565b5b614ffc86828701614f6d565b9150509250925092565b7f756e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f61503a600c83614da8565b915061504582615006565b602082019050919050565b5f6020820190508181035f8301526150678161502e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f756e6b6e6f776e206163636f756e7400000000000000000000000000000000005f82015250565b5f6150cf600f83614da8565b91506150da8261509b565b602082019050919050565b5f6020820190508181035f8301526150fc816150c3565b9050919050565b5f61510d82614606565b915061511883614606565b92508282019050808211156151305761512f614d4b565b5b92915050565b5f61514082614606565b915061514b83614606565b925082820390508181111561516357615162614d4b565b5b92915050565b61517281614606565b82525050565b61518181614c6b565b82525050565b60a082015f82015161519b5f850182615169565b5060208201516151ae6020850182615178565b5060408201516151c16040850182615169565b5060608201516151d46060850182615169565b5060808201516151e76080850182615169565b50505050565b5f60a0820190506152005f830184615187565b92915050565b5f806040838503121561521c5761521b614459565b5b5f61522985828601614f18565b925050602061523a85828601614f18565b9150509250929050565b5f61524e82614606565b91505f82036152605761525f614d4b565b5b600182039050919050565b61527481614417565b82525050565b608082015f82015161528e5f850182615169565b5060208201516152a1602085018261526b565b5060408201516152b46040850182615178565b5060608201516152c76060850182615178565b50505050565b5f6080820190506152e05f83018461527a565b92915050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f61531e615319615314846152e6565b6152fb565b6152ef565b9050919050565b61532e81615304565b82525050565b5f6040820190506153475f830185615325565b6153546020830184614428565b9392505050565b5f60608201905061536e5f830186614428565b61537b6020830185615325565b6153886040830184614428565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6153d382614a1e565b6153dd81856153b9565b93506153ed818560208601614a38565b6153f681614465565b840191505092915050565b5f61540c83836153c9565b905092915050565b5f602082019050919050565b5f61542a82615390565b615434818561539a565b935083602082028501615446856153aa565b805f5b8581101561548157848403895281516154628582615401565b945061546d83615414565b925060208a01995050600181019050615449565b50829750879550505050505092915050565b5f6020820190508181035f8301526154ab8184615420565b905092915050565b5f67ffffffffffffffff8211156154cd576154cc614475565b5b602082029050602081019050919050565b5f6154f06154eb846154b3565b6144d3565b9050808382526020820190506020840283018581111561551357615512614518565b5b835b8181101561555a57805167ffffffffffffffff81111561553857615537614461565b5b8086016155458982614f6d565b85526020850194505050602081019050615515565b5050509392505050565b5f82601f83011261557857615577614461565b5b81516155888482602086016154de565b91505092915050565b5f602082840312156155a6576155a5614459565b5b5f82015167ffffffffffffffff8111156155c3576155c261445d565b5b6155cf84828501615564565b91505092915050565b5f6155e282614606565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361561457615613614d4b565b5b600182019050919050565b5f61562982614c6b565b915061563483614c6b565b925082820190506fffffffffffffffffffffffffffffffff81111561565c5761565b614d4b565b5b92915050565b7f416e74692d7768616c652073797374656d2061637469766500000000000000005f82015250565b5f615696601883614da8565b91506156a182615662565b602082019050919050565b5f6020820190508181035f8301526156c38161568a565b9050919050565b5f6080820190506156dd5f830187614428565b6156ea6020830186614428565b6156f76040830185614bf3565b6157046060830184614b6d565b95945050505050565b5f8151905061571b8161451c565b92915050565b5f6020828403121561573657615735614459565b5b5f6157438482850161570d565b91505092915050565b7f496e76616c6964000000000000000000000000000000000000000000000000005f82015250565b5f615780600783614da8565b915061578b8261574c565b602082019050919050565b5f6020820190508181035f8301526157ad81615774565b9050919050565b7f696e2076657374696e6720706572696f640000000000000000000000000000005f82015250565b5f6157e8601183614da8565b91506157f3826157b4565b602082019050919050565b5f6020820190508181035f830152615815816157dc565b9050919050565b5f61582682614606565b915061583183614606565b925082820261583f81614606565b9150828204841483151761585657615855614d4b565b5b5092915050565b7f4641524d494e473a205452414e534645525f4641494c454400000000000000005f82015250565b5f615891601883614da8565b915061589c8261585d565b602082019050919050565b5f6020820190508181035f8301526158be81615885565b9050919050565b5f6040820190506158d85f830185614428565b6158e56020830184614744565b9392505050565b5f6158f682614a1e565b6159008185614cd8565b9350615910818560208601614a38565b80840191505092915050565b5f61592782846158ec565b915081905092915050565b5f8115159050919050565b61594681615932565b8114615950575f80fd5b50565b5f815190506159618161593d565b92915050565b5f6020828403121561597c5761597b614459565b5b5f61598984828501615953565b91505092915050565b61599b81614be5565b82525050565b6159aa81614ad4565b82525050565b61016082015f8201516159c55f85018261526b565b5060208201516159d8602085018261526b565b5060408201516159eb6040850182615992565b5060608201516159fe60608501826159a1565b506080820151615a1160808501826159a1565b5060a0820151615a2460a0850182615169565b5060c0820151615a3760c0850182615169565b5060e0820151615a4a60e0850182615169565b50610100820151615a5f610100850182615169565b50610120820151615a7461012085018261526b565b50610140820151615a89610140850182615169565b50505050565b5f61016082019050615aa35f8301846159b0565b92915050565b615ab281614c6b565b8114615abc575f80fd5b50565b5f81519050615acd81615aa9565b92915050565b5f805f8060808587031215615aeb57615aea614459565b5b5f615af887828801614f18565b9450506020615b0987828801615abf565b9350506040615b1a87828801614f18565b9250506060615b2b87828801614f18565b91505092959194509250565b60c082015f820151615b4b5f850182615169565b506020820151615b5e6020850182615169565b506040820151615b716040850182615169565b506060820151615b846060850182615169565b506080820151615b976080850182615169565b5060a0820151615baa60a0850182615169565b50505050565b5f60c082019050615bc35f830184615b37565b92915050565b5f805f60608486031215615be057615bdf614459565b5b5f615bed86828701615abf565b9350506020615bfe86828701614f18565b9250506040615c0f86828701614f18565b9150509250925092565b5f60208284031215615c2e57615c2d614459565b5b5f615c3b84828501614f18565b91505092915050565b7f64732d6d6174682d6164642d6f766572666c6f770000000000000000000000005f82015250565b5f615c78601483614da8565b9150615c8382615c44565b602082019050919050565b5f6020820190508181035f830152615ca581615c6c565b9050919050565b7f64732d6d6174682d7375622d756e646572666c6f7700000000000000000000005f82015250565b5f615ce0601583614da8565b9150615ceb82615cac565b602082019050919050565b5f6020820190508181035f830152615d0d81615cd4565b9050919050565b7f64732d6d6174682d6d756c2d6f766572666c6f770000000000000000000000005f82015250565b5f615d48601483614da8565b9150615d5382615d14565b602082019050919050565b5f6020820190508181035f830152615d7581615d3c565b9050919050565b7f70657263656e74616765000000000000000000000000000000000000000000005f82015250565b5f615db0600a83614da8565b9150615dbb82615d7c565b602082019050919050565b5f6020820190508181035f830152615ddd81615da4565b905091905056fea264697066735822122097acec69a57de94181cda30ab7ed6376a1914ac8baa163b7852f28988f3ec7d964736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005a46c3a544d160f39a96036a88ad09f95035a892000000000000000000000000bc5052b0aa6149fe86747cb7e99524f56fb6402a000000000000000000000000fad75c63c3817f1931357aec9a7736bb8067a1d90000000000000000000000000000000000000000000000000000000000000003000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000183d3e95f01af549e542b2e000000000000000000000000000000000000000000000000006a94d74f430000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f38ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4868
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x5a46c3A544d160F39A96036A88ad09f95035A892
Arg [1] : _destinationAddress (address): 0xBC5052B0aa6149fe86747cb7e99524F56FB6402a
Arg [2] : _conversionAddress (address): 0xfAd75C63C3817f1931357AEc9A7736Bb8067a1d9
Arg [3] : _farmingDuration (uint256): 3
Arg [4] : _uniswapV3NonfungiblePositionsManager (address): 0xC36442b4a4522E871399CD717aBDD847Ab11FE88
Arg [5] : _uniswapV3SwapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [6] : _fee (uint24): 10000
Arg [7] : _sqrtPriceX96 (uint160): 468855016456061846625200942
Arg [8] : _priceSlippagePercentage (uint256): 30000000000000000
Arg [9] : _tickLower (int24): -102600
Arg [10] : _tickUpper (int24): -47000
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000005a46c3a544d160f39a96036a88ad09f95035a892
Arg [1] : 000000000000000000000000bc5052b0aa6149fe86747cb7e99524f56fb6402a
Arg [2] : 000000000000000000000000fad75c63c3817f1931357aec9a7736bb8067a1d9
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88
Arg [5] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [6] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [7] : 00000000000000000000000000000000000000000183d3e95f01af549e542b2e
Arg [8] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [9] : fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6f38
Arg [10] : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4868
Deployed Bytecode Sourcemap
30840:13271:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32947:10;:8;:10::i;:::-;30840:13271;;;;;31318:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37769:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31713:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10452:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32973:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31407:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31866:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11089:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33166:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31820:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10863:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33300:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31938:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40874:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31250:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10535:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31542:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31513;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37282:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31168:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1179:106;;;;;;;;;;;;;:::i;:::-;;30944:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38084:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31571:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31604:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38410:2456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;10315:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1079:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31469:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10263:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10572:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11328:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34042:1024;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35843:1241;;;;;;;;;;;;;:::i;:::-;;31369:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37182:92;;;;;;;;;;;;;:::i;:::-;;31781:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31200:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10373:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11751:151;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33487:547;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31435:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10503:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35074:761;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1293:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31897:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10419:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31752:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31651:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;24709:183;24785:1;24762:25;;:11;;;;;;;;;;;:25;;;24754:34;;;;;;24825:1;24818:9;;24807:20;;;:7;;;;:20;;;;24799:29;;;;;;24870:13;24857:8;;24847:19;;;;;;;:::i;:::-;;;;;;;;:36;24839:45;;;;;;24709:183::o;31318:44::-;;;:::o;37769:307::-;37905:21;37928:27;37957:23;37133:21;:19;:21::i;:::-;38000:68:::1;38013:10;38025:15;38042:25;38000:12;:68::i;:::-;37993:75;;;;;;37769:307:::0;;;;;:::o;31713:30::-;;;;:::o;10452:44::-;;;;:::o;32973:185::-;33062:6;33100:1;33089:7;;:12;33081:21;;;;;;33120:30;;;33113:37;;32973:185;;;;;;;:::o;31407:19::-;;;;;;;;;;;;;:::o;31866:22::-;;;;:::o;11089:113::-;11135:7;10304:4;11162:15;;:32;;;;:::i;:::-;11155:39;;11089:113;:::o;33166:126::-;310:8;:6;:8::i;:::-;296:22;;:10;:22;;;288:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;33276:8:::1;33250:23;:34;;;;33166:126:::0;:::o;31820:37::-;;;;:::o;10863:36::-;;;;:::o;33300:179::-;33375:16;310:8;:6;:8::i;:::-;296:22;;:10;:22;;;288:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;33415:17:::1;;;;;;;;;;;33404:28;;33463:8;33443:17;;:28;;;;;;;;;;;;;;;;;;33300:179:::0;;;:::o;31938:28::-;;;;:::o;40874:425::-;40942:24;40968;40994:29;41093:32;:44;41138:15;41155:36;41193:5;;;;;;;;;;;41200:4;41206:7;;41215:17;;;;;;;;;;;41234:3;41239:19;41093:166;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41036:223;;;;;;;;;;;;41270:21;:19;:21::i;:::-;40874:425;;;;;:::o;31250:61::-;;;:::o;10535:30::-;;;;:::o;31542:22::-;;;;;;;;;;;;;:::o;31513:::-;;;;;;;;;;;;;:::o;37282:479::-;37364:16;37133:21;:19;:21::i;:::-;37433:10:::1;37401:42;;37413:15;;;;;;;;;;;37402:26;;;37401:42;;;37393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37489:8;37471:15;;:26;;;;;;;;;;;;;;;;;;37508:75;37514:8;37524;37534:1;37537:22;;37561:21;;37508:5;:75::i;:::-;;37594:32;37643:1;37629:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37594:51;;37677:8;37656:15;37672:1;37656:18;;;;;;;;:::i;:::-;;;;;;;:29;;;;;;;;;::::0;::::1;37696:57;37709:8;37719:15;37750:1;37736:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37696:12;:57::i;:::-;;;;37382:379;37282:479:::0;;;:::o;31168:23::-;;;;:::o;1179:106::-;310:8;:6;:8::i;:::-;296:22;;:10;:22;;;288:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1247:30:::1;1274:1;1247:18;:30::i;:::-;1179:106::o:0;30944:50::-;30987:7;30944:50;:::o;38084:318::-;38160:21;38183:27;38212:23;37133:21;:19;:21::i;:::-;38248:32:::1;38297:1;38283:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38248:51;;38317:77;38351:7;38330:15;38346:1;38330:18;;;;;;;;:::i;:::-;;;;;;;:28;;;;;;;;;::::0;38360:15:::1;38391:1;38377:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38317:12;:77::i;:::-;38310:84;;;;;;;38084:318:::0;;;;;:::o;31571:26::-;;;;:::o;31604:38::-;;;;:::o;38410:2456::-;38530:15;38547;37133:21;:19;:21::i;:::-;38575:40:::1;38618:10;:22;38629:10;38618:22;;;;;;;;;;;;;;;38575:65;;38697:1;38659:16;:34;;;;;;;;;;;;:39;;::::0;38651:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38729:20;38752:16;:29;;;38729:52;;38824:1;38792:16;:29;;:33;;;;38865:1;38836:16;:26;;:30;;;;38896:1;38880:12;:17;38877:95;;38914:46;38928:5;;;;;;;;;;;38935:10;38947:12;38914:13;:46::i;:::-;38877:95;38982:10;39016:17:::0;39070:1:::1;39051:15;;:20:::0;39048:282:::1;;39093:15;;;;;;;;;;;39088:20;;39149:16;:31;;;39123:22;;:57;;;;;;;:::i;:::-;;;;;;;;39207:22;;39195:34;;39048:282;;;39287:16;:31;;;39262:21;;:56;;;;;;;:::i;:::-;;;;;;;;39048:282;39340:92;39346:10;39358:2;39396:1;39362:16;:31;;:35;;;39399:9;39410:21;;39340:5;:92::i;:::-;;39443:32;39492:1;39478:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39443:51;;39526:10;39505:15;39521:1;39505:18;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;39547:59;39560:10;39572:15;39603:1;39589:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39547:12;:59::i;:::-;;;;39619:19;39653:1;39641:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39619:36;;39666:54;39751:36;39666:122;;39822:26;:44;;;39867:277;;;;;;;;39943:7;;39867:277;;;;39976:16;:34;;;;;;;;;;;;39867:277;;;;;;40037:10;39867:277;;;;40074:10;39867:277;;;;40128:4;40110:15;:22;;;;:::i;:::-;39867:277;;::::0;39822:323:::1;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39801:344;;;;;;;;40165:10;:22;40176:10;40165:22;;;;;;;;;;;;;;;;40158:29:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40198:8;;:10;;;;;;;;;:::i;:::-;;;;;;40254:43;;;40299:207;;;;;;;;40365:7;;40299:207;;;;40406:1;40299:207;;;;;;40443:7;40299:207;;;;;;40486:7;40299:207;;;;::::0;40231:276:::1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40221:4;40226:1;40221:7;;;;;;;;:::i;:::-;;;;;;;:286;;;;40551:47;;;40600:1;40603:10;40528:86;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40518:4;40523:1;40518:7;;;;;;;;:::i;:::-;;;;;;;:96;;;;40658:46;;;40706:5;;;;;;;;;;;40713:1;40716:10;40635:92;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40625:4;40630:1;40625:7;;;;;;;;:::i;:::-;;;;;;;:102;;;;40781:36;40770:58;;;40829:4;40770:64;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40835:1;40770:67;;;;;;;;:::i;:::-;;;;;;;;40759:99;;;;;;;;;;;;:::i;:::-;40738:120;;;;;;;;38564:2302;;;;;;;38410:2456:::0;;;;;:::o;10315:49::-;10362:2;10315:49;:::o;1079:92::-;1128:7;1155:8;:6;:8::i;:::-;1148:15;;1079:92;:::o;31469:37::-;;;:::o;10263:45::-;10304:4;10263:45;:::o;10572:33::-;;;;:::o;11328:115::-;11375:7;10304:4;11402:16;;:33;;;;:::i;:::-;11395:40;;11328:115;:::o;34042:1024::-;34184:5;;;;;;;;;;;34170:19;;:10;:19;;;34162:28;;;;;;34203:35;34228:9;34203:24;:35::i;:::-;34266:9;34249:13;;:26;;;;;;;:::i;:::-;;;;;;;;34288:40;34331:10;:19;34342:7;34331:19;;;;;;;;;;;;;;;34288:62;;34394:1;34364:16;:26;;;:31;34361:73;;34412:8;;:10;;;;;;;;;:::i;:::-;;;;;;34361:73;34476:9;34446:16;:26;;;:39;;;;;;;:::i;:::-;;;;;;;;34499:17;34518:23;34545:32;34570:6;34545:24;:32::i;:::-;34498:79;;;;34600:12;34590:22;;;;;:::i;:::-;;;34673:15;34658:12;:30;;;;:::i;:::-;34625:16;:29;;;:63;;;;;;;:::i;:::-;;;;;;;;34737:9;34699:16;:34;;;:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34794:6;34759:16;:31;;;:41;;;;;;;:::i;:::-;;;;;;;;34836:6;34811:21;;:31;;;;;;;:::i;:::-;;;;;;;;9039:10;34861:16;:31;;;:70;;34853:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:85;34987:1;34991:7;35000:1;35003:16;:31;;;35036:21;;34973:5;:85::i;:::-;;34149:917;;;34042:1024;;;:::o;35843:1241::-;35894:40;35937:10;:22;35948:10;35937:22;;;;;;;;;;;;;;;35894:65;;35970:20;35993:16;:29;;;35970:52;;36033:17;36053:16;:26;;;36033:46;;36114:1;36098:12;:17;;:35;;;;;36132:1;36119:9;:14;;36098:35;36090:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36196:1;36164:16;:29;;:33;;;;36237:1;36208:16;:26;;:30;;;;36249:32;36298:1;36284:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36249:51;;36329:1;36314:11;;:16;:49;;;;36352:11;;36334:15;:29;36314:49;36311:696;;;36380:35;36405:9;36380:24;:35::i;:::-;36447:9;36430:13;;:26;;;;;;;:::i;:::-;;;;;;;;36471:48;36493:1;36497:10;36509:9;36471:13;:48::i;:::-;36534:30;36544:5;;;;;;;;;;;36551:12;36534:9;:30::i;:::-;36604:16;:31;;;36579:21;;:56;;;;;;;:::i;:::-;;;;;;;;36650:92;36656:10;36676:1;36714;36680:16;:31;;:35;;;36717:1;36720:21;;36650:5;:92::i;:::-;;36778:15;;;;;;;;;;;36757;36773:1;36757:18;;;;;;;;:::i;:::-;;;;;;;:36;;;;;;;;;;;36815:10;:22;36826:10;36815:22;;;;;;;;;;;;;;;;36808:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36852:8;;:10;;;;;;;;;:::i;:::-;;;;;;36311:696;;;36895:67;36909:5;;;;;;;;;;;36937:10;36916:15;36932:1;36916:18;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;36949:12;36895:13;:67::i;:::-;36977:18;:16;:18::i;:::-;36311:696;37017:59;37030:10;37042:15;37073:1;37059:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37017:12;:59::i;:::-;;;;35883:1201;;;;35843:1241::o;31369:29::-;;;:::o;37182:92::-;37133:21;:19;:21::i;:::-;37247:19:::1;:17;:19::i;:::-;37182:92::o:0;31781:30::-;;;;;;;;;;;;;:::o;31200:43::-;;;:::o;10373:39::-;;;;;;;;;;;;:::o;11751:151::-;11813:20;11853:41;11883:10;;;;;;;;;;;11853:29;:41::i;:::-;11846:48;;11751:151;:::o;33487:547::-;33571:23;33632:1;33615:19;;:5;;;;;;;;;;;:19;;;33607:28;;;;;;33664:16;33646:15;;:34;;;;;;;;;;;;;;;;;;33691:21;33738:4;33715:27;;33724:10;33716:5;;:18;;;;;;;;;;;;;;;;;33715:27;;;:35;;33749:1;33715:35;;;33745:1;33715:35;33691:59;;;;33792:36;33775:89;;;33896:1;33879:13;:18;:38;;33913:4;33879:38;;;33900:10;33879:38;33949:1;33932:13;:18;:38;;33966:4;33932:38;;;33953:10;33932:38;33985:3;34003:12;33775:251;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33768:4;;:258;;;;;;;;;;;;;;;;;33761:265;;;33487:547;;;:::o;31435:27::-;;;:::o;10503:25::-;;;;:::o;35074:761::-;35226:5;;;;;;;;;;;35212:19;;:10;:19;;;35204:28;;;;;;35257:12;35243:11;:26;;;;35282:23;35309:63;35352:19;35334:15;:37;;;;:::i;:::-;35309:24;:63::i;:::-;35280:92;;;35404:1;35386:15;:19;35383:84;;;35422:33;35432:5;;;;;;;;;;;35439:15;35422:9;:33::i;:::-;35383:84;35505:15;35479:22;;:41;;;;;;;:::i;:::-;;;;;;;;35556:15;35531:21;;:40;;;;;;;:::i;:::-;;;;;;;;35582:32;35631:1;35617:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35582:51;;35644:105;35658:1;35683:15;;;;;;;;;;;35662;35678:1;35662:18;;;;;;;;:::i;:::-;;;;;;;:36;;;;;;;;;;35700:1;35703:22;;35727:21;;35644:5;:105::i;:::-;;35760:67;35773:15;35789:1;35773:18;;;;;;;;:::i;:::-;;;;;;;;35793:15;35824:1;35810:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35760:12;:67::i;:::-;;;;35193:642;;35074:761;;;:::o;1293:173::-;310:8;:6;:8::i;:::-;296:22;;:10;:22;;;288:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1405:1:::1;1385:22;;:8;:22;;::::0;1377:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1430:28;1449:8;1430:18;:28::i;:::-;1293:173:::0;:::o;31897:32::-;;;;;;;;;;;;;:::o;10419:26::-;;;;;;;;;;;;;:::o;31752:20::-;;;;;;;;;;;;;:::o;31651:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43507:601::-;43580:1;43565:11;;:16;;:50;;;;;43604:11;;43585:15;:30;;43565:50;43557:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43648:19;:17;:19::i;:::-;43703:1;43681:18;;:23;;:64;;;;;43727:18;;43708:15;:37;;43681:64;:88;;;;;43768:1;43749:15;;:20;;43681:88;43678:265;;;10362:2;43883:1;43877;43858:15;;:20;;;;;;;:::i;:::-;;;;;;;43857:27;:49;;43891:15;;43857:49;;;43887:1;43857:49;43839:15;:67;;;30987:7;43819:88;;;;:::i;:::-;43818:113;;;;:::i;:::-;43786:29;:145;;;;43678:265;43953:32;44002:1;43988:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43953:51;;44015:85;44049:15;;;;;;;;;;;44028;44044:1;44028:18;;;;;;;;:::i;:::-;;;;;;;:36;;;;;;;;;;44066:15;44097:1;44083:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44015:12;:85::i;:::-;;;;43546:562;43507:601::o;11910:591::-;12044:21;12067:27;12096:23;12132:25;12160:10;:19;12171:7;12160:19;;;;;;;;;;;;;;;:40;;;12132:68;;12252:63;12266:14;:12;:14::i;:::-;12306:1;12282:20;:25;12309:5;12252:13;:63::i;:::-;12211:104;;;;;;;;12342:151;12370:7;12392:20;12427:15;12457:25;12342:13;:151::i;:::-;12326:167;;12121:380;11910:591;;;;;;;:::o;363:134::-;404:13;469:9;463:16;454:25;;363:134;:::o;12588:762::-;12808:27;12875:53;12889:24;12915:5;12922;12875:13;:53::i;:::-;12850:78;;;;;12941:36;12994:1;12980:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12941:55;;13007:46;13070:1;13056:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13007:65;;13105:1;13089:18;;:4;:18;;;13085:126;;13109:102;13123:4;13129:29;13160:19;13181:29;13109:13;:102::i;:::-;;13085:126;13240:1;13226:16;;:2;:16;;;13222:120;;13244:98;13258:2;13262:27;13291:19;13312:29;13244:13;:98::i;:::-;;13222:120;12837:513;;12588:762;;;;;;;:::o;1474:228::-;1539:16;1558:8;:6;:8::i;:::-;1539:27;;1619:8;1608:9;1601:27;1685:8;1654:40;;1675:8;1654:40;;;;;;;;;;;;1528:174;1474:228;:::o;20837:701::-;20941:1;20932:5;:10;20929:48;20959:7;20929:48;21004:4;20990:19;;:2;:19;;;20987:57;21026:7;20987:57;21081:1;21057:26;;:12;:26;;;21054:135;;21108:19;21117:2;21121:5;21108:8;:19::i;:::-;21100:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;21171:7;;21054:135;21216:1;21202:16;;:2;:16;;;21199:85;;21242:30;21252:12;21266:5;21242:9;:30::i;:::-;21235:37;;21199:85;21295:12;21309:17;21330:12;:17;;21371:41;;;21414:2;21418:5;21348:76;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21330:95;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21294:131;;;;21444:7;:57;;;;;21471:1;21456:4;:11;:16;:44;;;;21487:4;21476:24;;;;;;;;;;;;:::i;:::-;21456:44;21444:57;21436:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;20918:620;;20837:701;;;;:::o;11451:142::-;11540:45;10304:4;11561:6;:23;;;;:::i;:::-;11540:16;;:20;;:45;;;;:::i;:::-;11521:16;:64;;;;11451:142;:::o;41307:1881::-;41373:17;41392:23;41430:21;41462:4;41454:12;;:5;;;;;;;;;;;:12;;;:20;;41473:1;41454:20;;;41469:1;41454:20;41430:44;;;;41501:5;;;;;;;;;;;41487:28;;;41516:36;41554:6;41487:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41575:15;41592;41628:1;41611:13;:18;:64;;41664:1;41668:6;41611:64;;;41633:6;41649:1;41611:64;41574:101;;;;41702:1;41691:7;;:12;41688:1413;;41789:36;41761:70;;;41832:663;;;;;;;;41915:1;41898:13;:18;:33;;41927:4;41898:33;;;41919:5;;;;;;;;;;;41898:33;41832:663;;;;;;41975:1;41958:13;:18;:33;;41987:4;41958:33;;;41979:5;;;;;;;;;;;41958:33;41832:663;;;;;;42015:3;41832:663;;;;;;42048:9;;;;;;;;;;;41832:663;;;;;;42087:9;;;;;;;;;;;41832:663;;;;;;42131:7;41832:663;;;;42173:7;41832:663;;;;42211:71;42232:7;42258:23;;10304:4;42241:40;;;;:::i;:::-;42211:20;:71::i;:::-;41832:663;;;;42313:71;42334:7;42360:23;;10304:4;42343:40;;;;:::i;:::-;42313:20;:71::i;:::-;41832:663;;;;42422:4;41832:663;;;;;;42474:5;42456:15;:23;;;;:::i;:::-;41832:663;;;41761:735;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41721:7;;41720:776;;;;;;;;;;;;;;;;;;41688:1413;;;42589:36;42561:83;;;42645:443;;;;;;;;42725:7;;42645:443;;;;42767:7;42645:443;;;;42809:7;42645:443;;;;42847:71;42868:7;42894:23;;10304:4;42877:40;;;;:::i;:::-;42847:20;:71::i;:::-;42645:443;;;;42949:71;42970:7;42996:23;;10304:4;42979:40;;;;:::i;:::-;42949:20;:71::i;:::-;42645:443;;;;43067:5;43049:15;:23;;;;:::i;:::-;42645:443;;;42561:528;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42529:560;;;;;;;;;;;;41688:1413;43157:1;43140:13;:18;:38;;43171:7;43140:38;;;43161:7;43140:38;43130:6;:49;;;;:::i;:::-;43111:69;;41417:1771;;;41307:1881;;;:::o;11601:142::-;11690:45;10304:4;11711:6;:23;;;;:::i;:::-;11690:16;;:20;;:45;;;;:::i;:::-;11671:16;:64;;;;11601:142;:::o;21546:1199::-;21628:11;21641:23;21668:17;:22;;21714:10;21726:5;21691:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21668:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21627:106;;;;21768:6;:68;;;;;21800:1;21779:10;:17;:22;:56;;;;21816:10;21805:30;;;;;;;;;;;;:::i;:::-;21779:56;21768:68;21759:77;;21851:6;21847:269;;21897:17;:22;;21943:48;;;22001:1;22005:5;21920:91;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21897:115;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21874:138;;;;;;;;22036:6;:68;;;;;22068:1;22047:10;:17;:22;:56;;;;22084:10;22073:30;;;;;;;;;;;;:::i;:::-;22047:56;22036:68;22027:77;;21847:269;22130:6;22126:301;;22176:17;:22;;22222:48;;;22272:42;22316:5;22199:123;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22176:147;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22153:170;;;;;;;;22347:6;:68;;;;;22379:1;22358:10;:17;:22;:56;;;;22395:10;22384:30;;;;;;;;;;;;:::i;:::-;22358:56;22347:68;22338:77;;22126:301;22441:6;22437:301;;22487:17;:22;;22533:48;;;22583:42;22627:5;22510:123;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22487:147;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22464:170;;;;;;;;22658:6;:68;;;;;22690:1;22669:10;:17;:22;:56;;;;22706:10;22695:30;;;;;;;;;;;;:::i;:::-;22669:56;22658:68;22649:77;;22437:301;21616:1129;;21546:1199;;:::o;43196:303::-;43244:22;43269:13;;43244:38;;43314:1;43296:14;:19;43293:199;;43348:1;43332:13;:17;;;;43364:40;43389:14;43364:24;:40::i;:::-;43419:61;43441:1;43445:18;43465:14;43419:13;:61::i;:::-;43293:199;43233:266;43196:303::o;24062:222::-;24134:20;24182:10;;;;;;;;;;;:20;;;;;24197:5;24196:6;24182:20;:94;;24209:67;24259:16;;24210:43;10304:4;24210:23;24221:11;;;;;;;;;;;24210:10;:23::i;:::-;:27;;:43;;;;:::i;:::-;24209:49;;:67;;;;:::i;:::-;24182:94;;;24205:1;24182:94;24167:109;;24062:222;;;:::o;23757:297::-;23803:7;23823:33;23859:24;;;;;;;;;;23823:60;;23938:4;23901:42;;:25;:42;;;:145;;23996:25;23970:74;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23901:145;;;23946:21;;23901:145;23894:152;;;23757:297;:::o;13661:3642::-;13761:27;13790:23;13947;13973:15;13947:41;;13999:40;14042:33;;13999:76;;14086:19;14108:10;;14086:32;;14129:24;14156:15;;14129:42;;14261:18;;14239:40;;14308:15;;14290:33;;14452:1;14429:19;:24;14426:788;;14470:20;14511:19;14493:15;:37;:77;;14551:19;14493:77;;;14533:15;14493:77;14470:100;;14797:7;14796:8;:49;;;;;14844:1;14808:32;:37;;14796:49;14793:410;;;14866:31;14919:11;14900:16;:30;:63;;14947:16;14900:63;;;14933:11;14900:63;14866:97;;15006:132;15105:32;15033:68;15085:15;15036:41;15053:23;15036:12;:16;;:41;;;;:::i;:::-;15033:51;;:68;;;;:::i;:::-;15032:105;;;;:::i;:::-;15006:21;;:25;;:132;;;;:::i;:::-;14982:21;:156;;;;15175:12;15157:15;:30;;;;14847:356;14793:410;14455:759;14426:788;15262:24;15226:33;:60;;;;15354:5;:47;;;;15382:19;15363:15;:38;;15354:47;:80;;;;15433:1;15405:24;:29;15354:80;15351:1668;;;15451:24;15478:16;;15451:43;;15537:15;15515:19;:37;15511:186;;;15592:89;15614:65;15663:15;15616:40;15640:15;15616:19;:23;;:40;;;;:::i;:::-;15614:48;;:65;;;;:::i;:::-;15592:16;:20;;:89;;;;:::i;:::-;15573:108;;15511:186;15811:1;15793:15;:19;;;;15900:1;15886:15;;15938:1;15916:23;;15972:1;15954:19;;15990:20;16013:36;16043:5;16013:29;:36::i;:::-;15990:59;;16220:1;16205:12;:16;:49;;;;;16253:1;16225:24;:29;;16205:49;16202:469;;;16275:34;16312:55;10362:2;16312:29;;:33;;:55;;;;:::i;:::-;16275:92;;16402:15;16388:29;;16455:34;16476:12;16455:16;:20;;:34;;;;:::i;:::-;16436:53;;16530:47;16550:26;16530:15;:19;;:47;;;;:::i;:::-;16508:69;;16629:26;16614:12;:41;;;;:::i;:::-;16596:59;;16256:415;16202:469;16776:11;16763:10;:24;;;;16821:16;16802;:35;;;;16873:19;16852:18;:40;;;;16925:15;16907;:33;;;;16957:48;16985:19;16957:27;:48::i;:::-;15436:1583;;15351:1668;10304:4;17261:15;:32;;;;:::i;:::-;17243:50;;13815:3488;;;;13661:3642;;;;;;:::o;17694:1580::-;17864:21;17898:31;17932:10;:19;17943:7;17932:19;;;;;;;;;;;;;;;17898:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18048:67;18081:33;18106:7;18081:24;:33::i;:::-;18048:8;:28;;;:32;;:67;;;;:::i;:::-;18017:8;:28;;:98;;;;;18158:25;18126:8;:29;;:57;;;;;18224:21;;18194:8;:27;;:51;;;;;18305:66;18328:15;18345:25;18305:22;:66::i;:::-;18301:858;;;10304:4;18495:8;:28;;;:45;;;;:::i;:::-;18479:61;;18577:1;18561:13;:17;18557:591;;;18599:21;18800:71;18837:33;10304:4;18837:13;:17;;:33;;;;:::i;:::-;18821:49;;;18800:16;;:20;;:71;;;;:::i;:::-;18781:16;:90;;;;18921:47;18954:13;18921:8;:28;;;:32;;:47;;;;:::i;:::-;18890:8;:28;;:78;;;;;19058:74;19074:13;19089:15;19106:25;19058:15;:74::i;:::-;18580:568;18557:591;18301:858;19258:8;19236:10;:19;19247:7;19236:19;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;17887:1387;17694:1580;;;;;;:::o;22753:187::-;22814:4;22898:1;22895;22892;22889;22882:5;22878:2;22871:5;22866:34;22840:71;22928:4;22921:11;;22753:187;;;;:::o;9437:128::-;9489:6;9531:1;9525;9521;:5;;;;:::i;:::-;9517:9;;;9516:16;;9508:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;9437:128;;;;:::o;20651:178::-;20739:7;20817:4;10304;20790;20777:10;:17;;;;:::i;:::-;20776:36;;;;:::i;:::-;20767:5;:46;;;;:::i;:::-;20766:55;;;;:::i;:::-;20759:62;;20651:178;;;;:::o;9573:129::-;9625:6;9667:1;9661;9657;:5;;;;:::i;:::-;9653:9;;;9652:16;;9644:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;9573:129;;;;:::o;22948:201::-;23011:7;23062:1;23038:26;;:12;:26;;;:103;;23103:12;23091:35;;;23135:4;23091:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23038:103;;;23067:21;23038:103;23031:110;;22948:201;;;:::o;9710:142::-;9762:6;9794:1;9789;:6;:30;;;;9818:1;9813;9808;9804;:5;;;;:::i;:::-;9800:9;;;9799:15;;;;:::i;:::-;:20;9789:30;9781:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9710:142;;;;:::o;23157:592::-;23245:16;;;;;;;;;;;23278:7;23242:54;23368:33;23404:24;;;;;;;;;;;23368:60;;23593:25;23579:39;;:10;:39;;;23576:166;;23661:25;23635:74;;;23710:19;23635:95;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23576:166;23231:518;23157:592;;:::o;17376:229::-;17448:14;17484:113;17556:10;:19;17567:7;17556:19;;;;;;;;;;;;;;;:40;;;17485:65;17511:10;:19;17522:7;17511:19;;;;;;;;;;;;;;;:38;;;17485:21;;:25;;:65;;;;:::i;:::-;17484:71;;:113;;;;:::i;:::-;17475:122;;17376:229;;;:::o;19915:728::-;20046:4;20092:1;20066:15;:22;:27;20063:71;;20117:5;20110:12;;;;20063:71;20214:1;20189:15;:22;:26;;;;:::i;:::-;20152:25;:32;:64;20144:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;20242:23;10304:4;20242:40;;20297:9;20293:267;20316:25;:32;20312:1;:36;20293:267;;;20370:18;20391:25;20417:1;20391:28;;;;;;;;:::i;:::-;;;;;;;;20370:49;;20456:1;20442:10;:15;;:47;;;;;20474:15;20461:10;:28;20442:47;20434:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20538:10;20519:29;;;;;:::i;:::-;;;20355:205;20350:3;;;;;;;20293:267;;;;20597:1;20578:15;:20;20570:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20631:4;20624:11;;;19915:728;;;;;:::o;19282:625::-;19427:20;19450:11;;;;;;;;;;;19427:34;;19472:23;19498:13;19472:39;;19526:9;19522:278;19545:25;:32;19541:1;:36;19522:278;;;19599:13;19615:65;19636:13;19651:25;19677:1;19651:28;;;;;;;;:::i;:::-;;;;;;;;19615:20;:65::i;:::-;19599:81;;19695:54;19709:12;19723:15;19739:1;19723:18;;;;;;;;:::i;:::-;;;;;;;;19743:5;19695:13;:54::i;:::-;19783:5;19764:24;;;;;:::i;:::-;;;19584:216;19579:3;;;;;;;19522:278;;;;19810:89;19824:12;19838:15;19879:1;19854:15;:22;:26;;;;:::i;:::-;19838:43;;;;;;;;:::i;:::-;;;;;;;;19883:15;19810:13;:89::i;:::-;19416:491;;19282:625;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:75::-;626:6;659:2;653:9;643:19;;593:75;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:117;1029:1;1026;1019:12;1043:102;1084:6;1135:2;1131:7;1126:2;1119:5;1115:14;1111:28;1101:38;;1043:102;;;:::o;1151:180::-;1199:77;1196:1;1189:88;1296:4;1293:1;1286:15;1320:4;1317:1;1310:15;1337:281;1420:27;1442:4;1420:27;:::i;:::-;1412:6;1408:40;1550:6;1538:10;1535:22;1514:18;1502:10;1499:34;1496:62;1493:88;;;1561:18;;:::i;:::-;1493:88;1601:10;1597:2;1590:22;1380:238;1337:281;;:::o;1624:129::-;1658:6;1685:20;;:::i;:::-;1675:30;;1714:33;1742:4;1734:6;1714:33;:::i;:::-;1624:129;;;:::o;1759:311::-;1836:4;1926:18;1918:6;1915:30;1912:56;;;1948:18;;:::i;:::-;1912:56;1998:4;1990:6;1986:17;1978:25;;2058:4;2052;2048:15;2040:23;;1759:311;;;:::o;2076:117::-;2185:1;2182;2175:12;2199:122;2272:24;2290:5;2272:24;:::i;:::-;2265:5;2262:35;2252:63;;2311:1;2308;2301:12;2252:63;2199:122;:::o;2327:139::-;2373:5;2411:6;2398:20;2389:29;;2427:33;2454:5;2427:33;:::i;:::-;2327:139;;;;:::o;2489:710::-;2585:5;2610:81;2626:64;2683:6;2626:64;:::i;:::-;2610:81;:::i;:::-;2601:90;;2711:5;2740:6;2733:5;2726:21;2774:4;2767:5;2763:16;2756:23;;2827:4;2819:6;2815:17;2807:6;2803:30;2856:3;2848:6;2845:15;2842:122;;;2875:79;;:::i;:::-;2842:122;2990:6;2973:220;3007:6;3002:3;2999:15;2973:220;;;3082:3;3111:37;3144:3;3132:10;3111:37;:::i;:::-;3106:3;3099:50;3178:4;3173:3;3169:14;3162:21;;3049:144;3033:4;3028:3;3024:14;3017:21;;2973:220;;;2977:21;2591:608;;2489:710;;;;;:::o;3222:370::-;3293:5;3342:3;3335:4;3327:6;3323:17;3319:27;3309:122;;3350:79;;:::i;:::-;3309:122;3467:6;3454:20;3492:94;3582:3;3574:6;3567:4;3559:6;3555:17;3492:94;:::i;:::-;3483:103;;3299:293;3222:370;;;;:::o;3598:311::-;3675:4;3765:18;3757:6;3754:30;3751:56;;;3787:18;;:::i;:::-;3751:56;3837:4;3829:6;3825:17;3817:25;;3897:4;3891;3887:15;3879:23;;3598:311;;;:::o;3915:77::-;3952:7;3981:5;3970:16;;3915:77;;;:::o;3998:122::-;4071:24;4089:5;4071:24;:::i;:::-;4064:5;4061:35;4051:63;;4110:1;4107;4100:12;4051:63;3998:122;:::o;4126:139::-;4172:5;4210:6;4197:20;4188:29;;4226:33;4253:5;4226:33;:::i;:::-;4126:139;;;;:::o;4288:710::-;4384:5;4409:81;4425:64;4482:6;4425:64;:::i;:::-;4409:81;:::i;:::-;4400:90;;4510:5;4539:6;4532:5;4525:21;4573:4;4566:5;4562:16;4555:23;;4626:4;4618:6;4614:17;4606:6;4602:30;4655:3;4647:6;4644:15;4641:122;;;4674:79;;:::i;:::-;4641:122;4789:6;4772:220;4806:6;4801:3;4798:15;4772:220;;;4881:3;4910:37;4943:3;4931:10;4910:37;:::i;:::-;4905:3;4898:50;4977:4;4972:3;4968:14;4961:21;;4848:144;4832:4;4827:3;4823:14;4816:21;;4772:220;;;4776:21;4390:608;;4288:710;;;;;:::o;5021:370::-;5092:5;5141:3;5134:4;5126:6;5122:17;5118:27;5108:122;;5149:79;;:::i;:::-;5108:122;5266:6;5253:20;5291:94;5381:3;5373:6;5366:4;5358:6;5354:17;5291:94;:::i;:::-;5282:103;;5098:293;5021:370;;;;:::o;5397:894::-;5515:6;5523;5572:2;5560:9;5551:7;5547:23;5543:32;5540:119;;;5578:79;;:::i;:::-;5540:119;5726:1;5715:9;5711:17;5698:31;5756:18;5748:6;5745:30;5742:117;;;5778:79;;:::i;:::-;5742:117;5883:78;5953:7;5944:6;5933:9;5929:22;5883:78;:::i;:::-;5873:88;;5669:302;6038:2;6027:9;6023:18;6010:32;6069:18;6061:6;6058:30;6055:117;;;6091:79;;:::i;:::-;6055:117;6196:78;6266:7;6257:6;6246:9;6242:22;6196:78;:::i;:::-;6186:88;;5981:303;5397:894;;;;;:::o;6297:118::-;6384:24;6402:5;6384:24;:::i;:::-;6379:3;6372:37;6297:118;;:::o;6421:442::-;6570:4;6608:2;6597:9;6593:18;6585:26;;6621:71;6689:1;6678:9;6674:17;6665:6;6621:71;:::i;:::-;6702:72;6770:2;6759:9;6755:18;6746:6;6702:72;:::i;:::-;6784;6852:2;6841:9;6837:18;6828:6;6784:72;:::i;:::-;6421:442;;;;;;:::o;6869:222::-;6962:4;7000:2;6989:9;6985:18;6977:26;;7013:71;7081:1;7070:9;7066:17;7057:6;7013:71;:::i;:::-;6869:222;;;;:::o;7097:117::-;7206:1;7203;7196:12;7233:552;7290:8;7300:6;7350:3;7343:4;7335:6;7331:17;7327:27;7317:122;;7358:79;;:::i;:::-;7317:122;7471:6;7458:20;7448:30;;7501:18;7493:6;7490:30;7487:117;;;7523:79;;:::i;:::-;7487:117;7637:4;7629:6;7625:17;7613:29;;7691:3;7683:4;7675:6;7671:17;7661:8;7657:32;7654:41;7651:128;;;7698:79;;:::i;:::-;7651:128;7233:552;;;;;:::o;7791:963::-;7888:6;7896;7904;7912;7920;7969:3;7957:9;7948:7;7944:23;7940:33;7937:120;;;7976:79;;:::i;:::-;7937:120;8096:1;8121:53;8166:7;8157:6;8146:9;8142:22;8121:53;:::i;:::-;8111:63;;8067:117;8223:2;8249:53;8294:7;8285:6;8274:9;8270:22;8249:53;:::i;:::-;8239:63;;8194:118;8351:2;8377:53;8422:7;8413:6;8402:9;8398:22;8377:53;:::i;:::-;8367:63;;8322:118;8507:2;8496:9;8492:18;8479:32;8538:18;8530:6;8527:30;8524:117;;;8560:79;;:::i;:::-;8524:117;8673:64;8729:7;8720:6;8709:9;8705:22;8673:64;:::i;:::-;8655:82;;;;8450:297;7791:963;;;;;;;;:::o;8760:149::-;8796:7;8836:66;8829:5;8825:78;8814:89;;8760:149;;;:::o;8915:115::-;9000:23;9017:5;9000:23;:::i;:::-;8995:3;8988:36;8915:115;;:::o;9036:218::-;9127:4;9165:2;9154:9;9150:18;9142:26;;9178:69;9244:1;9233:9;9229:17;9220:6;9178:69;:::i;:::-;9036:218;;;;:::o;9260:329::-;9319:6;9368:2;9356:9;9347:7;9343:23;9339:32;9336:119;;;9374:79;;:::i;:::-;9336:119;9494:1;9519:53;9564:7;9555:6;9544:9;9540:22;9519:53;:::i;:::-;9509:63;;9465:117;9260:329;;;;:::o;9595:::-;9654:6;9703:2;9691:9;9682:7;9678:23;9674:32;9671:119;;;9709:79;;:::i;:::-;9671:119;9829:1;9854:53;9899:7;9890:6;9879:9;9875:22;9854:53;:::i;:::-;9844:63;;9800:117;9595:329;;;;:::o;9930:117::-;10039:1;10036;10029:12;10053:307;10114:4;10204:18;10196:6;10193:30;10190:56;;;10226:18;;:::i;:::-;10190:56;10264:29;10286:6;10264:29;:::i;:::-;10256:37;;10348:4;10342;10338:15;10330:23;;10053:307;;;:::o;10366:146::-;10463:6;10458:3;10453;10440:30;10504:1;10495:6;10490:3;10486:16;10479:27;10366:146;;;:::o;10518:423::-;10595:5;10620:65;10636:48;10677:6;10636:48;:::i;:::-;10620:65;:::i;:::-;10611:74;;10708:6;10701:5;10694:21;10746:4;10739:5;10735:16;10784:3;10775:6;10770:3;10766:16;10763:25;10760:112;;;10791:79;;:::i;:::-;10760:112;10881:54;10928:6;10923:3;10918;10881:54;:::i;:::-;10601:340;10518:423;;;;;:::o;10960:338::-;11015:5;11064:3;11057:4;11049:6;11045:17;11041:27;11031:122;;11072:79;;:::i;:::-;11031:122;11189:6;11176:20;11214:78;11288:3;11280:6;11273:4;11265:6;11261:17;11214:78;:::i;:::-;11205:87;;11021:277;10960:338;;;;:::o;11304:507::-;11372:6;11421:2;11409:9;11400:7;11396:23;11392:32;11389:119;;;11427:79;;:::i;:::-;11389:119;11575:1;11564:9;11560:17;11547:31;11605:18;11597:6;11594:30;11591:117;;;11627:79;;:::i;:::-;11591:117;11732:62;11786:7;11777:6;11766:9;11762:22;11732:62;:::i;:::-;11722:72;;11518:286;11304:507;;;;:::o;11817:98::-;11868:6;11902:5;11896:12;11886:22;;11817:98;;;:::o;11921:168::-;12004:11;12038:6;12033:3;12026:19;12078:4;12073:3;12069:14;12054:29;;11921:168;;;;:::o;12095:246::-;12176:1;12186:113;12200:6;12197:1;12194:13;12186:113;;;12285:1;12280:3;12276:11;12270:18;12266:1;12261:3;12257:11;12250:39;12222:2;12219:1;12215:10;12210:15;;12186:113;;;12333:1;12324:6;12319:3;12315:16;12308:27;12157:184;12095:246;;;:::o;12347:373::-;12433:3;12461:38;12493:5;12461:38;:::i;:::-;12515:70;12578:6;12573:3;12515:70;:::i;:::-;12508:77;;12594:65;12652:6;12647:3;12640:4;12633:5;12629:16;12594:65;:::i;:::-;12684:29;12706:6;12684:29;:::i;:::-;12679:3;12675:39;12668:46;;12437:283;12347:373;;;;:::o;12726:529::-;12893:4;12931:2;12920:9;12916:18;12908:26;;12944:71;13012:1;13001:9;12997:17;12988:6;12944:71;:::i;:::-;13025:72;13093:2;13082:9;13078:18;13069:6;13025:72;:::i;:::-;13144:9;13138:4;13134:20;13129:2;13118:9;13114:18;13107:48;13172:76;13243:4;13234:6;13172:76;:::i;:::-;13164:84;;12726:529;;;;;;:::o;13261:90::-;13296:7;13339:5;13336:1;13325:20;13314:31;;13261:90;;;:::o;13357:112::-;13440:22;13456:5;13440:22;:::i;:::-;13435:3;13428:35;13357:112;;:::o;13475:214::-;13564:4;13602:2;13591:9;13587:18;13579:26;;13615:67;13679:1;13668:9;13664:17;13655:6;13615:67;:::i;:::-;13475:214;;;;:::o;13695:474::-;13763:6;13771;13820:2;13808:9;13799:7;13795:23;13791:32;13788:119;;;13826:79;;:::i;:::-;13788:119;13946:1;13971:53;14016:7;14007:6;13996:9;13992:22;13971:53;:::i;:::-;13961:63;;13917:117;14073:2;14099:53;14144:7;14135:6;14124:9;14120:22;14099:53;:::i;:::-;14089:63;;14044:118;13695:474;;;;;:::o;14175:332::-;14296:4;14334:2;14323:9;14319:18;14311:26;;14347:71;14415:1;14404:9;14400:17;14391:6;14347:71;:::i;:::-;14428:72;14496:2;14485:9;14481:18;14472:6;14428:72;:::i;:::-;14175:332;;;;;:::o;14513:118::-;14600:24;14618:5;14600:24;:::i;:::-;14595:3;14588:37;14513:118;;:::o;14637:222::-;14730:4;14768:2;14757:9;14753:18;14745:26;;14781:71;14849:1;14838:9;14834:17;14825:6;14781:71;:::i;:::-;14637:222;;;;:::o;14865:619::-;14942:6;14950;14958;15007:2;14995:9;14986:7;14982:23;14978:32;14975:119;;;15013:79;;:::i;:::-;14975:119;15133:1;15158:53;15203:7;15194:6;15183:9;15179:22;15158:53;:::i;:::-;15148:63;;15104:117;15260:2;15286:53;15331:7;15322:6;15311:9;15307:22;15286:53;:::i;:::-;15276:63;;15231:118;15388:2;15414:53;15459:7;15450:6;15439:9;15435:22;15414:53;:::i;:::-;15404:63;;15359:118;14865:619;;;;;:::o;15490:91::-;15526:7;15566:8;15559:5;15555:20;15544:31;;15490:91;;;:::o;15587:115::-;15672:23;15689:5;15672:23;:::i;:::-;15667:3;15660:36;15587:115;;:::o;15708:218::-;15799:4;15837:2;15826:9;15822:18;15814:26;;15850:69;15916:1;15905:9;15901:17;15892:6;15850:69;:::i;:::-;15708:218;;;;:::o;15932:619::-;16009:6;16017;16025;16074:2;16062:9;16053:7;16049:23;16045:32;16042:119;;;16080:79;;:::i;:::-;16042:119;16200:1;16225:53;16270:7;16261:6;16250:9;16246:22;16225:53;:::i;:::-;16215:63;;16171:117;16327:2;16353:53;16398:7;16389:6;16378:9;16374:22;16353:53;:::i;:::-;16343:63;;16298:118;16455:2;16481:53;16526:7;16517:6;16506:9;16502:22;16481:53;:::i;:::-;16471:63;;16426:118;15932:619;;;;;:::o;16557:118::-;16594:7;16634:34;16627:5;16623:46;16612:57;;16557:118;;;:::o;16681:::-;16768:24;16786:5;16768:24;:::i;:::-;16763:3;16756:37;16681:118;;:::o;16805:553::-;16982:4;17020:3;17009:9;17005:19;16997:27;;17034:71;17102:1;17091:9;17087:17;17078:6;17034:71;:::i;:::-;17115:72;17183:2;17172:9;17168:18;17159:6;17115:72;:::i;:::-;17197;17265:2;17254:9;17250:18;17241:6;17197:72;:::i;:::-;17279;17347:2;17336:9;17332:18;17323:6;17279:72;:::i;:::-;16805:553;;;;;;;:::o;17364:147::-;17465:11;17502:3;17487:18;;17364:147;;;;:::o;17539:327::-;17653:3;17674:88;17755:6;17750:3;17674:88;:::i;:::-;17667:95;;17772:56;17821:6;17816:3;17809:5;17772:56;:::i;:::-;17853:6;17848:3;17844:16;17837:23;;17539:327;;;;;:::o;17872:291::-;18012:3;18034:103;18133:3;18124:6;18116;18034:103;:::i;:::-;18027:110;;18154:3;18147:10;;17872:291;;;;;:::o;18169:180::-;18217:77;18214:1;18207:88;18314:4;18311:1;18304:15;18338:4;18335:1;18328:15;18355:180;18403:77;18400:1;18393:88;18500:4;18497:1;18490:15;18524:4;18521:1;18514:15;18541:185;18581:1;18598:20;18616:1;18598:20;:::i;:::-;18593:25;;18632:20;18650:1;18632:20;:::i;:::-;18627:25;;18671:1;18661:35;;18676:18;;:::i;:::-;18661:35;18718:1;18715;18711:9;18706:14;;18541:185;;;;:::o;18732:169::-;18816:11;18850:6;18845:3;18838:19;18890:4;18885:3;18881:14;18866:29;;18732:169;;;;:::o;18907:162::-;19047:14;19043:1;19035:6;19031:14;19024:38;18907:162;:::o;19075:366::-;19217:3;19238:67;19302:2;19297:3;19238:67;:::i;:::-;19231:74;;19314:93;19403:3;19314:93;:::i;:::-;19432:2;19427:3;19423:12;19416:19;;19075:366;;;:::o;19447:419::-;19613:4;19651:2;19640:9;19636:18;19628:26;;19700:9;19694:4;19690:20;19686:1;19675:9;19671:17;19664:47;19728:131;19854:4;19728:131;:::i;:::-;19720:139;;19447:419;;;:::o;19872:176::-;19963:11;19997:6;19992:3;19985:19;20037:4;20032:3;20028:14;20013:29;;19872:176;;;;:::o;20054:389::-;20148:3;20176:38;20208:5;20176:38;:::i;:::-;20230:78;20301:6;20296:3;20230:78;:::i;:::-;20223:85;;20317:65;20375:6;20370:3;20363:4;20356:5;20352:16;20317:65;:::i;:::-;20407:29;20429:6;20407:29;:::i;:::-;20402:3;20398:39;20391:46;;20152:291;20054:389;;;;:::o;20449:126::-;20544:24;20562:5;20544:24;:::i;:::-;20539:3;20532:37;20449:126;;:::o;20581:::-;20676:24;20694:5;20676:24;:::i;:::-;20671:3;20664:37;20581:126;;:::o;20713:123::-;20806:23;20823:5;20806:23;:::i;:::-;20801:3;20794:36;20713:123;;:::o;20842:1152::-;21155:4;21193:3;21182:9;21178:19;21170:27;;21243:9;21237:4;21233:20;21229:1;21218:9;21214:17;21207:47;21271:84;21350:4;21341:6;21271:84;:::i;:::-;21263:92;;21365:80;21441:2;21430:9;21426:18;21417:6;21365:80;:::i;:::-;21455;21531:2;21520:9;21516:18;21507:6;21455:80;:::i;:::-;21545;21621:2;21610:9;21606:18;21597:6;21545:80;:::i;:::-;21635:81;21711:3;21700:9;21696:19;21687:6;21635:81;:::i;:::-;21726;21802:3;21791:9;21787:19;21778:6;21726:81;:::i;:::-;21817:79;21891:3;21880:9;21876:19;21867:6;21817:79;:::i;:::-;21906:81;21982:3;21971:9;21967:19;21958:6;21906:81;:::i;:::-;20842:1152;;;;;;;;;;;:::o;22000:143::-;22057:5;22088:6;22082:13;22073:22;;22104:33;22131:5;22104:33;:::i;:::-;22000:143;;;;:::o;22149:432::-;22237:5;22262:65;22278:48;22319:6;22278:48;:::i;:::-;22262:65;:::i;:::-;22253:74;;22350:6;22343:5;22336:21;22388:4;22381:5;22377:16;22426:3;22417:6;22412:3;22408:16;22405:25;22402:112;;;22433:79;;:::i;:::-;22402:112;22523:52;22568:6;22563:3;22558;22523:52;:::i;:::-;22243:338;22149:432;;;;;:::o;22600:353::-;22666:5;22715:3;22708:4;22700:6;22696:17;22692:27;22682:122;;22723:79;;:::i;:::-;22682:122;22833:6;22827:13;22858:89;22943:3;22935:6;22928:4;22920:6;22916:17;22858:89;:::i;:::-;22849:98;;22672:281;22600:353;;;;:::o;22959:834::-;23056:6;23064;23072;23121:2;23109:9;23100:7;23096:23;23092:32;23089:119;;;23127:79;;:::i;:::-;23089:119;23247:1;23272:64;23328:7;23319:6;23308:9;23304:22;23272:64;:::i;:::-;23262:74;;23218:128;23385:2;23411:64;23467:7;23458:6;23447:9;23443:22;23411:64;:::i;:::-;23401:74;;23356:129;23545:2;23534:9;23530:18;23524:25;23576:18;23568:6;23565:30;23562:117;;;23598:79;;:::i;:::-;23562:117;23703:73;23768:7;23759:6;23748:9;23744:22;23703:73;:::i;:::-;23693:83;;23495:291;22959:834;;;;;:::o;23799:162::-;23939:14;23935:1;23927:6;23923:14;23916:38;23799:162;:::o;23967:366::-;24109:3;24130:67;24194:2;24189:3;24130:67;:::i;:::-;24123:74;;24206:93;24295:3;24206:93;:::i;:::-;24324:2;24319:3;24315:12;24308:19;;23967:366;;;:::o;24339:419::-;24505:4;24543:2;24532:9;24528:18;24520:26;;24592:9;24586:4;24582:20;24578:1;24567:9;24563:17;24556:47;24620:131;24746:4;24620:131;:::i;:::-;24612:139;;24339:419;;;:::o;24764:180::-;24812:77;24809:1;24802:88;24909:4;24906:1;24899:15;24933:4;24930:1;24923:15;24950:165;25090:17;25086:1;25078:6;25074:14;25067:41;24950:165;:::o;25121:366::-;25263:3;25284:67;25348:2;25343:3;25284:67;:::i;:::-;25277:74;;25360:93;25449:3;25360:93;:::i;:::-;25478:2;25473:3;25469:12;25462:19;;25121:366;;;:::o;25493:419::-;25659:4;25697:2;25686:9;25682:18;25674:26;;25746:9;25740:4;25736:20;25732:1;25721:9;25717:17;25710:47;25774:131;25900:4;25774:131;:::i;:::-;25766:139;;25493:419;;;:::o;25918:191::-;25958:3;25977:20;25995:1;25977:20;:::i;:::-;25972:25;;26011:20;26029:1;26011:20;:::i;:::-;26006:25;;26054:1;26051;26047:9;26040:16;;26075:3;26072:1;26069:10;26066:36;;;26082:18;;:::i;:::-;26066:36;25918:191;;;;:::o;26115:194::-;26155:4;26175:20;26193:1;26175:20;:::i;:::-;26170:25;;26209:20;26227:1;26209:20;:::i;:::-;26204:25;;26253:1;26250;26246:9;26238:17;;26277:1;26271:4;26268:11;26265:37;;;26282:18;;:::i;:::-;26265:37;26115:194;;;;:::o;26315:108::-;26392:24;26410:5;26392:24;:::i;:::-;26387:3;26380:37;26315:108;;:::o;26429:::-;26506:24;26524:5;26506:24;:::i;:::-;26501:3;26494:37;26429:108;;:::o;26671:1083::-;26848:4;26843:3;26839:14;26938:4;26931:5;26927:16;26921:23;26957:63;27014:4;27009:3;27005:14;26991:12;26957:63;:::i;:::-;26863:167;27117:4;27110:5;27106:16;27100:23;27136:63;27193:4;27188:3;27184:14;27170:12;27136:63;:::i;:::-;27040:169;27297:4;27290:5;27286:16;27280:23;27316:63;27373:4;27368:3;27364:14;27350:12;27316:63;:::i;:::-;27219:170;27477:4;27470:5;27466:16;27460:23;27496:63;27553:4;27548:3;27544:14;27530:12;27496:63;:::i;:::-;27399:170;27655:4;27648:5;27644:16;27638:23;27674:63;27731:4;27726:3;27722:14;27708:12;27674:63;:::i;:::-;27579:168;26817:937;26671:1083;;:::o;27760:383::-;27933:4;27971:3;27960:9;27956:19;27948:27;;27985:151;28133:1;28122:9;28118:17;28109:6;27985:151;:::i;:::-;27760:383;;;;:::o;28149:507::-;28228:6;28236;28285:2;28273:9;28264:7;28260:23;28256:32;28253:119;;;28291:79;;:::i;:::-;28253:119;28411:1;28436:64;28492:7;28483:6;28472:9;28468:22;28436:64;:::i;:::-;28426:74;;28382:128;28549:2;28575:64;28631:7;28622:6;28611:9;28607:22;28575:64;:::i;:::-;28565:74;;28520:129;28149:507;;;;;:::o;28662:171::-;28701:3;28724:24;28742:5;28724:24;:::i;:::-;28715:33;;28770:4;28763:5;28760:15;28757:41;;28778:18;;:::i;:::-;28757:41;28825:1;28818:5;28814:13;28807:20;;28662:171;;;:::o;28839:108::-;28916:24;28934:5;28916:24;:::i;:::-;28911:3;28904:37;28839:108;;:::o;29061:885::-;29218:4;29213:3;29209:14;29308:4;29301:5;29297:16;29291:23;29327:63;29384:4;29379:3;29375:14;29361:12;29327:63;:::i;:::-;29233:167;29487:4;29480:5;29476:16;29470:23;29506:63;29563:4;29558:3;29554:14;29540:12;29506:63;:::i;:::-;29410:169;29667:4;29660:5;29656:16;29650:23;29686:63;29743:4;29738:3;29734:14;29720:12;29686:63;:::i;:::-;29589:170;29847:4;29840:5;29836:16;29830:23;29866:63;29923:4;29918:3;29914:14;29900:12;29866:63;:::i;:::-;29769:170;29187:759;29061:885;;:::o;29952:343::-;30105:4;30143:3;30132:9;30128:19;30120:27;;30157:131;30285:1;30274:9;30270:17;30261:6;30157:131;:::i;:::-;29952:343;;;;:::o;30301:85::-;30346:7;30375:5;30364:16;;30301:85;;;:::o;30392:86::-;30427:7;30467:4;30460:5;30456:16;30445:27;;30392:86;;;:::o;30484:60::-;30512:3;30533:5;30526:12;;30484:60;;;:::o;30550:154::-;30606:9;30639:59;30655:42;30664:32;30690:5;30664:32;:::i;:::-;30655:42;:::i;:::-;30639:59;:::i;:::-;30626:72;;30550:154;;;:::o;30710:143::-;30803:43;30840:5;30803:43;:::i;:::-;30798:3;30791:56;30710:143;;:::o;30859:344::-;30986:4;31024:2;31013:9;31009:18;31001:26;;31037:77;31111:1;31100:9;31096:17;31087:6;31037:77;:::i;:::-;31124:72;31192:2;31181:9;31177:18;31168:6;31124:72;:::i;:::-;30859:344;;;;;:::o;31209:454::-;31364:4;31402:2;31391:9;31387:18;31379:26;;31415:71;31483:1;31472:9;31468:17;31459:6;31415:71;:::i;:::-;31496:78;31570:2;31559:9;31555:18;31546:6;31496:78;:::i;:::-;31584:72;31652:2;31641:9;31637:18;31628:6;31584:72;:::i;:::-;31209:454;;;;;;:::o;31669:123::-;31745:6;31779:5;31773:12;31763:22;;31669:123;;;:::o;31798:193::-;31906:11;31940:6;31935:3;31928:19;31980:4;31975:3;31971:14;31956:29;;31798:193;;;;:::o;31997:141::-;32073:4;32096:3;32088:11;;32126:4;32121:3;32117:14;32109:22;;31997:141;;;:::o;32144:158::-;32217:11;32251:6;32246:3;32239:19;32291:4;32286:3;32282:14;32267:29;;32144:158;;;;:::o;32308:353::-;32384:3;32412:38;32444:5;32412:38;:::i;:::-;32466:60;32519:6;32514:3;32466:60;:::i;:::-;32459:67;;32535:65;32593:6;32588:3;32581:4;32574:5;32570:16;32535:65;:::i;:::-;32625:29;32647:6;32625:29;:::i;:::-;32620:3;32616:39;32609:46;;32388:273;32308:353;;;;:::o;32667:192::-;32754:10;32789:64;32849:3;32841:6;32789:64;:::i;:::-;32775:78;;32667:192;;;;:::o;32865:122::-;32944:4;32976;32971:3;32967:14;32959:22;;32865:122;;;:::o;33019:983::-;33156:3;33185:63;33242:5;33185:63;:::i;:::-;33264:95;33352:6;33347:3;33264:95;:::i;:::-;33257:102;;33385:3;33430:4;33422:6;33418:17;33413:3;33409:27;33460:65;33519:5;33460:65;:::i;:::-;33548:7;33579:1;33564:393;33589:6;33586:1;33583:13;33564:393;;;33660:9;33654:4;33650:20;33645:3;33638:33;33711:6;33705:13;33739:82;33816:4;33801:13;33739:82;:::i;:::-;33731:90;;33844:69;33906:6;33844:69;:::i;:::-;33834:79;;33942:4;33937:3;33933:14;33926:21;;33624:333;33611:1;33608;33604:9;33599:14;;33564:393;;;33568:14;33973:4;33966:11;;33993:3;33986:10;;33161:841;;;;;33019:983;;;;:::o;34008:409::-;34169:4;34207:2;34196:9;34192:18;34184:26;;34256:9;34250:4;34246:20;34242:1;34231:9;34227:17;34220:47;34284:126;34405:4;34396:6;34284:126;:::i;:::-;34276:134;;34008:409;;;;:::o;34423:320::-;34509:4;34599:18;34591:6;34588:30;34585:56;;;34621:18;;:::i;:::-;34585:56;34671:4;34663:6;34659:17;34651:25;;34731:4;34725;34721:15;34713:23;;34423:320;;;:::o;34764:957::-;34880:5;34905:90;34921:73;34987:6;34921:73;:::i;:::-;34905:90;:::i;:::-;34896:99;;35015:5;35044:6;35037:5;35030:21;35078:4;35071:5;35067:16;35060:23;;35131:4;35123:6;35119:17;35111:6;35107:30;35160:3;35152:6;35149:15;35146:122;;;35179:79;;:::i;:::-;35146:122;35294:6;35277:438;35311:6;35306:3;35303:15;35277:438;;;35393:3;35387:10;35429:18;35416:11;35413:35;35410:122;;;35451:79;;:::i;:::-;35410:122;35575:11;35567:6;35563:24;35613:57;35666:3;35654:10;35613:57;:::i;:::-;35608:3;35601:70;35700:4;35695:3;35691:14;35684:21;;35353:362;;35337:4;35332:3;35328:14;35321:21;;35277:438;;;35281:21;34886:835;;34764:957;;;;;:::o;35742:403::-;35833:5;35882:3;35875:4;35867:6;35863:17;35859:27;35849:122;;35890:79;;:::i;:::-;35849:122;36000:6;35994:13;36025:114;36135:3;36127:6;36120:4;36112:6;36108:17;36025:114;:::i;:::-;36016:123;;35839:306;35742:403;;;;:::o;36151:572::-;36255:6;36304:2;36292:9;36283:7;36279:23;36275:32;36272:119;;;36310:79;;:::i;:::-;36272:119;36451:1;36440:9;36436:17;36430:24;36481:18;36473:6;36470:30;36467:117;;;36503:79;;:::i;:::-;36467:117;36608:98;36698:7;36689:6;36678:9;36674:22;36608:98;:::i;:::-;36598:108;;36401:315;36151:572;;;;:::o;36729:233::-;36768:3;36791:24;36809:5;36791:24;:::i;:::-;36782:33;;36837:66;36830:5;36827:77;36824:103;;36907:18;;:::i;:::-;36824:103;36954:1;36947:5;36943:13;36936:20;;36729:233;;;:::o;36968:224::-;37008:3;37027:20;37045:1;37027:20;:::i;:::-;37022:25;;37061:20;37079:1;37061:20;:::i;:::-;37056:25;;37104:1;37101;37097:9;37090:16;;37127:34;37122:3;37119:43;37116:69;;;37165:18;;:::i;:::-;37116:69;36968:224;;;;:::o;37198:174::-;37338:26;37334:1;37326:6;37322:14;37315:50;37198:174;:::o;37378:366::-;37520:3;37541:67;37605:2;37600:3;37541:67;:::i;:::-;37534:74;;37617:93;37706:3;37617:93;:::i;:::-;37735:2;37730:3;37726:12;37719:19;;37378:366;;;:::o;37750:419::-;37916:4;37954:2;37943:9;37939:18;37931:26;;38003:9;37997:4;37993:20;37989:1;37978:9;37974:17;37967:47;38031:131;38157:4;38031:131;:::i;:::-;38023:139;;37750:419;;;:::o;38175:549::-;38350:4;38388:3;38377:9;38373:19;38365:27;;38402:71;38470:1;38459:9;38455:17;38446:6;38402:71;:::i;:::-;38483:72;38551:2;38540:9;38536:18;38527:6;38483:72;:::i;:::-;38565:70;38631:2;38620:9;38616:18;38607:6;38565:70;:::i;:::-;38645:72;38713:2;38702:9;38698:18;38689:6;38645:72;:::i;:::-;38175:549;;;;;;;:::o;38730:143::-;38787:5;38818:6;38812:13;38803:22;;38834:33;38861:5;38834:33;:::i;:::-;38730:143;;;;:::o;38879:351::-;38949:6;38998:2;38986:9;38977:7;38973:23;38969:32;38966:119;;;39004:79;;:::i;:::-;38966:119;39124:1;39149:64;39205:7;39196:6;39185:9;39181:22;39149:64;:::i;:::-;39139:74;;39095:128;38879:351;;;;:::o;39236:157::-;39376:9;39372:1;39364:6;39360:14;39353:33;39236:157;:::o;39399:365::-;39541:3;39562:66;39626:1;39621:3;39562:66;:::i;:::-;39555:73;;39637:93;39726:3;39637:93;:::i;:::-;39755:2;39750:3;39746:12;39739:19;;39399:365;;;:::o;39770:419::-;39936:4;39974:2;39963:9;39959:18;39951:26;;40023:9;40017:4;40013:20;40009:1;39998:9;39994:17;39987:47;40051:131;40177:4;40051:131;:::i;:::-;40043:139;;39770:419;;;:::o;40195:167::-;40335:19;40331:1;40323:6;40319:14;40312:43;40195:167;:::o;40368:366::-;40510:3;40531:67;40595:2;40590:3;40531:67;:::i;:::-;40524:74;;40607:93;40696:3;40607:93;:::i;:::-;40725:2;40720:3;40716:12;40709:19;;40368:366;;;:::o;40740:419::-;40906:4;40944:2;40933:9;40929:18;40921:26;;40993:9;40987:4;40983:20;40979:1;40968:9;40964:17;40957:47;41021:131;41147:4;41021:131;:::i;:::-;41013:139;;40740:419;;;:::o;41165:410::-;41205:7;41228:20;41246:1;41228:20;:::i;:::-;41223:25;;41262:20;41280:1;41262:20;:::i;:::-;41257:25;;41317:1;41314;41310:9;41339:30;41357:11;41339:30;:::i;:::-;41328:41;;41518:1;41509:7;41505:15;41502:1;41499:22;41479:1;41472:9;41452:83;41429:139;;41548:18;;:::i;:::-;41429:139;41213:362;41165:410;;;;:::o;41581:174::-;41721:26;41717:1;41709:6;41705:14;41698:50;41581:174;:::o;41761:366::-;41903:3;41924:67;41988:2;41983:3;41924:67;:::i;:::-;41917:74;;42000:93;42089:3;42000:93;:::i;:::-;42118:2;42113:3;42109:12;42102:19;;41761:366;;;:::o;42133:419::-;42299:4;42337:2;42326:9;42322:18;42314:26;;42386:9;42380:4;42376:20;42372:1;42361:9;42357:17;42350:47;42414:131;42540:4;42414:131;:::i;:::-;42406:139;;42133:419;;;:::o;42558:332::-;42679:4;42717:2;42706:9;42702:18;42694:26;;42730:71;42798:1;42787:9;42783:17;42774:6;42730:71;:::i;:::-;42811:72;42879:2;42868:9;42864:18;42855:6;42811:72;:::i;:::-;42558:332;;;;;:::o;42896:386::-;43000:3;43028:38;43060:5;43028:38;:::i;:::-;43082:88;43163:6;43158:3;43082:88;:::i;:::-;43075:95;;43179:65;43237:6;43232:3;43225:4;43218:5;43214:16;43179:65;:::i;:::-;43269:6;43264:3;43260:16;43253:23;;43004:278;42896:386;;;;:::o;43288:271::-;43418:3;43440:93;43529:3;43520:6;43440:93;:::i;:::-;43433:100;;43550:3;43543:10;;43288:271;;;;:::o;43565:90::-;43599:7;43642:5;43635:13;43628:21;43617:32;;43565:90;;;:::o;43661:116::-;43731:21;43746:5;43731:21;:::i;:::-;43724:5;43721:32;43711:60;;43767:1;43764;43757:12;43711:60;43661:116;:::o;43783:137::-;43837:5;43868:6;43862:13;43853:22;;43884:30;43908:5;43884:30;:::i;:::-;43783:137;;;;:::o;43926:345::-;43993:6;44042:2;44030:9;44021:7;44017:23;44013:32;44010:119;;;44048:79;;:::i;:::-;44010:119;44168:1;44193:61;44246:7;44237:6;44226:9;44222:22;44193:61;:::i;:::-;44183:71;;44139:125;43926:345;;;;:::o;44277:105::-;44352:23;44369:5;44352:23;:::i;:::-;44347:3;44340:36;44277:105;;:::o;44388:102::-;44461:22;44477:5;44461:22;:::i;:::-;44456:3;44449:35;44388:102;;:::o;44598:2135::-;44749:6;44744:3;44740:16;44840:4;44833:5;44829:16;44823:23;44859:63;44916:4;44911:3;44907:14;44893:12;44859:63;:::i;:::-;44766:166;45016:4;45009:5;45005:16;44999:23;45035:63;45092:4;45087:3;45083:14;45069:12;45035:63;:::i;:::-;44942:166;45189:4;45182:5;45178:16;45172:23;45208:61;45263:4;45258:3;45254:14;45240:12;45208:61;:::i;:::-;45118:161;45366:4;45359:5;45355:16;45349:23;45385:59;45438:4;45433:3;45429:14;45415:12;45385:59;:::i;:::-;45289:165;45541:4;45534:5;45530:16;45524:23;45560:59;45613:4;45608:3;45604:14;45590:12;45560:59;:::i;:::-;45464:165;45721:4;45714:5;45710:16;45704:23;45740:63;45797:4;45792:3;45788:14;45774:12;45740:63;:::i;:::-;45639:174;45905:4;45898:5;45894:16;45888:23;45924:63;45981:4;45976:3;45972:14;45958:12;45924:63;:::i;:::-;45823:174;46085:4;46078:5;46074:16;46068:23;46104:63;46161:4;46156:3;46152:14;46138:12;46104:63;:::i;:::-;46007:170;46265:6;46258:5;46254:18;46248:25;46286:65;46343:6;46338:3;46334:16;46320:12;46286:65;:::i;:::-;46187:174;46448:6;46441:5;46437:18;46431:25;46469:65;46526:6;46521:3;46517:16;46503:12;46469:65;:::i;:::-;46371:173;46630:6;46623:5;46619:18;46613:25;46651:65;46708:6;46703:3;46699:16;46685:12;46651:65;:::i;:::-;46554:172;44718:2015;44598:2135;;:::o;46739:331::-;46886:4;46924:3;46913:9;46909:19;46901:27;;46938:125;47060:1;47049:9;47045:17;47036:6;46938:125;:::i;:::-;46739:331;;;;:::o;47076:122::-;47149:24;47167:5;47149:24;:::i;:::-;47142:5;47139:35;47129:63;;47188:1;47185;47178:12;47129:63;47076:122;:::o;47204:143::-;47261:5;47292:6;47286:13;47277:22;;47308:33;47335:5;47308:33;:::i;:::-;47204:143;;;;:::o;47353:820::-;47450:6;47458;47466;47474;47523:3;47511:9;47502:7;47498:23;47494:33;47491:120;;;47530:79;;:::i;:::-;47491:120;47650:1;47675:64;47731:7;47722:6;47711:9;47707:22;47675:64;:::i;:::-;47665:74;;47621:128;47788:2;47814:64;47870:7;47861:6;47850:9;47846:22;47814:64;:::i;:::-;47804:74;;47759:129;47927:2;47953:64;48009:7;48000:6;47989:9;47985:22;47953:64;:::i;:::-;47943:74;;47898:129;48066:2;48092:64;48148:7;48139:6;48128:9;48124:22;48092:64;:::i;:::-;48082:74;;48037:129;47353:820;;;;;;;:::o;48307:1272::-;48484:4;48479:3;48475:14;48574:4;48567:5;48563:16;48557:23;48593:63;48650:4;48645:3;48641:14;48627:12;48593:63;:::i;:::-;48499:167;48758:4;48751:5;48747:16;48741:23;48777:63;48834:4;48829:3;48825:14;48811:12;48777:63;:::i;:::-;48676:174;48942:4;48935:5;48931:16;48925:23;48961:63;49018:4;49013:3;49009:14;48995:12;48961:63;:::i;:::-;48860:174;49122:4;49115:5;49111:16;49105:23;49141:63;49198:4;49193:3;49189:14;49175:12;49141:63;:::i;:::-;49044:170;49302:4;49295:5;49291:16;49285:23;49321:63;49378:4;49373:3;49369:14;49355:12;49321:63;:::i;:::-;49224:170;49480:4;49473:5;49469:16;49463:23;49499:63;49556:4;49551:3;49547:14;49533:12;49499:63;:::i;:::-;49404:168;48453:1126;48307:1272;;:::o;49585:383::-;49758:4;49796:3;49785:9;49781:19;49773:27;;49810:151;49958:1;49947:9;49943:17;49934:6;49810:151;:::i;:::-;49585:383;;;;:::o;49974:663::-;50062:6;50070;50078;50127:2;50115:9;50106:7;50102:23;50098:32;50095:119;;;50133:79;;:::i;:::-;50095:119;50253:1;50278:64;50334:7;50325:6;50314:9;50310:22;50278:64;:::i;:::-;50268:74;;50224:128;50391:2;50417:64;50473:7;50464:6;50453:9;50449:22;50417:64;:::i;:::-;50407:74;;50362:129;50530:2;50556:64;50612:7;50603:6;50592:9;50588:22;50556:64;:::i;:::-;50546:74;;50501:129;49974:663;;;;;:::o;50643:351::-;50713:6;50762:2;50750:9;50741:7;50737:23;50733:32;50730:119;;;50768:79;;:::i;:::-;50730:119;50888:1;50913:64;50969:7;50960:6;50949:9;50945:22;50913:64;:::i;:::-;50903:74;;50859:128;50643:351;;;;:::o;51000:170::-;51140:22;51136:1;51128:6;51124:14;51117:46;51000:170;:::o;51176:366::-;51318:3;51339:67;51403:2;51398:3;51339:67;:::i;:::-;51332:74;;51415:93;51504:3;51415:93;:::i;:::-;51533:2;51528:3;51524:12;51517:19;;51176:366;;;:::o;51548:419::-;51714:4;51752:2;51741:9;51737:18;51729:26;;51801:9;51795:4;51791:20;51787:1;51776:9;51772:17;51765:47;51829:131;51955:4;51829:131;:::i;:::-;51821:139;;51548:419;;;:::o;51973:171::-;52113:23;52109:1;52101:6;52097:14;52090:47;51973:171;:::o;52150:366::-;52292:3;52313:67;52377:2;52372:3;52313:67;:::i;:::-;52306:74;;52389:93;52478:3;52389:93;:::i;:::-;52507:2;52502:3;52498:12;52491:19;;52150:366;;;:::o;52522:419::-;52688:4;52726:2;52715:9;52711:18;52703:26;;52775:9;52769:4;52765:20;52761:1;52750:9;52746:17;52739:47;52803:131;52929:4;52803:131;:::i;:::-;52795:139;;52522:419;;;:::o;52947:170::-;53087:22;53083:1;53075:6;53071:14;53064:46;52947:170;:::o;53123:366::-;53265:3;53286:67;53350:2;53345:3;53286:67;:::i;:::-;53279:74;;53362:93;53451:3;53362:93;:::i;:::-;53480:2;53475:3;53471:12;53464:19;;53123:366;;;:::o;53495:419::-;53661:4;53699:2;53688:9;53684:18;53676:26;;53748:9;53742:4;53738:20;53734:1;53723:9;53719:17;53712:47;53776:131;53902:4;53776:131;:::i;:::-;53768:139;;53495:419;;;:::o;53920:160::-;54060:12;54056:1;54048:6;54044:14;54037:36;53920:160;:::o;54086:366::-;54228:3;54249:67;54313:2;54308:3;54249:67;:::i;:::-;54242:74;;54325:93;54414:3;54325:93;:::i;:::-;54443:2;54438:3;54434:12;54427:19;;54086:366;;;:::o;54458:419::-;54624:4;54662:2;54651:9;54647:18;54639:26;;54711:9;54705:4;54701:20;54697:1;54686:9;54682:17;54675:47;54739:131;54865:4;54739:131;:::i;:::-;54731:139;;54458:419;;;:::o
Swarm Source
ipfs://97acec69a57de94181cda30ab7ed6376a1914ac8baa163b7852f28988f3ec7d9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,419.46 | 78.1114 | $267,099.29 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.