Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- VaultReader
- Optimization enabled
- true
- Compiler version
- v0.8.19+commit.7dd6d404
- Optimization runs
- 59
- EVM Version
- default
- Verified at
- 2023-07-09T02:03:29.968486Z
contracts/peripherals/VaultReader.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import "../core/interfaces/IVault.sol";
import "../core/interfaces/IVaultPriceFeed.sol";
import "../core/interfaces/IBasePositionManager.sol";
contract VaultReader {
function getVaultTokenInfoV3(address _vault, address _positionManager, address _weth, uint256 _usdgAmount, address[] memory _tokens) public view returns (uint256[] memory) {
uint256 propsLength = 14;
IVault vault = IVault(_vault);
IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed());
IBasePositionManager positionManager = IBasePositionManager(_positionManager);
uint256[] memory amounts = new uint256[](_tokens.length * propsLength);
for (uint256 i = 0; i < _tokens.length; i++) {
address token = _tokens[i];
if (token == address(0)) {
token = _weth;
}
amounts[i * propsLength] = vault.poolAmounts(token);
amounts[i * propsLength + 1] = vault.reservedAmounts(token);
amounts[i * propsLength + 2] = vault.usdgAmounts(token);
amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount);
amounts[i * propsLength + 4] = vault.tokenWeights(token);
amounts[i * propsLength + 5] = vault.bufferAmounts(token);
amounts[i * propsLength + 6] = vault.maxUsdgAmounts(token);
amounts[i * propsLength + 7] = vault.globalShortSizes(token);
amounts[i * propsLength + 8] = positionManager.maxGlobalShortSizes(token);
amounts[i * propsLength + 9] = vault.getMinPrice(token);
amounts[i * propsLength + 10] = vault.getMaxPrice(token);
amounts[i * propsLength + 11] = vault.guaranteedUsd(token);
amounts[i * propsLength + 12] = priceFeed.getPrimaryPrice(token, false);
amounts[i * propsLength + 13] = priceFeed.getPrimaryPrice(token, true);
}
return amounts;
}
function getVaultTokenInfoV4(address _vault, address _positionManager, address _weth, uint256 _usdgAmount, address[] memory _tokens) public view returns (uint256[] memory) {
uint256 propsLength = 15;
IVault vault = IVault(_vault);
IVaultPriceFeed priceFeed = IVaultPriceFeed(vault.priceFeed());
IBasePositionManager positionManager = IBasePositionManager(_positionManager);
uint256[] memory amounts = new uint256[](_tokens.length * propsLength);
for (uint256 i = 0; i < _tokens.length; i++) {
address token = _tokens[i];
if (token == address(0)) {
token = _weth;
}
amounts[i * propsLength] = vault.poolAmounts(token);
amounts[i * propsLength + 1] = vault.reservedAmounts(token);
amounts[i * propsLength + 2] = vault.usdgAmounts(token);
amounts[i * propsLength + 3] = vault.getRedemptionAmount(token, _usdgAmount);
amounts[i * propsLength + 4] = vault.tokenWeights(token);
amounts[i * propsLength + 5] = vault.bufferAmounts(token);
amounts[i * propsLength + 6] = vault.maxUsdgAmounts(token);
amounts[i * propsLength + 7] = vault.globalShortSizes(token);
amounts[i * propsLength + 8] = positionManager.maxGlobalShortSizes(token);
amounts[i * propsLength + 9] = positionManager.maxGlobalLongSizes(token);
amounts[i * propsLength + 10] = vault.getMinPrice(token);
amounts[i * propsLength + 11] = vault.getMaxPrice(token);
amounts[i * propsLength + 12] = vault.guaranteedUsd(token);
amounts[i * propsLength + 13] = priceFeed.getPrimaryPrice(token, false);
amounts[i * propsLength + 14] = priceFeed.getPrimaryPrice(token, true);
}
return amounts;
}
}
contracts/core/interfaces/IBasePositionManager.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
interface IBasePositionManager {
function maxGlobalLongSizes(address _token) external view returns (uint256);
function maxGlobalShortSizes(address _token) external view returns (uint256);
}
contracts/core/interfaces/IVault.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import "./IVaultUtils.sol";
interface IVault {
function isInitialized() external view returns (bool);
function isSwapEnabled() external view returns (bool);
function isLeverageEnabled() external view returns (bool);
function setVaultUtils(IVaultUtils _vaultUtils) external;
function setError(uint256 _errorCode, string calldata _error) external;
function router() external view returns (address);
function usdg() external view returns (address);
function gov() external view returns (address);
function whitelistedTokenCount() external view returns (uint256);
function maxLeverage() external view returns (uint256);
function minProfitTime() external view returns (uint256);
function hasDynamicFees() external view returns (bool);
function fundingInterval() external view returns (uint256);
function totalTokenWeights() external view returns (uint256);
function getTargetUsdgAmount(address _token) external view returns (uint256);
function inManagerMode() external view returns (bool);
function inPrivateLiquidationMode() external view returns (bool);
function maxGasPrice() external view returns (uint256);
function approvedRouters(address _account, address _router) external view returns (bool);
function isLiquidator(address _account) external view returns (bool);
function isManager(address _account) external view returns (bool);
function minProfitBasisPoints(address _token) external view returns (uint256);
function tokenBalances(address _token) external view returns (uint256);
function lastFundingTimes(address _token) external view returns (uint256);
function setMaxLeverage(uint256 _maxLeverage) external;
function setInManagerMode(bool _inManagerMode) external;
function setManager(address _manager, bool _isManager) external;
function setIsSwapEnabled(bool _isSwapEnabled) external;
function setIsLeverageEnabled(bool _isLeverageEnabled) external;
function setMaxGasPrice(uint256 _maxGasPrice) external;
function setUsdgAmount(address _token, uint256 _amount) external;
function setBufferAmount(address _token, uint256 _amount) external;
function setMaxGlobalShortSize(address _token, uint256 _amount) external;
function setInPrivateLiquidationMode(bool _inPrivateLiquidationMode) external;
function setLiquidator(address _liquidator, bool _isActive) external;
function setFundingRate(uint256 _fundingInterval, uint256 _fundingRateFactor, uint256 _stableFundingRateFactor) external;
function setFees(
uint256 _taxBasisPoints,
uint256 _stableTaxBasisPoints,
uint256 _mintBurnFeeBasisPoints,
uint256 _swapFeeBasisPoints,
uint256 _stableSwapFeeBasisPoints,
uint256 _marginFeeBasisPoints,
uint256 _liquidationFeeUsd,
uint256 _minProfitTime,
bool _hasDynamicFees
) external;
function setTokenConfig(
address _token,
uint256 _tokenDecimals,
uint256 _redemptionBps,
uint256 _minProfitBps,
uint256 _maxUsdgAmount,
bool _isStable,
bool _isShortable
) external;
function setPriceFeed(address _priceFeed) external;
function withdrawFees(address _token, address _receiver) external returns (uint256);
function directPoolDeposit(address _token) external;
function buyUSDG(address _token, address _receiver) external returns (uint256);
function sellUSDG(address _token, address _receiver) external returns (uint256);
function swap(address _tokenIn, address _tokenOut, address _receiver) external returns (uint256);
function increasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external;
function decreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external returns (uint256);
function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256);
function liquidatePosition(address _account, address _collateralToken, address _indexToken, bool _isLong, address _feeReceiver) external;
function tokenToUsdMin(address _token, uint256 _tokenAmount) external view returns (uint256);
function priceFeed() external view returns (address);
function fundingRateFactor() external view returns (uint256);
function stableFundingRateFactor() external view returns (uint256);
function cumulativeFundingRates(address _token) external view returns (uint256);
function getNextFundingRate(address _token) external view returns (uint256);
function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256);
function liquidationFeeUsd() external view returns (uint256);
function taxBasisPoints() external view returns (uint256);
function stableTaxBasisPoints() external view returns (uint256);
function mintBurnFeeBasisPoints() external view returns (uint256);
function swapFeeBasisPoints() external view returns (uint256);
function stableSwapFeeBasisPoints() external view returns (uint256);
function marginFeeBasisPoints() external view returns (uint256);
function allWhitelistedTokensLength() external view returns (uint256);
function allWhitelistedTokens(uint256) external view returns (address);
function whitelistedTokens(address _token) external view returns (bool);
function stableTokens(address _token) external view returns (bool);
function shortableTokens(address _token) external view returns (bool);
function feeReserves(address _token) external view returns (uint256);
function globalShortSizes(address _token) external view returns (uint256);
function globalShortAveragePrices(address _token) external view returns (uint256);
function maxGlobalShortSizes(address _token) external view returns (uint256);
function tokenDecimals(address _token) external view returns (uint256);
function tokenWeights(address _token) external view returns (uint256);
function guaranteedUsd(address _token) external view returns (uint256);
function poolAmounts(address _token) external view returns (uint256);
function bufferAmounts(address _token) external view returns (uint256);
function reservedAmounts(address _token) external view returns (uint256);
function usdgAmounts(address _token) external view returns (uint256);
function maxUsdgAmounts(address _token) external view returns (uint256);
function getRedemptionAmount(address _token, uint256 _usdgAmount) external view returns (uint256);
function getMaxPrice(address _token) external view returns (uint256);
function getMinPrice(address _token) external view returns (uint256);
function getDelta(address _indexToken, uint256 _size, uint256 _averagePrice, bool _isLong, uint256 _lastIncreasedTime) external view returns (bool, uint256);
function getPosition(address _account, address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256, uint256, uint256, uint256, uint256, uint256, bool, uint256);
}
contracts/core/interfaces/IVaultPriceFeed.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
interface IVaultPriceFeed {
function adjustmentBasisPoints(address _token) external view returns (uint256);
function isAdjustmentAdditive(address _token) external view returns (bool);
function setAdjustment(address _token, bool _isAdditive, uint256 _adjustmentBps) external;
function setUseV2Pricing(bool _useV2Pricing) external;
function setIsAmmEnabled(bool _isEnabled) external;
function setIsSecondaryPriceEnabled(bool _isEnabled) external;
function setSpreadBasisPoints(address _token, uint256 _spreadBasisPoints) external;
function setSpreadThresholdBasisPoints(uint256 _spreadThresholdBasisPoints) external;
function setFavorPrimaryPrice(bool _favorPrimaryPrice) external;
function setPriceSampleSpace(uint256 _priceSampleSpace) external;
function setMaxStrictPriceDeviation(uint256 _maxStrictPriceDeviation) external;
function getPrice(address _token, bool _maximise, bool _includeAmmPrice, bool _useSwapPricing) external view returns (uint256);
function getAmmPrice(address _token) external view returns (uint256);
function getLatestPrimaryPrice(address _token) external view returns (uint256);
function getPrimaryPrice(address _token, bool _maximise) external view returns (uint256);
function setTokenConfig(
address _token,
address _priceFeed,
uint256 _priceDecimals,
bool _isStrictStable,
uint256 _confScalingFactors
) external;
}
contracts/core/interfaces/IVaultUtils.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
interface IVaultUtils {
function updateCumulativeFundingRate(address _collateralToken, address _indexToken) external returns (bool);
function validateIncreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _sizeDelta, bool _isLong) external view;
function validateDecreasePosition(address _account, address _collateralToken, address _indexToken, uint256 _collateralDelta, uint256 _sizeDelta, bool _isLong, address _receiver) external view;
function validateLiquidation(address _account, address _collateralToken, address _indexToken, bool _isLong, bool _raise) external view returns (uint256, uint256);
function getEntryFundingRate(address _collateralToken, address _indexToken, bool _isLong) external view returns (uint256);
function getPositionFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _sizeDelta) external view returns (uint256);
function getFundingFee(address _account, address _collateralToken, address _indexToken, bool _isLong, uint256 _size, uint256 _entryFundingRate) external view returns (uint256);
function getBuyUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256);
function getSellUsdgFeeBasisPoints(address _token, uint256 _usdgAmount) external view returns (uint256);
function getSwapFeeBasisPoints(address _tokenIn, address _tokenOut, uint256 _usdgAmount) external view returns (uint256);
function getFeeBasisPoints(address _token, uint256 _usdgDelta, uint256 _feeBasisPoints, uint256 _taxBasisPoints, bool _increment) external view returns (uint256);
}
Compiler Settings
{"viaIR":true,"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"]}},"optimizer":{"runs":59,"enabled":true,"details":{"yulDetails":{"optimizerSteps":"u"}}},"libraries":{}}
Contract ABI
[{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getVaultTokenInfoV3","inputs":[{"type":"address","name":"_vault","internalType":"address"},{"type":"address","name":"_positionManager","internalType":"address"},{"type":"address","name":"_weth","internalType":"address"},{"type":"uint256","name":"_usdgAmount","internalType":"uint256"},{"type":"address[]","name":"_tokens","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getVaultTokenInfoV4","inputs":[{"type":"address","name":"_vault","internalType":"address"},{"type":"address","name":"_positionManager","internalType":"address"},{"type":"address","name":"_weth","internalType":"address"},{"type":"uint256","name":"_usdgAmount","internalType":"uint256"},{"type":"address[]","name":"_tokens","internalType":"address[]"}]}]
Contract Creation Code
0x60806040523461001a576040516111e061002082396111e090f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063d3f3265c146100325763f75e8101036100565761024d565b61021e565b6001600160a01b031690565b90565b61004f81610037565b0361005657565b600080fd5b9050359061006882610046565b565b8061004f565b905035906100688261006a565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176100b557604052565b61007d565b906100686100c760405190565b9283610093565b67ffffffffffffffff81116100b55760208091020190565b909291926100fb6100f6826100ce565b6100ba565b938185526020808601920283019281841161005657915b83831061011f5750505050565b6020809161012d848661005b565b815201920191610112565b9080601f8301121561005657816020610043933591016100e6565b91909160a0818403126100565761016a838261005b565b92610178816020840161005b565b92610186826040850161005b565b926101948360608301610070565b92608082013567ffffffffffffffff8111610056576100439201610138565b9052565b906101d76101d06101c6845190565b8084529260200190565b9260200190565b9060005b8181106101e85750505090565b9091926102056101fe6001928651815260200190565b9460200190565b9291016101db565b6020808252610043929101906101b7565b346100565761024961023d610234366004610153565b93929092610bee565b6040519182918261020d565b0390f35b346100565761024961023d610263366004610153565b93929092610421565b6100436100436100439290565b61004390610037906001600160a01b031682565b61004390610279565b6100439061028d565b9050519061006882610046565b90602082820312610056576100439161029f565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b818102929181159184041417156102f557565b6102cc565b906103076100f6836100ce565b918252565b369037565b90610068610327610321846102fa565b936100ce565b601f19016020840161030c565b60001981146102f55760010190565b634e487b7160e01b600052603260045260246000fd5b90610362825190565b811015610373576020809102010190565b610343565b6100439051610037565b6100376100436100439290565b61004390610382565b905051906100688261006a565b906020828203126100565761004391610398565b6101b390610037565b60208101929161006891906103b9565b919082018092116102f557565b9160206100689294936103fa604082019660008301906103b9565b0152565b916020610068929493610419604082019660008301906103b9565b019015159052565b93949391929061044261043d610437600e61026c565b94610296565b610296565b9163741bef1a61045b61045460405190565b9160e01b90565b8152602081600481875afa908115610a18576104899161048391600091610bc0575b50610296565b92610296565b906104a361049e866104998b5190565b6102e2565b610311565b976104ae600061026c565b6104b9610043835190565b811015610bb6576104d26104cd8284610359565b610378565b90816104ef6104e96104e4600061038f565b610037565b91610037565b14610bae575b6352f55eed61050661045460405190565b81526020818061051986600483016103c2565b03818b5afa8015610a185761054891600091610b90575b506105458d61053f8c866102e2565b90610359565b52565b63c3c7b9e961055961045460405190565b81526020818061056c86600483016103c2565b03818b5afa8015610a18576105a591600091610b72575b506105458d61053f6105958d876102e2565b61059f600161026c565b906103d2565b631aa4ace56105b661045460405190565b8152602081806105c986600483016103c2565b03818b5afa8015610a18576105fc91600091610b54575b506105458d61053f6105f28d876102e2565b61059f600261026c565b632c668ec161060d61045460405190565b8152602081806106218887600484016103df565b03818b5afa8015610a185761065491600091610b36575b506105458d61053f61064a8d876102e2565b61059f600361026c565b63ab2f3ad461066561045460405190565b81526020818061067886600483016103c2565b03818b5afa8015610a18576106ab91600091610b18575b506105458d61053f6106a18d876102e2565b61059f600461026c565b634a993ee96106bc61045460405190565b8152602081806106cf86600483016103c2565b03818b5afa8015610a185761070291600091610afa575b506105458d61053f6106f88d876102e2565b61059f600561026c565b63ad1e4f8d61071361045460405190565b81526020818061072686600483016103c2565b03818b5afa8015610a185761075991600091610adc575b506105458d61053f61074f8d876102e2565b61059f600661026c565b638a78daa861076a61045460405190565b81526020818061077d86600483016103c2565b03818b5afa8015610a18576107b091600091610abe575b506105458d61053f6107a68d876102e2565b61059f600761026c565b6107d660206107be87610296565b639698d25a906107cd60405190565b93849260e01b90565b825281806107e788600483016103c2565b03915afa8015610a185761081991600091610aa0575b506105458d61053f61080f8d876102e2565b61059f600861026c565b6381a612d661082a61045460405190565b81526020818061083d86600483016103c2565b03818b5afa8015610a185761087091600091610a82575b506105458d61053f6108668d876102e2565b61059f600961026c565b63e124e6d261088161045460405190565b81526020818061089486600483016103c2565b03818b5afa8015610a18576108c791600091610a64575b506105458d61053f6108bd8d876102e2565b61059f600a61026c565b63f07456ce6108d861045460405190565b8152602081806108eb86600483016103c2565b03818b5afa8015610a185761091e91600091610a46575b506105458d61053f6109148d876102e2565b61059f600b61026c565b61092786610296565b6040516356c8c2c160e01b815260208180610947600088600484016103fe565b0381855afa918215610a18576109a9946109878f6020958e91600196600092610a1d575b5061053f61097d61054593948b6102e2565b61059f600c61026c565b60405180968194829361099e6356c8c2c160e01b90565b8452600484016103fe565b03915afa918215610a18576109e5926109e0916000916109ea575b506105458d61053f6109d68d876102e2565b61059f600d61026c565b610334565b6104ae565b610a0b915060203d8111610a11575b610a038183610093565b8101906103a5565b386109c4565b503d6109f9565b6102c0565b610545925061097d610a3e61053f928b3d8111610a1157610a038183610093565b93505061096b565b610a5e915060203d8111610a1157610a038183610093565b38610902565b610a7c915060203d8111610a1157610a038183610093565b386108ab565b610a9a915060203d8111610a1157610a038183610093565b38610854565b610ab8915060203d8111610a1157610a038183610093565b386107fd565b610ad6915060203d8111610a1157610a038183610093565b38610794565b610af4915060203d8111610a1157610a038183610093565b3861073d565b610b12915060203d8111610a1157610a038183610093565b386106e6565b610b30915060203d8111610a1157610a038183610093565b3861068f565b610b4e915060203d8111610a1157610a038183610093565b38610638565b610b6c915060203d8111610a1157610a038183610093565b386105e0565b610b8a915060203d8111610a1157610a038183610093565b38610583565b610ba8915060203d8111610a1157610a038183610093565b38610530565b8891506104f5565b5050505050505050565b610be1915060203d8111610be7575b610bd98183610093565b8101906102ac565b3861047d565b503d610bcf565b939493919290610c0461043d610437600f61026c565b9163741bef1a610c1661045460405190565b8152602081600481875afa908115610a1857610c3d9161048391600091610bc05750610296565b90610c4d61049e866104998b5190565b97610c58600061026c565b610c63610043835190565b811015610bb657610c776104cd8284610359565b9081610c896104e96104e4600061038f565b146111a2575b6352f55eed610ca061045460405190565b815260208180610cb386600483016103c2565b03818b5afa8015610a1857610cd891600091610b9057506105458d61053f8c866102e2565b63c3c7b9e9610ce961045460405190565b815260208180610cfc86600483016103c2565b03818b5afa8015610a1857610d2491600091610b7257506105458d61053f6105958d876102e2565b631aa4ace5610d3561045460405190565b815260208180610d4886600483016103c2565b03818b5afa8015610a1857610d7091600091610b5457506105458d61053f6105f28d876102e2565b632c668ec1610d8161045460405190565b815260208180610d958887600484016103df565b03818b5afa8015610a1857610dbd91600091610b3657506105458d61053f61064a8d876102e2565b63ab2f3ad4610dce61045460405190565b815260208180610de186600483016103c2565b03818b5afa8015610a1857610e0991600091610b1857506105458d61053f6106a18d876102e2565b634a993ee9610e1a61045460405190565b815260208180610e2d86600483016103c2565b03818b5afa8015610a1857610e5591600091610afa57506105458d61053f6106f88d876102e2565b63ad1e4f8d610e6661045460405190565b815260208180610e7986600483016103c2565b03818b5afa8015610a1857610ea191600091610adc57506105458d61053f61074f8d876102e2565b638a78daa8610eb261045460405190565b815260208180610ec586600483016103c2565b03818b5afa8015610a1857610eed91600091610abe57506105458d61053f6107a68d876102e2565b610ef685610296565b639698d25a610f0761045460405190565b815260208180610f1a87600483016103c2565b0381855afa918215610a1857610f4d8b8f94610f5c95602095600092611179575b5061053f61080f61054593948a6102e2565b631045c74e906107cd60405190565b82528180610f6d88600483016103c2565b03915afa8015610a1857610f9491600091610a8257506105458d61053f6108668d876102e2565b6381a612d6610fa561045460405190565b815260208180610fb886600483016103c2565b03818b5afa8015610a1857610fe091600091610a6457506105458d61053f6108bd8d876102e2565b63e124e6d2610ff161045460405190565b81526020818061100486600483016103c2565b03818b5afa8015610a185761102c91600091610a4657506105458d61053f6109148d876102e2565b63f07456ce61103d61045460405190565b81526020818061105086600483016103c2565b03818b5afa8015610a18576110799160009161115b575b506105458d61053f61097d8d876102e2565b61108286610296565b6040516356c8c2c160e01b8152602081806110a2600088600484016103fe565b0381855afa918215610a18576110d8946109878f6020958e91600196600092611132575b5061053f6109d661054593948b6102e2565b03915afa918215610a185761110f926109e091600091611114575b506105458d61053f6111058d876102e2565b61059f600e61026c565b610c58565b61112c915060203d8111610a1157610a038183610093565b386110f3565b61054592506109d661115361053f928b3d8111610a1157610a038183610093565b9350506110c6565b611173915060203d8111610a1157610a038183610093565b38611067565b610545925061080f61119a61053f92893d8111610a1157610a038183610093565b935050610f3b565b889150610c8f56fea26469706673582212206e5d7145585a532d21a5f7c5b460d021e031b1bd04561e863542ebaca844a89864736f6c63430008130033
Deployed ByteCode
0x6080604052600436101561001257600080fd5b60003560e01c8063d3f3265c146100325763f75e8101036100565761024d565b61021e565b6001600160a01b031690565b90565b61004f81610037565b0361005657565b600080fd5b9050359061006882610046565b565b8061004f565b905035906100688261006a565b634e487b7160e01b600052604160045260246000fd5b90601f01601f1916810190811067ffffffffffffffff8211176100b557604052565b61007d565b906100686100c760405190565b9283610093565b67ffffffffffffffff81116100b55760208091020190565b909291926100fb6100f6826100ce565b6100ba565b938185526020808601920283019281841161005657915b83831061011f5750505050565b6020809161012d848661005b565b815201920191610112565b9080601f8301121561005657816020610043933591016100e6565b91909160a0818403126100565761016a838261005b565b92610178816020840161005b565b92610186826040850161005b565b926101948360608301610070565b92608082013567ffffffffffffffff8111610056576100439201610138565b9052565b906101d76101d06101c6845190565b8084529260200190565b9260200190565b9060005b8181106101e85750505090565b9091926102056101fe6001928651815260200190565b9460200190565b9291016101db565b6020808252610043929101906101b7565b346100565761024961023d610234366004610153565b93929092610bee565b6040519182918261020d565b0390f35b346100565761024961023d610263366004610153565b93929092610421565b6100436100436100439290565b61004390610037906001600160a01b031682565b61004390610279565b6100439061028d565b9050519061006882610046565b90602082820312610056576100439161029f565b6040513d6000823e3d90fd5b634e487b7160e01b600052601160045260246000fd5b818102929181159184041417156102f557565b6102cc565b906103076100f6836100ce565b918252565b369037565b90610068610327610321846102fa565b936100ce565b601f19016020840161030c565b60001981146102f55760010190565b634e487b7160e01b600052603260045260246000fd5b90610362825190565b811015610373576020809102010190565b610343565b6100439051610037565b6100376100436100439290565b61004390610382565b905051906100688261006a565b906020828203126100565761004391610398565b6101b390610037565b60208101929161006891906103b9565b919082018092116102f557565b9160206100689294936103fa604082019660008301906103b9565b0152565b916020610068929493610419604082019660008301906103b9565b019015159052565b93949391929061044261043d610437600e61026c565b94610296565b610296565b9163741bef1a61045b61045460405190565b9160e01b90565b8152602081600481875afa908115610a18576104899161048391600091610bc0575b50610296565b92610296565b906104a361049e866104998b5190565b6102e2565b610311565b976104ae600061026c565b6104b9610043835190565b811015610bb6576104d26104cd8284610359565b610378565b90816104ef6104e96104e4600061038f565b610037565b91610037565b14610bae575b6352f55eed61050661045460405190565b81526020818061051986600483016103c2565b03818b5afa8015610a185761054891600091610b90575b506105458d61053f8c866102e2565b90610359565b52565b63c3c7b9e961055961045460405190565b81526020818061056c86600483016103c2565b03818b5afa8015610a18576105a591600091610b72575b506105458d61053f6105958d876102e2565b61059f600161026c565b906103d2565b631aa4ace56105b661045460405190565b8152602081806105c986600483016103c2565b03818b5afa8015610a18576105fc91600091610b54575b506105458d61053f6105f28d876102e2565b61059f600261026c565b632c668ec161060d61045460405190565b8152602081806106218887600484016103df565b03818b5afa8015610a185761065491600091610b36575b506105458d61053f61064a8d876102e2565b61059f600361026c565b63ab2f3ad461066561045460405190565b81526020818061067886600483016103c2565b03818b5afa8015610a18576106ab91600091610b18575b506105458d61053f6106a18d876102e2565b61059f600461026c565b634a993ee96106bc61045460405190565b8152602081806106cf86600483016103c2565b03818b5afa8015610a185761070291600091610afa575b506105458d61053f6106f88d876102e2565b61059f600561026c565b63ad1e4f8d61071361045460405190565b81526020818061072686600483016103c2565b03818b5afa8015610a185761075991600091610adc575b506105458d61053f61074f8d876102e2565b61059f600661026c565b638a78daa861076a61045460405190565b81526020818061077d86600483016103c2565b03818b5afa8015610a18576107b091600091610abe575b506105458d61053f6107a68d876102e2565b61059f600761026c565b6107d660206107be87610296565b639698d25a906107cd60405190565b93849260e01b90565b825281806107e788600483016103c2565b03915afa8015610a185761081991600091610aa0575b506105458d61053f61080f8d876102e2565b61059f600861026c565b6381a612d661082a61045460405190565b81526020818061083d86600483016103c2565b03818b5afa8015610a185761087091600091610a82575b506105458d61053f6108668d876102e2565b61059f600961026c565b63e124e6d261088161045460405190565b81526020818061089486600483016103c2565b03818b5afa8015610a18576108c791600091610a64575b506105458d61053f6108bd8d876102e2565b61059f600a61026c565b63f07456ce6108d861045460405190565b8152602081806108eb86600483016103c2565b03818b5afa8015610a185761091e91600091610a46575b506105458d61053f6109148d876102e2565b61059f600b61026c565b61092786610296565b6040516356c8c2c160e01b815260208180610947600088600484016103fe565b0381855afa918215610a18576109a9946109878f6020958e91600196600092610a1d575b5061053f61097d61054593948b6102e2565b61059f600c61026c565b60405180968194829361099e6356c8c2c160e01b90565b8452600484016103fe565b03915afa918215610a18576109e5926109e0916000916109ea575b506105458d61053f6109d68d876102e2565b61059f600d61026c565b610334565b6104ae565b610a0b915060203d8111610a11575b610a038183610093565b8101906103a5565b386109c4565b503d6109f9565b6102c0565b610545925061097d610a3e61053f928b3d8111610a1157610a038183610093565b93505061096b565b610a5e915060203d8111610a1157610a038183610093565b38610902565b610a7c915060203d8111610a1157610a038183610093565b386108ab565b610a9a915060203d8111610a1157610a038183610093565b38610854565b610ab8915060203d8111610a1157610a038183610093565b386107fd565b610ad6915060203d8111610a1157610a038183610093565b38610794565b610af4915060203d8111610a1157610a038183610093565b3861073d565b610b12915060203d8111610a1157610a038183610093565b386106e6565b610b30915060203d8111610a1157610a038183610093565b3861068f565b610b4e915060203d8111610a1157610a038183610093565b38610638565b610b6c915060203d8111610a1157610a038183610093565b386105e0565b610b8a915060203d8111610a1157610a038183610093565b38610583565b610ba8915060203d8111610a1157610a038183610093565b38610530565b8891506104f5565b5050505050505050565b610be1915060203d8111610be7575b610bd98183610093565b8101906102ac565b3861047d565b503d610bcf565b939493919290610c0461043d610437600f61026c565b9163741bef1a610c1661045460405190565b8152602081600481875afa908115610a1857610c3d9161048391600091610bc05750610296565b90610c4d61049e866104998b5190565b97610c58600061026c565b610c63610043835190565b811015610bb657610c776104cd8284610359565b9081610c896104e96104e4600061038f565b146111a2575b6352f55eed610ca061045460405190565b815260208180610cb386600483016103c2565b03818b5afa8015610a1857610cd891600091610b9057506105458d61053f8c866102e2565b63c3c7b9e9610ce961045460405190565b815260208180610cfc86600483016103c2565b03818b5afa8015610a1857610d2491600091610b7257506105458d61053f6105958d876102e2565b631aa4ace5610d3561045460405190565b815260208180610d4886600483016103c2565b03818b5afa8015610a1857610d7091600091610b5457506105458d61053f6105f28d876102e2565b632c668ec1610d8161045460405190565b815260208180610d958887600484016103df565b03818b5afa8015610a1857610dbd91600091610b3657506105458d61053f61064a8d876102e2565b63ab2f3ad4610dce61045460405190565b815260208180610de186600483016103c2565b03818b5afa8015610a1857610e0991600091610b1857506105458d61053f6106a18d876102e2565b634a993ee9610e1a61045460405190565b815260208180610e2d86600483016103c2565b03818b5afa8015610a1857610e5591600091610afa57506105458d61053f6106f88d876102e2565b63ad1e4f8d610e6661045460405190565b815260208180610e7986600483016103c2565b03818b5afa8015610a1857610ea191600091610adc57506105458d61053f61074f8d876102e2565b638a78daa8610eb261045460405190565b815260208180610ec586600483016103c2565b03818b5afa8015610a1857610eed91600091610abe57506105458d61053f6107a68d876102e2565b610ef685610296565b639698d25a610f0761045460405190565b815260208180610f1a87600483016103c2565b0381855afa918215610a1857610f4d8b8f94610f5c95602095600092611179575b5061053f61080f61054593948a6102e2565b631045c74e906107cd60405190565b82528180610f6d88600483016103c2565b03915afa8015610a1857610f9491600091610a8257506105458d61053f6108668d876102e2565b6381a612d6610fa561045460405190565b815260208180610fb886600483016103c2565b03818b5afa8015610a1857610fe091600091610a6457506105458d61053f6108bd8d876102e2565b63e124e6d2610ff161045460405190565b81526020818061100486600483016103c2565b03818b5afa8015610a185761102c91600091610a4657506105458d61053f6109148d876102e2565b63f07456ce61103d61045460405190565b81526020818061105086600483016103c2565b03818b5afa8015610a18576110799160009161115b575b506105458d61053f61097d8d876102e2565b61108286610296565b6040516356c8c2c160e01b8152602081806110a2600088600484016103fe565b0381855afa918215610a18576110d8946109878f6020958e91600196600092611132575b5061053f6109d661054593948b6102e2565b03915afa918215610a185761110f926109e091600091611114575b506105458d61053f6111058d876102e2565b61059f600e61026c565b610c58565b61112c915060203d8111610a1157610a038183610093565b386110f3565b61054592506109d661115361053f928b3d8111610a1157610a038183610093565b9350506110c6565b611173915060203d8111610a1157610a038183610093565b38611067565b610545925061080f61119a61053f92893d8111610a1157610a038183610093565b935050610f3b565b889150610c8f56fea26469706673582212206e5d7145585a532d21a5f7c5b460d021e031b1bd04561e863542ebaca844a89864736f6c63430008130033