Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- AddressesProvider
- Optimization enabled
- true
- Compiler version
- v0.7.6+commit.7338295f
- Optimization runs
- 200
- EVM Version
- istanbul
- Verified at
- 2024-06-07T06:54:56.074315Z
contracts/protocol/core/AddressesProvider.sol
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.7.6;
import {Ownable} from "../../dependencies/openzeppelin/contracts/Ownable.sol";
import {IAddressesProvider} from "../../interfaces/IAddressesProvider.sol";
contract AddressesProvider is Ownable, IAddressesProvider {
event UsdphUpdated(address indexed newAddress);
event PhlpUpdated(address indexed newAddress);
event PhlpManagerUpdated(address indexed newAddress);
event VaultUpdated(address indexed newAddress);
event VaultConfiguratorUpdated(address indexed newAddress);
event RouterUpdated(address indexed newAddress);
event OrderBookUpdated(address indexed newAddress);
event PositionManagerUpdated(address indexed newAddress);
event PositionRouterUpdated(address indexed newAddress);
event PriceOracleUpdated(address indexed newAddress);
event ShortsTrackerUpdated(address indexed newAddress);
event TreasuryUpdated(address indexed newAddress);
event FeeDistributionUpdated(address indexed newAddress);
mapping(bytes32 => address) private _addresses;
bytes32 private constant USDPH = "USDPH";
bytes32 private constant PHLP = "PHLP";
bytes32 private constant PHLP_MANAGER = "PHLP_MANAGER";
bytes32 private constant VAULT = "VAULT";
bytes32 private constant VAULT_CONFIGURATOR = "VAULT_CONFIGURATOR";
bytes32 private constant ROUTER = "ROUTER";
bytes32 private constant ORDER_BOOK = "ORDER_BOOK";
bytes32 private constant POSITION_MANAGER = "POSITION_MANAGER";
bytes32 private constant POSITION_ROUTER = "POSITION_ROUTER";
bytes32 private constant PRICE_ORACLE = "PRICE_ORACLE";
bytes32 private constant SHORTS_TRACKER = "SHORTS_TRACKER";
bytes32 private constant TREASURY = "TREASURY";
bytes32 private constant FEE_DISTRIBUTION = "FEE_DISTRIBUTION";
constructor() Ownable() {}
/**
* @dev Returns the address of the USDPH
* @return The USDPH address
**/
function getUsdph() external view override returns (address) {
return _addresses[USDPH];
}
/**
* @dev Updates the address of the USDPH
* @param usdph The new USDPH
**/
function setUsdph(address usdph) external onlyOwner {
_addresses[USDPH] = usdph;
emit UsdphUpdated(usdph);
}
/**
* @dev Returns the address of the PHLP
* @return The PHLP address
**/
function getPhlp() external view override returns (address) {
return _addresses[PHLP];
}
/**
* @dev Updates the address of the PHLP
* @param phlp The new PHLP
**/
function setPhlp(address phlp) external onlyOwner {
_addresses[PHLP] = phlp;
emit PhlpUpdated(phlp);
}
/**
* @dev Returns the address of the PHLP Manager
* @return The PHLP Manager address
**/
function getPhlpManager() external view override returns (address) {
return _addresses[PHLP_MANAGER];
}
/**
* @dev Updates the address of the PHLP Manager
* @param phlpManager The new PHLP Manager
**/
function setPhlpManager(address phlpManager) external onlyOwner {
_addresses[PHLP_MANAGER] = phlpManager;
emit PhlpManagerUpdated(phlpManager);
}
/**
* @dev Returns the address of the vault
* @return The vault address
**/
function getVault() external view override returns (address) {
return _addresses[VAULT];
}
/**
* @dev Updates the address of the vault
* @param vault The new vault
**/
function setVault(address vault) external onlyOwner {
_addresses[VAULT] = vault;
emit VaultUpdated(vault);
}
/**
* @dev Returns the address of the vault configurator
* @return The vault configurator address
**/
function getVaultConfigurator() external view override returns (address) {
return _addresses[VAULT_CONFIGURATOR];
}
/**
* @dev Updates the address of the vault configurator
* @param vaultConfigurator The new vault configurator
**/
function setVaultConfigurator(
address vaultConfigurator
) external onlyOwner {
_addresses[VAULT_CONFIGURATOR] = vaultConfigurator;
emit VaultConfiguratorUpdated(vaultConfigurator);
}
/**
* @dev Returns the address of the router
* @return The router address
**/
function getRouter() external view override returns (address) {
return _addresses[ROUTER];
}
/**
* @dev Updates the address of the router
* @param router The new router
**/
function setRouter(address router) external onlyOwner {
_addresses[ROUTER] = router;
emit RouterUpdated(router);
}
/**
* @dev Returns the address of the order book
* @return The order book address
**/
function getOrderBook() external view override returns (address) {
return _addresses[ORDER_BOOK];
}
/**
* @dev Updates the address of the order book
* @param orderBook The new order book
**/
function setOrderBook(address orderBook) external onlyOwner {
_addresses[ORDER_BOOK] = orderBook;
emit RouterUpdated(orderBook);
}
/**
* @dev Returns the address of the position manager
* @return The position manager address
**/
function getPositionManager() external view override returns (address) {
return _addresses[POSITION_MANAGER];
}
/**
* @dev Updates the address of the position manager
* @param positionManager The new position manager
**/
function setPositionManager(address positionManager) external onlyOwner {
_addresses[POSITION_MANAGER] = positionManager;
emit RouterUpdated(positionManager);
}
/**
* @dev Returns the address of the position router
* @return The position router address
**/
function getPositionRouter() external view override returns (address) {
return _addresses[POSITION_ROUTER];
}
/**
* @dev Updates the address of the position router
* @param positionRouter The new position router
**/
function setPositionRouter(address positionRouter) external onlyOwner {
_addresses[POSITION_ROUTER] = positionRouter;
emit RouterUpdated(positionRouter);
}
/**
* @dev Returns the address of the price oracle
* @return The price oracle address
**/
function getPriceOracle() external view override returns (address) {
return _addresses[PRICE_ORACLE];
}
/**
* @dev Updates the address of the price oracle
* @param priceOracle The new price oracle
**/
function setPriceOracle(address priceOracle) external onlyOwner {
_addresses[PRICE_ORACLE] = priceOracle;
emit PriceOracleUpdated(priceOracle);
}
/**
* @dev Returns the address of the shorts tracker
* @return The shorts tracker address
**/
function getShortsTracker() external view override returns (address) {
return _addresses[SHORTS_TRACKER];
}
/**
* @dev Updates the address of the shorts tracker
* @param shortsTracker The new shorts tracker
**/
function setShortsTracker(address shortsTracker) external onlyOwner {
_addresses[SHORTS_TRACKER] = shortsTracker;
emit ShortsTrackerUpdated(shortsTracker);
}
/**
* @dev Returns the address of the treasury
* @return The treasury address
**/
function getTreasury() external view override returns (address payable) {
return payable(_addresses[TREASURY]);
}
/**
* @dev Updates the address of the treasury
* @param treasury The new treasury
**/
function setTreasury(address treasury) external onlyOwner {
_addresses[TREASURY] = treasury;
emit TreasuryUpdated(treasury);
}
/**
* @dev Returns the address of the fee distribution
* @return The fee distribution address
**/
function getFeeDistribution() external view override returns (address) {
return _addresses[FEE_DISTRIBUTION];
}
/**
* @dev Updates the address of the fee distribution
* @param feeDistribution The new fee distribution
**/
function setFeeDistribution(address feeDistribution) external onlyOwner {
_addresses[FEE_DISTRIBUTION] = feeDistribution;
emit FeeDistributionUpdated(feeDistribution);
}
}
contracts/dependencies/openzeppelin/contracts/Context.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
contracts/dependencies/openzeppelin/contracts/Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
import "./Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
contracts/interfaces/IAddressesProvider.sol
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.7.6;
interface IAddressesProvider {
function getUsdph() external view returns (address);
function getPhlp() external view returns (address);
function getPhlpManager() external view returns (address);
function getVault() external view returns (address);
function getVaultConfigurator() external view returns (address);
function getRouter() external view returns (address);
function getOrderBook() external view returns (address);
function getPositionManager() external view returns (address);
function getPositionRouter() external view returns (address);
function getPriceOracle() external view returns (address);
function getShortsTracker() external view returns (address);
function getTreasury() external view returns (address payable);
function getFeeDistribution() external view returns (address);
}
Compiler Settings
{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"istanbul"}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"FeeDistributionUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OrderBookUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PhlpManagerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PhlpUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PositionManagerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PositionRouterUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PriceOracleUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RouterUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ShortsTrackerUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"TreasuryUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"UsdphUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"VaultConfiguratorUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"VaultUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getFeeDistribution","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOrderBook","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPhlp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPhlpManager","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPositionManager","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPositionRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getPriceOracle","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getShortsTracker","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"getTreasury","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getUsdph","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getVault","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getVaultConfigurator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeDistribution","inputs":[{"type":"address","name":"feeDistribution","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOrderBook","inputs":[{"type":"address","name":"orderBook","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPhlp","inputs":[{"type":"address","name":"phlp","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPhlpManager","inputs":[{"type":"address","name":"phlpManager","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPositionManager","inputs":[{"type":"address","name":"positionManager","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPositionRouter","inputs":[{"type":"address","name":"positionRouter","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPriceOracle","inputs":[{"type":"address","name":"priceOracle","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRouter","inputs":[{"type":"address","name":"router","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setShortsTracker","inputs":[{"type":"address","name":"shortsTracker","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTreasury","inputs":[{"type":"address","name":"treasury","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setUsdph","inputs":[{"type":"address","name":"usdph","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setVault","inputs":[{"type":"address","name":"vault","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setVaultConfigurator","inputs":[{"type":"address","name":"vaultConfigurator","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115978061007d6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638d928af811610104578063c0d78655116100a2578063f0f4426011610071578063f0f4426014610422578063f2fde38b14610448578063fca513a81461046e578063fd591dcd14610476576101cf565b8063c0d78655146103a8578063cfaa55eb146103ce578063d34ee093146103f4578063d759932b1461041a576101cf565b80639a1598c8116100de5780639a1598c81461034c578063b0f479a114610372578063b248c4ef1461037a578063bcbbab8714610382576101cf565b80638d928af8146103165780638da5cb5b1461031e578063987af4b214610326576101cf565b8063530e784f116101715780636a22dede1161014b5780636a22dede146102f6578063715018a6146102fe578063752f77f1146103065780638ad6de4e1461030e576101cf565b8063530e784f146102845780635760f2e3146102aa5780636817031b146102d0576101cf565b80631919db33116101ad5780631919db33146102285780633b19e84a1461024e5780633bd57e2b146102565780634bd9a9aa1461027c576101cf565b8063028d27d8146101d45780630af78559146101f8578063189e31cb14610200575b600080fd5b6101dc61047e565b604080516001600160a01b039092168252519081900360200190f35b6101dc6104c4565b6102266004803603602081101561021657600080fd5b50356001600160a01b031661050c565b005b6102266004803603602081101561023e57600080fd5b50356001600160a01b03166105f6565b6101dc6106de565b6102266004803603602081101561026c57600080fd5b50356001600160a01b0316610720565b6101dc610804565b6102266004803603602081101561029a57600080fd5b50356001600160a01b031661084d565b610226600480360360208110156102c057600080fd5b50356001600160a01b0316610931565b610226600480360360208110156102e657600080fd5b50356001600160a01b0316610a07565b6101dc610ae4565b610226610b2e565b6101dc610bda565b6101dc610c24565b6101dc610c63565b6101dc610ca2565b6102266004803603602081101561033c57600080fd5b50356001600160a01b0316610cb1565b6102266004803603602081101561036257600080fd5b50356001600160a01b0316610d8e565b6101dc610e5e565b6101dc610e9e565b6102266004803603602081101561039857600080fd5b50356001600160a01b0316610ee2565b610226600480360360208110156103be57600080fd5b50356001600160a01b0316610fbe565b610226600480360360208110156103e457600080fd5b50356001600160a01b031661108a565b6102266004803603602081101561040a57600080fd5b50356001600160a01b031661115f565b6101dc611245565b6102266004803603602081101561043857600080fd5b50356001600160a01b0316611291565b6102266004803603602081101561045e57600080fd5b50356001600160a01b0316611371565b6101dc611473565b6101dc6114b9565b6b282426282fa6a0a720a3a2a960a11b60005260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d2546001600160a01b031690565b6d29a427a92a29afaa2920a1a5a2a960911b60005260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be546001600160a01b031690565b6105146114f7565b6001600160a01b0316610525610ca2565b6001600160a01b03161461056e576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b600090815260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab80546001600160a01b0319166001600160a01b03841690811790915560405190917f5df129fb98a07693c9030aa4c578c3eaa60cfde21b19b074f85c92f96576552291a250565b6105fe6114f7565b6001600160a01b031661060f610ca2565b6001600160a01b031614610658576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2322a2afa224a9aa2924a12aaa24a7a760811b600090815260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca2603280546001600160a01b0319166001600160a01b03841690811790915560405190917f95de321ffc02a03054b16d86e2999e2c9bc6d1ac3b60b126204f18308561c36391a250565b67545245415355525960c01b60005260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e41546001600160a01b031690565b6107286114f7565b6001600160a01b0316610739610ca2565b6001600160a01b031614610782576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b282426282fa6a0a720a3a2a960a11b600090815260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d280546001600160a01b0319166001600160a01b03841690811790915560405190917f327e677553e85486d48c2680d00892ccecfac636751c9b0f8540d1304559f65c91a250565b6e2827a9a4aa24a7a72fa927aaaa22a960891b60005260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa9546001600160a01b031690565b6108556114f7565b6001600160a01b0316610866610ca2565b6001600160a01b0316146108af576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b50524943455f4f5241434c4560a01b600090815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b0319166001600160a01b03841690811790915560405190917fefe8ab924ca486283a79dc604baa67add51afb82af1db8ac386ebbba643cdffd91a250565b6109396114f7565b6001600160a01b031661094a610ca2565b6001600160a01b031614610993576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b600090815260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b610a0f6114f7565b6001600160a01b0316610a20610ca2565b6001600160a01b031614610a69576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b64159055531560da1b600090815260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e80546001600160a01b0319166001600160a01b03841690811790915560405190917f161584aed96e7f34998117c9ad67e2d21ff46d2a42775c22b11ed282f3c7b2cd91a250565b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b60005260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b9546001600160a01b031690565b610b366114f7565b6001600160a01b0316610b47610ca2565b6001600160a01b031614610b90576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6f2322a2afa224a9aa2924a12aaa24a7a760811b60005260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca26032546001600160a01b031690565b640aaa688a0960db1b60005260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d4546001600160a01b031690565b64159055531560da1b60005260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e546001600160a01b031690565b6000546001600160a01b031690565b610cb96114f7565b6001600160a01b0316610cca610ca2565b6001600160a01b031614610d13576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b640aaa688a0960db1b600090815260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d480546001600160a01b0319166001600160a01b03841690811790915560405190917f5f8a23f4d43178da73efd51570571f4e6d90d60623f7d9ebc673b49183d787c191a250565b610d966114f7565b6001600160a01b0316610da7610ca2565b6001600160a01b031614610df0576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b694f524445525f424f4f4b60b01b600090815260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c5680546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b652927aaaa22a960d11b60005260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f44546001600160a01b031690565b694f524445525f424f4f4b60b01b60005260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c56546001600160a01b031690565b610eea6114f7565b6001600160a01b0316610efb610ca2565b6001600160a01b031614610f44576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b63050484c560e41b600090815260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d95975280546001600160a01b0319166001600160a01b03841690811790915560405190917f1cc55c2063d1c7f83a3698ef8fc252ed7f6d8484710ea74b1280114b130f8f3491a250565b610fc66114f7565b6001600160a01b0316610fd7610ca2565b6001600160a01b031614611020576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b652927aaaa22a960d11b600090815260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f4480546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6110926114f7565b6001600160a01b03166110a3610ca2565b6001600160a01b0316146110ec576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6e2827a9a4aa24a7a72fa927aaaa22a960891b600090815260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6111676114f7565b6001600160a01b0316611178610ca2565b6001600160a01b0316146111c1576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6d29a427a92a29afaa2920a1a5a2a960911b600090815260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be80546001600160a01b0319166001600160a01b03841690811790915560405190917fa648500248b4cea91c47c2d0750e94aa0a2c26cbb70b2f24a03282e9f3ee820591a250565b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b60005260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab546001600160a01b031690565b6112996114f7565b6001600160a01b03166112aa610ca2565b6001600160a01b0316146112f3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b67545245415355525960c01b600090815260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e4180546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b6113796114f7565b6001600160a01b031661138a610ca2565b6001600160a01b0316146113d3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6001600160a01b0381166114185760405162461bcd60e51b81526004018080602001828103825260268152602001806114fc6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6b50524943455f4f5241434c4560a01b60005260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524546001600160a01b031690565b63050484c560e41b60005260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d959752546001600160a01b031690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc80a2646970667358221220f793f315ce3049c7a260abe3b6c208c2a5602c7df9be1be2b2de2b252e54d16764736f6c63430007060033
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638d928af811610104578063c0d78655116100a2578063f0f4426011610071578063f0f4426014610422578063f2fde38b14610448578063fca513a81461046e578063fd591dcd14610476576101cf565b8063c0d78655146103a8578063cfaa55eb146103ce578063d34ee093146103f4578063d759932b1461041a576101cf565b80639a1598c8116100de5780639a1598c81461034c578063b0f479a114610372578063b248c4ef1461037a578063bcbbab8714610382576101cf565b80638d928af8146103165780638da5cb5b1461031e578063987af4b214610326576101cf565b8063530e784f116101715780636a22dede1161014b5780636a22dede146102f6578063715018a6146102fe578063752f77f1146103065780638ad6de4e1461030e576101cf565b8063530e784f146102845780635760f2e3146102aa5780636817031b146102d0576101cf565b80631919db33116101ad5780631919db33146102285780633b19e84a1461024e5780633bd57e2b146102565780634bd9a9aa1461027c576101cf565b8063028d27d8146101d45780630af78559146101f8578063189e31cb14610200575b600080fd5b6101dc61047e565b604080516001600160a01b039092168252519081900360200190f35b6101dc6104c4565b6102266004803603602081101561021657600080fd5b50356001600160a01b031661050c565b005b6102266004803603602081101561023e57600080fd5b50356001600160a01b03166105f6565b6101dc6106de565b6102266004803603602081101561026c57600080fd5b50356001600160a01b0316610720565b6101dc610804565b6102266004803603602081101561029a57600080fd5b50356001600160a01b031661084d565b610226600480360360208110156102c057600080fd5b50356001600160a01b0316610931565b610226600480360360208110156102e657600080fd5b50356001600160a01b0316610a07565b6101dc610ae4565b610226610b2e565b6101dc610bda565b6101dc610c24565b6101dc610c63565b6101dc610ca2565b6102266004803603602081101561033c57600080fd5b50356001600160a01b0316610cb1565b6102266004803603602081101561036257600080fd5b50356001600160a01b0316610d8e565b6101dc610e5e565b6101dc610e9e565b6102266004803603602081101561039857600080fd5b50356001600160a01b0316610ee2565b610226600480360360208110156103be57600080fd5b50356001600160a01b0316610fbe565b610226600480360360208110156103e457600080fd5b50356001600160a01b031661108a565b6102266004803603602081101561040a57600080fd5b50356001600160a01b031661115f565b6101dc611245565b6102266004803603602081101561043857600080fd5b50356001600160a01b0316611291565b6102266004803603602081101561045e57600080fd5b50356001600160a01b0316611371565b6101dc611473565b6101dc6114b9565b6b282426282fa6a0a720a3a2a960a11b60005260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d2546001600160a01b031690565b6d29a427a92a29afaa2920a1a5a2a960911b60005260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be546001600160a01b031690565b6105146114f7565b6001600160a01b0316610525610ca2565b6001600160a01b03161461056e576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b600090815260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab80546001600160a01b0319166001600160a01b03841690811790915560405190917f5df129fb98a07693c9030aa4c578c3eaa60cfde21b19b074f85c92f96576552291a250565b6105fe6114f7565b6001600160a01b031661060f610ca2565b6001600160a01b031614610658576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2322a2afa224a9aa2924a12aaa24a7a760811b600090815260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca2603280546001600160a01b0319166001600160a01b03841690811790915560405190917f95de321ffc02a03054b16d86e2999e2c9bc6d1ac3b60b126204f18308561c36391a250565b67545245415355525960c01b60005260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e41546001600160a01b031690565b6107286114f7565b6001600160a01b0316610739610ca2565b6001600160a01b031614610782576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b282426282fa6a0a720a3a2a960a11b600090815260016020527f8db52f4dee84bb2c3f2f020924f7dd665c66eb08e4d2c490419be129bb6006d280546001600160a01b0319166001600160a01b03841690811790915560405190917f327e677553e85486d48c2680d00892ccecfac636751c9b0f8540d1304559f65c91a250565b6e2827a9a4aa24a7a72fa927aaaa22a960891b60005260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa9546001600160a01b031690565b6108556114f7565b6001600160a01b0316610866610ca2565b6001600160a01b0316146108af576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6b50524943455f4f5241434c4560a01b600090815260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d52480546001600160a01b0319166001600160a01b03841690811790915560405190917fefe8ab924ca486283a79dc604baa67add51afb82af1db8ac386ebbba643cdffd91a250565b6109396114f7565b6001600160a01b031661094a610ca2565b6001600160a01b031614610993576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b600090815260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b610a0f6114f7565b6001600160a01b0316610a20610ca2565b6001600160a01b031614610a69576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b64159055531560da1b600090815260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e80546001600160a01b0319166001600160a01b03841690811790915560405190917f161584aed96e7f34998117c9ad67e2d21ff46d2a42775c22b11ed282f3c7b2cd91a250565b6f2827a9a4aa24a7a72fa6a0a720a3a2a960811b60005260016020527f31b85233031f2368ab2416e6d58689ed4cbe400fec2af70859e69d65a4d314b9546001600160a01b031690565b610b366114f7565b6001600160a01b0316610b47610ca2565b6001600160a01b031614610b90576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6f2322a2afa224a9aa2924a12aaa24a7a760811b60005260016020527fa4dbf6f044a6d0803f662a339819ba94024807e664e449ac500b3a5c3ca26032546001600160a01b031690565b640aaa688a0960db1b60005260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d4546001600160a01b031690565b64159055531560da1b60005260016020527fab545b7cc62e3f4ad211f868353a2e687c116b7a352c766f0d490831cdcb852e546001600160a01b031690565b6000546001600160a01b031690565b610cb96114f7565b6001600160a01b0316610cca610ca2565b6001600160a01b031614610d13576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b640aaa688a0960db1b600090815260016020527fc782e6af2d48e2c5ef0b044e5f2605e862ce61154ab6dc8835bb85854dc6d7d480546001600160a01b0319166001600160a01b03841690811790915560405190917f5f8a23f4d43178da73efd51570571f4e6d90d60623f7d9ebc673b49183d787c191a250565b610d966114f7565b6001600160a01b0316610da7610ca2565b6001600160a01b031614610df0576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b694f524445525f424f4f4b60b01b600090815260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c5680546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b652927aaaa22a960d11b60005260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f44546001600160a01b031690565b694f524445525f424f4f4b60b01b60005260016020527f831152f2a5f9a4adbcaae6602eb5edd6cac386a09e15003bbb6c7aba263d4c56546001600160a01b031690565b610eea6114f7565b6001600160a01b0316610efb610ca2565b6001600160a01b031614610f44576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b63050484c560e41b600090815260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d95975280546001600160a01b0319166001600160a01b03841690811790915560405190917f1cc55c2063d1c7f83a3698ef8fc252ed7f6d8484710ea74b1280114b130f8f3491a250565b610fc66114f7565b6001600160a01b0316610fd7610ca2565b6001600160a01b031614611020576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b652927aaaa22a960d11b600090815260016020527f33b3fa34e1f4810b14a068f26da0d807713e45d081735c8dcc7698a1d9a45f4480546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6110926114f7565b6001600160a01b03166110a3610ca2565b6001600160a01b0316146110ec576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6e2827a9a4aa24a7a72fa927aaaa22a960891b600090815260016020527f0bbf8de661a921d405f1d3253462f88e74335fe4833fa1fbcb19e890c8829aa980546001600160a01b0319166001600160a01b038416908117909155604051909160008051602061154283398151915291a250565b6111676114f7565b6001600160a01b0316611178610ca2565b6001600160a01b0316146111c1576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6d29a427a92a29afaa2920a1a5a2a960911b600090815260016020527fdd276eb83685b549e208f5f99ad83cfe1824f631855f8edd92d6c271cf3010be80546001600160a01b0319166001600160a01b03841690811790915560405190917fa648500248b4cea91c47c2d0750e94aa0a2c26cbb70b2f24a03282e9f3ee820591a250565b712b20aaa62a2fa1a7a72324a3aaa920aa27a960711b60005260016020527f57c739f24bb33f7ef5649a64efc88eb00fee33478ab2809f319310fcba19c9ab546001600160a01b031690565b6112996114f7565b6001600160a01b03166112aa610ca2565b6001600160a01b0316146112f3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b67545245415355525960c01b600090815260016020527fabec3bf42c10118f0201dbc23af48d51db076feb8c9f2ecf0d129261aecb0e4180546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b6113796114f7565b6001600160a01b031661138a610ca2565b6001600160a01b0316146113d3576040805162461bcd60e51b81526020600482018190526024820152600080516020611522833981519152604482015290519081900360640190fd5b6001600160a01b0381166114185760405162461bcd60e51b81526004018080602001828103825260268152602001806114fc6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6b50524943455f4f5241434c4560a01b60005260016020527f09c42ce2b8743b2d739b046fe6af227cd392ebe6dc7ade0f7795bfe8b5e8d524546001600160a01b031690565b63050484c560e41b60005260016020527f6515cb9cfd212d768cf69660244b31f0a7f5d40f0b690512c90146970d959752546001600160a01b031690565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc80a2646970667358221220f793f315ce3049c7a260abe3b6c208c2a5602c7df9be1be2b2de2b252e54d16764736f6c63430007060033