Source Code
Overview
S Balance
S Value
$0.00Latest 25 from a total of 26 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Chain Dragon... | 58219284 | 37 days ago | IN | 0 S | 0.00259475 | ||||
| Set Ve Dragon | 58219283 | 37 days ago | IN | 0 S | 0.00255285 | ||||
| Set Gauge Contro... | 58219281 | 37 days ago | IN | 0 S | 0.00253575 | ||||
| Set Lottery Mana... | 58219279 | 37 days ago | IN | 0 S | 0.00254375 | ||||
| Set Dragon Token | 58219275 | 37 days ago | IN | 0 S | 0.00258485 | ||||
| Set Layer Zero E... | 58219273 | 37 days ago | IN | 0 S | 0.00154785 | ||||
| Register Chain | 58219271 | 37 days ago | IN | 0 S | 0.00838765 | ||||
| Register Chain | 58219269 | 37 days ago | IN | 0 S | 0.00831485 | ||||
| Register Chain | 58219265 | 37 days ago | IN | 0 S | 0.0083191 | ||||
| Register Chain | 58219264 | 37 days ago | IN | 0 S | 0.00832565 | ||||
| Register Chain | 58219262 | 37 days ago | IN | 0 S | 0.00839015 | ||||
| Register Chain | 58219261 | 37 days ago | IN | 0 S | 0.00837635 | ||||
| Register Chain | 58219260 | 37 days ago | IN | 0 S | 0.0100996 | ||||
| Set Chain Id To ... | 58219255 | 37 days ago | IN | 0 S | 0.00369625 | ||||
| Set Chain Id To ... | 58219251 | 37 days ago | IN | 0 S | 0.00366695 | ||||
| Set Chain Id To ... | 58219248 | 37 days ago | IN | 0 S | 0.00160105 | ||||
| Set Chain Id To ... | 58219244 | 37 days ago | IN | 0 S | 0.00369625 | ||||
| Set Chain Id To ... | 58219242 | 37 days ago | IN | 0 S | 0.00366695 | ||||
| Set Chain Id To ... | 58219240 | 37 days ago | IN | 0 S | 0.00369625 | ||||
| Set Chain Id To ... | 58219237 | 37 days ago | IN | 0 S | 0.00161425 | ||||
| Set Chain Id To ... | 58219236 | 37 days ago | IN | 0 S | 0.00366695 | ||||
| Set Lz Config | 57892007 | 41 days ago | IN | 0 S | 0.012947 | ||||
| Set Lz Config | 57891923 | 41 days ago | IN | 0 S | 0.0099632 | ||||
| Set Layer Zero E... | 57889735 | 41 days ago | IN | 0 S | 0.00248605 | ||||
| Set Layer Zero E... | 57889673 | 41 days ago | IN | 0 S | 0.00248605 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 57883055 | 41 days ago | Contract Creation | 0 S |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
OmniDragonRegistry
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 1 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/access/Ownable.sol";
import "../../interfaces/config/IOmniDragonRegistry.sol";
/**
* @title OmniDragonRegistry
* @author 0xakita.eth
* @dev Registry for omniDRAGON deployment
*
* Provides:
* - Deterministic address calculation via CREATE2
* - Basic chain configuration storage
* - LayerZero configuration during deployment
*/
contract OmniDragonRegistry is IOmniDragonRegistry, Ownable {
// Chain configuration
mapping(uint16 => IOmniDragonRegistry.ChainConfig) private chainConfigs;
uint16[] private supportedChains;
uint16 private currentChainId;
uint256 public constant MAX_SUPPORTED_CHAINS = 69;
// LayerZero endpoints and mapping
mapping(uint256 => uint32) public chainIdToEid;
mapping(uint32 => uint256) public eidToChainId;
mapping(uint16 => address) public layerZeroEndpoints;
address public immutable layerZeroCommonEndpoint;
address public immutable layerZeroUncommonEndpoint;
// Oracles
mapping(uint16 => address) public priceOracles;
mapping(uint16 => IOmniDragonRegistry.OracleConfig) public oracleConfigs;
address public primaryOracle;
uint32 public primaryChainEid;
mapping(uint16 => address) public secondaryOracles;
// ============ Ecosystem Contract Registry ============
mapping(uint16 => address) public jackpotVaults; // chainId => vault
mapping(uint16 => address) public gasReserves; // chainId => LZ gas reserve
mapping(uint16 => address) public lotteryManagers; // chainId => lottery manager
mapping(uint16 => address) public v4Hooks; // chainId => V4 hook
mapping(uint16 => address) public dragonTokens; // chainId => DRAGON token
// ============ DragonOVault Vault System ============
mapping(uint16 => address) public dragonOVaults; // chainId => DragonOVault vault
mapping(uint16 => address) public veDragonContracts; // chainId => veDRAGON
mapping(uint16 => address) public gaugeControllers; // chainId => GaugeController
mapping(uint16 => address) public lpManagers; // chainId => DragonLPManager
// Hub chain configuration (Base is the hub)
uint16 public hubChainId = 8453; // Base
uint32 public hubChainEid = 30184;
// ============ LayerZero Per-Chain Config ============
mapping(uint16 => IOmniDragonRegistry.LzConfig) public lzConfigs;
// Default LZ config for standard chains (uses common endpoint)
IOmniDragonRegistry.LzConfig public defaultLzConfig;
// Chains that require custom OApp setup (e.g., Monad, Sonic)
mapping(uint16 => bool) public customOAppChains;
// Events
event CurrentChainSet(uint16 indexed chainId);
event LayerZeroConfigured(address indexed oapp, uint32 indexed eid, string configType);
event LayerZeroLibrarySet(address indexed oapp, uint32 indexed eid, address lib, string libraryType);
event LayerZeroEndpointUpdated(uint16 indexed chainId, address endpoint);
event WrappedNativeSymbolUpdated(uint16 indexed chainId, string symbol);
event ChainIdToEidUpdated(uint256 chainId, uint32 eid);
event SecondaryOracleSet(uint16 indexed chainId, address indexed oracle);
event EcosystemContractSet(uint16 indexed chainId, string contractType, address indexed contractAddress);
event HubChainSet(uint16 chainId, uint32 eid);
// Errors
error ChainAlreadyRegistered(uint16 chainId);
error ChainNotRegistered(uint16 chainId);
error ZeroAddress();
error TooManyChains();
struct SetConfigParam { uint32 eid; uint32 configType; bytes config; }
constructor(address _initialOwner) Ownable(_initialOwner) {
currentChainId = uint16(block.chainid);
// Common LayerZero endpoint address (used as default fallback)
layerZeroCommonEndpoint = 0x1a44076050125825900e736c501f859c50fE728c;
layerZeroUncommonEndpoint = 0x6F475642a6e85809B1c36Fa62763669b1b48DD5B;
// Only Base (hub chain) is pre-configured - all other chains configured via setLayerZeroEndpoint()
layerZeroEndpoints[8453] = layerZeroCommonEndpoint; // Base (hub)
chainIdToEid[8453] = 30184; // Base EID
eidToChainId[30184] = 8453;
}
// Internal
function _getDefaultWrappedNativeSymbol(uint256 _chainId) internal pure returns (string memory) {
if (_chainId == 146) return "WS";
if (_chainId == 43114) return "WAVAX";
if (_chainId == 250) return "WFTM";
if (_chainId == 137) return "WMATIC";
if (_chainId == 56) return "WBNB";
if (_chainId == 239) return "WTAC";
if (_chainId == 999) return "WHYPE"; // HyperEVM (Hyperliquid)
if (_chainId == 30390) return "WMONAD";
return "WETH";
}
// Chain config
function setCurrentChainId(uint16 _chainId) external onlyOwner { currentChainId = _chainId; emit CurrentChainSet(_chainId); }
function registerChain(
uint16 _chainId,
string calldata _chainName,
address _wrappedNativeToken,
bool _isActive
) external override onlyOwner {
if (chainConfigs[_chainId].chainId == _chainId) revert ChainAlreadyRegistered(_chainId);
if (supportedChains.length >= MAX_SUPPORTED_CHAINS) revert TooManyChains();
chainConfigs[_chainId] = IOmniDragonRegistry.ChainConfig({
chainId: _chainId,
chainName: _chainName,
wrappedNativeToken: _wrappedNativeToken,
wrappedNativeSymbol: _getDefaultWrappedNativeSymbol(_chainId),
poolManager: address(0),
swapRouter: address(0),
positionManager: address(0),
quoter: address(0),
chainlinkNativeFeed: address(0),
isActive: _isActive
});
supportedChains.push(_chainId);
emit ChainRegistered(_chainId, _chainName);
}
function setDexInfrastructure(
uint16 _chainId,
address _poolManager,
address _swapRouter,
address _positionManager,
address _quoter
) external override onlyOwner {
if (chainConfigs[_chainId].chainId != _chainId) revert ChainNotRegistered(_chainId);
chainConfigs[_chainId].poolManager = _poolManager;
chainConfigs[_chainId].swapRouter = _swapRouter;
chainConfigs[_chainId].positionManager = _positionManager;
chainConfigs[_chainId].quoter = _quoter;
emit ChainUpdated(_chainId);
}
function updateChainName(uint16 _chainId, string calldata _chainName) external onlyOwner {
if (chainConfigs[_chainId].chainId != _chainId) revert ChainNotRegistered(_chainId);
chainConfigs[_chainId].chainName = _chainName;
emit ChainUpdated(_chainId);
}
function updateWrappedNative(uint16 _chainId, address _wrappedNativeToken) external onlyOwner {
if (chainConfigs[_chainId].chainId != _chainId) revert ChainNotRegistered(_chainId);
chainConfigs[_chainId].wrappedNativeToken = _wrappedNativeToken;
chainConfigs[_chainId].wrappedNativeSymbol = _getDefaultWrappedNativeSymbol(_chainId);
emit ChainUpdated(_chainId);
}
function updateWrappedNativeSymbol(uint16 _chainId, string calldata _symbol) external onlyOwner {
if (chainConfigs[_chainId].chainId != _chainId) revert ChainNotRegistered(_chainId);
chainConfigs[_chainId].wrappedNativeSymbol = _symbol; emit WrappedNativeSymbolUpdated(_chainId, _symbol); emit ChainUpdated(_chainId);
}
function setChainStatus(uint16 _chainId, bool _isActive) external override onlyOwner {
if (chainConfigs[_chainId].chainId != _chainId) revert ChainNotRegistered(_chainId);
chainConfigs[_chainId].isActive = _isActive; emit ChainStatusChanged(_chainId, _isActive);
}
function getChainConfig(uint16 _chainId) external view override returns (IOmniDragonRegistry.ChainConfig memory) {
if (chainConfigs[_chainId].chainId != _chainId) revert ChainNotRegistered(_chainId);
return chainConfigs[_chainId];
}
function getSupportedChains() external view override returns (uint16[] memory) { return supportedChains; }
function getCurrentChainId() external view override returns (uint16) { return currentChainId; }
function isChainSupported(uint16 _chainId) external view override returns (bool) { return chainConfigs[_chainId].isActive && chainConfigs[_chainId].chainId == _chainId; }
// Endpoints and mapping
function setChainIdToEid(uint256 _chainId, uint32 _eid) external onlyOwner { chainIdToEid[_chainId] = _eid; eidToChainId[_eid] = _chainId; emit ChainIdToEidUpdated(_chainId, _eid); }
function setLayerZeroEndpoint(uint16 _chainId, address _endpoint) external onlyOwner { if (_endpoint == address(0)) revert ZeroAddress(); layerZeroEndpoints[_chainId] = _endpoint; emit LayerZeroEndpointUpdated(_chainId, _endpoint); }
function getLayerZeroEndpoint(uint16 _chainId) external view returns (address) {
address ep = layerZeroEndpoints[_chainId];
return ep == address(0) ? layerZeroCommonEndpoint : ep;
}
// Lookups
function getWrappedNativeToken(uint16 _chainId) external view override returns (address) { return chainConfigs[_chainId].wrappedNativeToken; }
function getWrappedNativeSymbol(uint16 _chainId) external view override returns (string memory) { return chainConfigs[_chainId].wrappedNativeSymbol; }
function getPoolManager(uint16 _chainId) external view override returns (address) { return chainConfigs[_chainId].poolManager; }
function getSwapRouter(uint16 _chainId) external view override returns (address) { return chainConfigs[_chainId].swapRouter; }
function getPositionManager(uint16 _chainId) external view override returns (address) { return chainConfigs[_chainId].positionManager; }
function getQuoter(uint16 _chainId) external view override returns (address) { return chainConfigs[_chainId].quoter; }
function getChainlinkNativeFeed(uint16 _chainId) external view override returns (address) { return chainConfigs[_chainId].chainlinkNativeFeed; }
function setChainlinkNativeFeed(uint16 _chainId, address _feed) external override onlyOwner { require(_feed != address(0), "Invalid feed"); chainConfigs[_chainId].chainlinkNativeFeed = _feed; emit ChainUpdated(_chainId); }
// Oracle management
function setPriceOracle(uint16 _chainId, address _oracle) external override onlyOwner { require(_oracle != address(0), "Invalid oracle address"); priceOracles[_chainId] = _oracle; oracleConfigs[_chainId].isConfigured = true; emit PriceOracleSet(_chainId, _oracle); }
function getPriceOracle(uint16 _chainId) external view returns (address) { return priceOracles[_chainId]; }
function setSecondaryOracle(uint16 _chainId, address _oracle) external onlyOwner { require(_oracle != address(0), "Invalid oracle address"); secondaryOracles[_chainId] = _oracle; emit SecondaryOracleSet(_chainId, _oracle); }
function getSecondaryOracle(uint16 _chainId) external view returns (address) { return secondaryOracles[_chainId]; }
function configurePrimaryOracle(address _primaryOracle, uint32 _chainEid) external override onlyOwner { require(_primaryOracle != address(0), "Invalid oracle address"); primaryOracle = _primaryOracle; primaryChainEid = _chainEid; priceOracles[146] = _primaryOracle; oracleConfigs[146].primaryOracle = _primaryOracle; oracleConfigs[146].primaryChainEid = _chainEid; oracleConfigs[146].isConfigured = true; emit PrimaryOracleConfigured(_primaryOracle, _chainEid); }
function setLzReadChannel(uint16 _chainId, uint32 _channelId) external override onlyOwner { oracleConfigs[_chainId].lzReadChannelId = _channelId; emit LzReadChannelConfigured(_chainId, _channelId); }
function getOracleConfigByChainId(uint256 _chainId) external view returns (IOmniDragonRegistry.OracleConfig memory) {
return oracleConfigs[uint16(_chainId)];
}
function getOracleConfig(uint16 _chainId) external view returns (IOmniDragonRegistry.OracleConfig memory) {
return oracleConfigs[_chainId];
}
// ============ Ecosystem Contract Management ============
function setJackpotVault(uint16 _chainId, address _vault) external onlyOwner {
jackpotVaults[_chainId] = _vault;
emit EcosystemContractSet(_chainId, "JackpotVault", _vault);
}
function setGasReserve(uint16 _chainId, address _reserve) external onlyOwner {
gasReserves[_chainId] = _reserve;
emit EcosystemContractSet(_chainId, "GasReserve", _reserve);
}
function setLotteryManager(uint16 _chainId, address _manager) external onlyOwner {
lotteryManagers[_chainId] = _manager;
emit EcosystemContractSet(_chainId, "LotteryManager", _manager);
}
function setV4Hook(uint16 _chainId, address _hook) external onlyOwner {
v4Hooks[_chainId] = _hook;
emit EcosystemContractSet(_chainId, "V4Hook", _hook);
}
function setDragonToken(uint16 _chainId, address _token) external onlyOwner {
dragonTokens[_chainId] = _token;
emit EcosystemContractSet(_chainId, "DragonToken", _token);
}
function setHubChain(uint16 _chainId, uint32 _eid) external onlyOwner {
hubChainId = _chainId;
hubChainEid = _eid;
emit HubChainSet(_chainId, _eid);
}
// Ecosystem getters
function getJackpotVault(uint16 _chainId) external view returns (address) { return jackpotVaults[_chainId]; }
function getGasReserve(uint16 _chainId) external view returns (address) { return gasReserves[_chainId]; }
function getLotteryManager(uint16 _chainId) external view returns (address) { return lotteryManagers[_chainId]; }
function getV4Hook(uint16 _chainId) external view returns (address) { return v4Hooks[_chainId]; }
function getDragonToken(uint16 _chainId) external view returns (address) { return dragonTokens[_chainId]; }
function isHubChain() external view returns (bool) { return uint16(block.chainid) == hubChainId; }
// ============ DragonOVault Vault System Setters ============
function setChainDragonVault(uint16 _chainId, address _vault) external onlyOwner {
dragonOVaults[_chainId] = _vault;
emit EcosystemContractSet(_chainId, "ChainDragonVault", _vault);
}
function setVeDragon(uint16 _chainId, address _veDragon) external onlyOwner {
veDragonContracts[_chainId] = _veDragon;
emit EcosystemContractSet(_chainId, "veDRAGON", _veDragon);
}
function setGaugeController(uint16 _chainId, address _gaugeController) external onlyOwner {
gaugeControllers[_chainId] = _gaugeController;
emit EcosystemContractSet(_chainId, "GaugeController", _gaugeController);
}
function setLPManager(uint16 _chainId, address _lpManager) external onlyOwner {
lpManagers[_chainId] = _lpManager;
emit EcosystemContractSet(_chainId, "LPManager", _lpManager);
}
// DragonOVault Vault System Getters
function getDragonOVault(uint16 _chainId) external view returns (address) { return dragonOVaults[_chainId]; }
function getVeDragon(uint16 _chainId) external view returns (address) { return veDragonContracts[_chainId]; }
function getGaugeController(uint16 _chainId) external view returns (address) { return gaugeControllers[_chainId]; }
function getLPManager(uint16 _chainId) external view returns (address) { return lpManagers[_chainId]; }
// Batch getter for cross-chain operations
function getRemoteVaults() external view returns (uint32[] memory eids, address[] memory vaults) {
uint256 count = 0;
// Count non-hub chains with vaults
for (uint i = 0; i < supportedChains.length; i++) {
if (supportedChains[i] != hubChainId && jackpotVaults[supportedChains[i]] != address(0)) {
count++;
}
}
eids = new uint32[](count);
vaults = new address[](count);
uint256 idx = 0;
for (uint i = 0; i < supportedChains.length; i++) {
if (supportedChains[i] != hubChainId && jackpotVaults[supportedChains[i]] != address(0)) {
eids[idx] = chainIdToEid[supportedChains[i]];
vaults[idx] = jackpotVaults[supportedChains[i]];
idx++;
}
}
}
// ============ LayerZero Config Setters ============
/**
* @notice Set full LZ config for a chain (custom OApp)
* @dev Use this for chains like Monad/Sonic that need custom DVN setup
*/
function setLzConfig(
uint16 _chainId,
address _endpoint,
uint32 _eid,
address _sendLib,
address _receiveLib,
address _executor,
address _dvn,
address _lzReadDvn,
uint64 _confirmations,
bool _useCustomOApp
) external onlyOwner {
lzConfigs[_chainId] = IOmniDragonRegistry.LzConfig({
endpoint: _endpoint,
eid: _eid,
sendLib: _sendLib,
receiveLib: _receiveLib,
executor: _executor,
dvn: _dvn,
lzReadDvn: _lzReadDvn,
optionalDvns: new address[](0),
confirmations: _confirmations,
isConfigured: true,
useCustomOApp: _useCustomOApp
});
customOAppChains[_chainId] = _useCustomOApp;
// Update mappings
layerZeroEndpoints[_chainId] = _endpoint;
chainIdToEid[_chainId] = _eid;
eidToChainId[_eid] = _chainId;
emit LayerZeroConfigured(address(0), _eid, _useCustomOApp ? "CUSTOM_OAPP_SET" : "LZ_CONFIG_SET");
}
/**
* @notice Set default LZ config for standard chains
* @dev Used by chains that don't need custom DVN setup
*/
function setDefaultLzConfig(
address _endpoint,
address _sendLib,
address _receiveLib,
address _executor,
address _dvn,
address _lzReadDvn,
uint64 _confirmations
) external onlyOwner {
defaultLzConfig = IOmniDragonRegistry.LzConfig({
endpoint: _endpoint,
eid: 0, // EID is chain-specific, set per-chain
sendLib: _sendLib,
receiveLib: _receiveLib,
executor: _executor,
dvn: _dvn,
lzReadDvn: _lzReadDvn,
optionalDvns: new address[](0),
confirmations: _confirmations,
isConfigured: true,
useCustomOApp: false
});
emit LayerZeroConfigured(address(0), 0, "DEFAULT_LZ_CONFIG_SET");
}
/**
* @notice Mark a chain as custom OApp (Monad, Sonic, etc.)
*/
function setCustomOAppChain(uint16 _chainId, bool _isCustom) external onlyOwner {
customOAppChains[_chainId] = _isCustom;
lzConfigs[_chainId].useCustomOApp = _isCustom;
}
/**
* @notice Set optional DVNs for a chain
*/
function setOptionalDvns(uint16 _chainId, address[] calldata _dvns) external onlyOwner {
lzConfigs[_chainId].optionalDvns = _dvns;
}
/**
* @notice Update individual LZ config fields
*/
function setLzEndpoint(uint16 _chainId, address _endpoint) external onlyOwner {
lzConfigs[_chainId].endpoint = _endpoint;
layerZeroEndpoints[_chainId] = _endpoint;
}
function setLzEid(uint16 _chainId, uint32 _eid) external onlyOwner {
lzConfigs[_chainId].eid = _eid;
chainIdToEid[_chainId] = _eid;
eidToChainId[_eid] = _chainId;
}
function setLzSendLib(uint16 _chainId, address _sendLib) external onlyOwner {
lzConfigs[_chainId].sendLib = _sendLib;
}
function setLzReceiveLib(uint16 _chainId, address _receiveLib) external onlyOwner {
lzConfigs[_chainId].receiveLib = _receiveLib;
}
function setLzExecutor(uint16 _chainId, address _executor) external onlyOwner {
lzConfigs[_chainId].executor = _executor;
}
function setLzDvn(uint16 _chainId, address _dvn) external onlyOwner {
lzConfigs[_chainId].dvn = _dvn;
}
function setLzReadDvn(uint16 _chainId, address _lzReadDvn) external onlyOwner {
lzConfigs[_chainId].lzReadDvn = _lzReadDvn;
}
function setLzConfirmations(uint16 _chainId, uint64 _confirmations) external onlyOwner {
lzConfigs[_chainId].confirmations = _confirmations;
}
// ============ LayerZero Config Getters ============
function getLzConfig(uint16 _chainId) external view returns (IOmniDragonRegistry.LzConfig memory) {
return lzConfigs[_chainId];
}
function getEidForChainId(uint256 _chainId) external view returns (uint32) {
return chainIdToEid[_chainId];
}
function getChainIdForEid(uint32 _eid) external view returns (uint256) {
return eidToChainId[_eid];
}
function getDvn(uint16 _chainId) external view returns (address) {
return lzConfigs[_chainId].dvn;
}
function getExecutor(uint16 _chainId) external view returns (address) {
return lzConfigs[_chainId].executor;
}
function getSendLib(uint16 _chainId) external view returns (address) {
return lzConfigs[_chainId].sendLib;
}
function getReceiveLib(uint16 _chainId) external view returns (address) {
return lzConfigs[_chainId].receiveLib;
}
function getLzReadDvn(uint16 _chainId) external view returns (address) {
return lzConfigs[_chainId].lzReadDvn;
}
function usesCustomOApp(uint16 _chainId) external view returns (bool) {
return customOAppChains[_chainId];
}
function getDefaultLzConfig() external view returns (IOmniDragonRegistry.LzConfig memory) {
return defaultLzConfig;
}
/**
* @notice Get effective LZ config (custom if set, default otherwise)
* @dev Returns chain-specific config if useCustomOApp, otherwise returns default with chain's EID
*/
function getEffectiveLzConfig(uint16 _chainId) external view returns (IOmniDragonRegistry.LzConfig memory) {
IOmniDragonRegistry.LzConfig memory config = lzConfigs[_chainId];
// If chain has custom config, use it
if (config.useCustomOApp || config.isConfigured) {
return config;
}
// Otherwise, use default config with chain-specific EID and endpoint
IOmniDragonRegistry.LzConfig memory effective = defaultLzConfig;
effective.eid = chainIdToEid[_chainId];
effective.endpoint = layerZeroEndpoints[_chainId] != address(0)
? layerZeroEndpoints[_chainId]
: layerZeroCommonEndpoint;
return effective;
}
// ============ OApp Auto-Configuration ============
/// @notice OApp types for different configuration needs
enum OAppType {
OFT, // Standard OFT (omniDRAGON, DragonOVault/vDRAGON)
OAPP, // Standard OApp messaging
LZREAD, // lzRead for cross-chain reads (Oracle)
COMPOSER // lzCompose receiver (DragonOVaultComposer)
}
/**
* @notice Auto-configure an OApp for all supported chains
* @dev Sets peers, DVN, executor, and enforced options using stored LZ config
* @param _oapp The OApp address (omniDRAGON, Oracle, etc.)
* @param _defaultGasLimit Default gas limit for enforced options
*/
function configureOAppForAllChains(
address _oapp,
uint128 _defaultGasLimit
) external onlyOwner {
require(_oapp != address(0), "Invalid OApp");
uint16 thisChain = uint16(block.chainid);
for (uint i = 0; i < supportedChains.length; i++) {
uint16 remoteChainId = supportedChains[i];
if (remoteChainId == thisChain) continue; // Skip self
IOmniDragonRegistry.LzConfig memory remoteLz = lzConfigs[remoteChainId];
if (!remoteLz.isConfigured) continue; // Skip unconfigured chains
// Set peer (assumes same address on all chains for CREATE2)
_setPeer(_oapp, remoteLz.eid, bytes32(uint256(uint160(_oapp))));
// Configure send path (this chain -> remote)
_configurePathToRemote(_oapp, remoteLz, _defaultGasLimit);
}
emit LayerZeroConfigured(_oapp, 0, "OAPP_AUTO_CONFIGURED");
}
/**
* @notice Auto-configure an OApp with specific type for all supported chains
* @dev Handles OFT, OApp, lzRead, and Composer patterns differently
* @param _oapp The OApp address
* @param _oappType Type of OApp (determines config pattern)
* @param _defaultGasLimit Default gas limit for enforced options
*/
function configureOAppWithType(
address _oapp,
OAppType _oappType,
uint128 _defaultGasLimit
) external onlyOwner {
require(_oapp != address(0), "Invalid OApp");
uint16 thisChain = uint16(block.chainid);
for (uint i = 0; i < supportedChains.length; i++) {
uint16 remoteChainId = supportedChains[i];
if (remoteChainId == thisChain) continue;
IOmniDragonRegistry.LzConfig memory remoteLz = lzConfigs[remoteChainId];
if (!remoteLz.isConfigured) continue;
// Set peer (assumes same address on all chains for CREATE2)
_setPeer(_oapp, remoteLz.eid, bytes32(uint256(uint160(_oapp))));
// Configure based on type
if (_oappType == OAppType.LZREAD) {
_configurePathForLzRead(_oapp, remoteLz);
} else {
// OFT, OAPP, COMPOSER all use standard messaging
_configurePathToRemote(_oapp, remoteLz, _defaultGasLimit);
}
}
string memory typeStr = _oappType == OAppType.OFT ? "OFT" :
_oappType == OAppType.OAPP ? "OAPP" :
_oappType == OAppType.LZREAD ? "LZREAD" : "COMPOSER";
emit LayerZeroConfigured(_oapp, 0, typeStr);
}
/**
* @notice Configure lzRead path (uses lzReadDvn instead of regular DVN)
* @dev lzRead is for cross-chain reads, used by Oracle
*/
function _configurePathForLzRead(
address _oapp,
IOmniDragonRegistry.LzConfig memory _remoteLz
) internal {
IOmniDragonRegistry.LzConfig memory localLz = lzConfigs[uint16(block.chainid)];
require(localLz.isConfigured, "Local chain not configured");
address ep = localLz.endpoint;
require(ep != address(0), "No local endpoint");
// lzRead uses the lzReadDvn instead of regular DVN
address lzReadDvn = localLz.lzReadDvn;
if (lzReadDvn == address(0)) {
lzReadDvn = localLz.dvn; // Fallback to regular DVN
}
// Set send library for lzRead
if (localLz.sendLib != address(0)) {
bytes memory cd = abi.encodeWithSignature(
"setSendLibrary(address,uint32,address)",
_oapp, _remoteLz.eid, localLz.sendLib
);
_executeLowLevelCall(ep, cd, "setSendLibrary fail");
}
// Configure lzRead DVN
if (lzReadDvn != address(0) && localLz.sendLib != address(0)) {
address[] memory reqDvns = new address[](1);
reqDvns[0] = lzReadDvn;
bytes memory ulnCfg = abi.encode(
uint64(1), // Minimal confirmations for reads
uint8(1),
uint8(0),
uint8(0),
reqDvns,
new address[](0)
);
SetConfigParam[] memory params = new SetConfigParam[](1);
params[0] = SetConfigParam({ eid: _remoteLz.eid, configType: 2, config: ulnCfg });
bytes memory cd = abi.encodeWithSignature(
"setConfig(address,address,(uint32,uint32,bytes)[])",
_oapp, localLz.sendLib, params
);
_executeLowLevelCall(ep, cd, "setLzReadULN fail");
}
}
/**
* @notice Configure OApp for a specific remote chain
* @param _oapp The OApp address
* @param _remoteChainId Remote chain ID
* @param _remotePeer Remote peer address (as bytes32)
* @param _gasLimit Gas limit for enforced options
*/
function configureOAppForChain(
address _oapp,
uint16 _remoteChainId,
bytes32 _remotePeer,
uint128 _gasLimit
) external onlyOwner {
require(_oapp != address(0), "Invalid OApp");
IOmniDragonRegistry.LzConfig memory remoteLz = lzConfigs[_remoteChainId];
require(remoteLz.isConfigured, "Remote chain not configured");
// Set peer
_setPeer(_oapp, remoteLz.eid, _remotePeer);
// Configure send path
_configurePathToRemote(_oapp, remoteLz, _gasLimit);
emit LayerZeroConfigured(_oapp, remoteLz.eid, "OAPP_CHAIN_CONFIGURED");
}
/**
* @notice Configure send path from this chain to remote
*/
function _configurePathToRemote(
address _oapp,
IOmniDragonRegistry.LzConfig memory _remoteLz,
uint128 _gasLimit
) internal {
IOmniDragonRegistry.LzConfig memory localLz = lzConfigs[uint16(block.chainid)];
require(localLz.isConfigured, "Local chain not configured");
address ep = localLz.endpoint;
require(ep != address(0), "No local endpoint");
// Set send library
if (localLz.sendLib != address(0)) {
bytes memory cd = abi.encodeWithSignature(
"setSendLibrary(address,uint32,address)",
_oapp, _remoteLz.eid, localLz.sendLib
);
_executeLowLevelCall(ep, cd, "setSendLibrary fail");
}
// Set receive library
if (localLz.receiveLib != address(0)) {
bytes memory cd = abi.encodeWithSignature(
"setReceiveLibrary(address,uint32,address,uint256)",
_oapp, _remoteLz.eid, localLz.receiveLib, 0
);
_executeLowLevelCall(ep, cd, "setReceiveLibrary fail");
}
// Configure executor
if (localLz.executor != address(0) && localLz.sendLib != address(0)) {
bytes memory execCfg = abi.encode(uint32(10000), localLz.executor);
SetConfigParam[] memory params = new SetConfigParam[](1);
params[0] = SetConfigParam({ eid: _remoteLz.eid, configType: 1, config: execCfg });
bytes memory cd = abi.encodeWithSignature(
"setConfig(address,address,(uint32,uint32,bytes)[])",
_oapp, localLz.sendLib, params
);
_executeLowLevelCall(ep, cd, "setExecutorConfig fail");
}
// Configure DVN (ULN) for send
if (localLz.dvn != address(0) && localLz.sendLib != address(0)) {
address[] memory reqDvns = new address[](1);
reqDvns[0] = localLz.dvn;
bytes memory ulnCfg = abi.encode(
localLz.confirmations,
uint8(1), // requiredDVNCount
uint8(0), // optionalDVNCount
uint8(0), // optionalDVNThreshold
reqDvns,
new address[](0)
);
SetConfigParam[] memory params = new SetConfigParam[](1);
params[0] = SetConfigParam({ eid: _remoteLz.eid, configType: 2, config: ulnCfg });
bytes memory cd = abi.encodeWithSignature(
"setConfig(address,address,(uint32,uint32,bytes)[])",
_oapp, localLz.sendLib, params
);
_executeLowLevelCall(ep, cd, "setSendULN fail");
}
// Configure DVN (ULN) for receive (use remote chain's DVN)
if (_remoteLz.dvn != address(0) && localLz.receiveLib != address(0)) {
address[] memory reqDvns = new address[](1);
reqDvns[0] = _remoteLz.dvn;
bytes memory ulnCfg = abi.encode(
_remoteLz.confirmations,
uint8(1),
uint8(0),
uint8(0),
reqDvns,
new address[](0)
);
SetConfigParam[] memory params = new SetConfigParam[](1);
params[0] = SetConfigParam({ eid: _remoteLz.eid, configType: 2, config: ulnCfg });
bytes memory cd = abi.encodeWithSignature(
"setConfig(address,address,(uint32,uint32,bytes)[])",
_oapp, localLz.receiveLib, params
);
_executeLowLevelCall(ep, cd, "setReceiveULN fail");
}
// Set enforced options
_setEnforcedOptions(_oapp, _remoteLz.eid, _gasLimit);
}
/**
* @notice Set peer on OApp
*/
function _setPeer(address _oapp, uint32 _eid, bytes32 _peer) internal {
bytes memory cd = abi.encodeWithSignature("setPeer(uint32,bytes32)", _eid, _peer);
_executeLowLevelCall(_oapp, cd, "setPeer fail");
}
/**
* @notice Set enforced options on OApp
*/
function _setEnforcedOptions(address _oapp, uint32 _eid, uint128 _gasLimit) internal {
// Build enforced options for send (msgType 1) and sendAndCall (msgType 2)
bytes memory options = abi.encodePacked(
uint16(3), // TYPE_3 options
uint8(1), // WORKER_ID for executor
uint16(17), // Option length (1 + 16)
uint8(1), // LZ_RECEIVE option type
_gasLimit // Gas limit
);
// Struct: (uint32 eid, uint16 msgType, bytes options)
bytes memory opt1 = abi.encode(_eid, uint16(1), options); // Send
bytes memory opt2 = abi.encode(_eid, uint16(2), options); // SendAndCall
bytes[] memory allOpts = new bytes[](2);
allOpts[0] = opt1;
allOpts[1] = opt2;
bytes memory cd = abi.encodeWithSignature(
"setEnforcedOptions((uint32,uint16,bytes)[])",
allOpts
);
// Don't revert if this fails (some OApps may not have this function)
(bool success, ) = _oapp.call(cd);
if (!success) {
// Try alternate signature
cd = abi.encodeWithSignature(
"setEnforcedOptions(bytes[])",
allOpts
);
_oapp.call(cd);
}
}
// Low-level call helper (minimal)
function _executeLowLevelCall(address target, bytes memory callData, string memory errorMessage) private {
(bool success, bytes memory returnData) = target.call(callData);
if (!success) {
if (returnData.length > 0) {
assembly { revert(add(returnData, 32), mload(returnData)) }
} else {
revert(errorMessage);
}
}
}
// NOTE: Additional LZ configuration helpers moved to separate OmniDragonConfigurator contract to reduce size
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/**
* @title IOmniDragonRegistry
* @dev Interface for OmniDragon registry with oracle management
*/
interface IOmniDragonRegistry {
/**
* @dev Chain configuration for DEX infrastructure
*/
struct ChainConfig {
uint16 chainId;
string chainName;
address wrappedNativeToken; // WETH, WAVAX, WS, WMONAD, etc.
string wrappedNativeSymbol; // "WETH", "WAVAX", "WS", etc.
// Core DEX infrastructure (version agnostic)
address poolManager; // Pool state manager (V4 PoolManager, etc.)
address swapRouter; // Swap execution (UniversalRouter, SwapRouter, etc.)
address positionManager; // LP position manager (V4 PositionManager, NonfungiblePositionManager, etc.)
address quoter; // Quote/preview swaps
// Oracle
address chainlinkNativeFeed; // Chainlink native/USD feed (ETH/USD, MON/USD, etc.)
bool isActive;
}
/**
* @dev Oracle configuration struct
*/
struct OracleConfig {
address primaryOracle; // Primary oracle address (Sonic chain)
uint32 primaryChainEid; // Primary chain EID
uint32 lzReadChannelId; // lzRead channel ID
bool isConfigured; // Whether oracle is configured
}
/**
* @dev LayerZero configuration per chain
*/
struct LzConfig {
address endpoint; // LZ Endpoint address
uint32 eid; // LZ Endpoint ID
address sendLib; // SendLib302 address
address receiveLib; // ReceiveLib302 address
address executor; // LZ Executor address
address dvn; // Primary DVN (LayerZero Labs)
address lzReadDvn; // LzRead DVN for cross-chain reads
address[] optionalDvns; // Optional DVNs
uint64 confirmations; // Block confirmations required
bool isConfigured; // Whether LZ is configured
bool useCustomOApp; // True = custom DVN/Executor, False = use defaults
}
// Events
event ChainRegistered(uint16 indexed chainId, string chainName);
event ChainUpdated(uint16 indexed chainId);
event ChainStatusChanged(uint16 indexed chainId, bool isActive);
// Oracle events
event PriceOracleSet(uint16 indexed chainId, address indexed oracle);
event PrimaryOracleConfigured(address indexed primaryOracle, uint32 chainEid);
event LzReadChannelConfigured(uint16 indexed chainId, uint32 channelId);
// EID mappings
function chainIdToEid(uint256 chainId) external view returns (uint32);
function eidToChainId(uint32 eid) external view returns (uint256);
/**
* @notice Register a new chain configuration
* @param _chainId The chain ID
* @param _chainName The human-readable chain name
* @param _wrappedNativeToken The wrapped native token address
* @param _isActive Whether this chain is active
*/
function registerChain(
uint16 _chainId,
string calldata _chainName,
address _wrappedNativeToken,
bool _isActive
) external;
/**
* @notice Set DEX infrastructure for a chain
* @param _chainId The chain ID
* @param _poolManager Pool manager address
* @param _swapRouter Swap router address
* @param _positionManager Position manager address
* @param _quoter Quoter address
*/
function setDexInfrastructure(
uint16 _chainId,
address _poolManager,
address _swapRouter,
address _positionManager,
address _quoter
) external;
/**
* @notice Set chain active status
* @param _chainId The chain ID
* @param _isActive Whether the chain should be active
*/
function setChainStatus(uint16 _chainId, bool _isActive) external;
/**
* @notice Get chain configuration
* @param _chainId The chain ID
* @return config The chain configuration
*/
function getChainConfig(uint16 _chainId) external view returns (ChainConfig memory config);
/**
* @notice Get all supported chains
* @return Array of supported chain IDs
*/
function getSupportedChains() external view returns (uint16[] memory);
/**
* @notice Get current chain ID
* @return The current chain ID
*/
function getCurrentChainId() external view returns (uint16);
/**
* @notice Check if chain is supported and active
* @param _chainId The chain ID to check
* @return True if chain is supported and active
*/
function isChainSupported(uint16 _chainId) external view returns (bool);
/**
* @notice Get wrapped native token address for a chain
* @param _chainId The chain ID
* @return The wrapped native token address
*/
function getWrappedNativeToken(uint16 _chainId) external view returns (address);
/**
* @notice Get wrapped native token symbol for a chain
* @param _chainId The chain ID
* @return The wrapped native token symbol
*/
function getWrappedNativeSymbol(uint16 _chainId) external view returns (string memory);
/**
* @notice Get pool manager for a chain (V4 PoolManager, etc.)
* @param _chainId The chain ID
* @return The pool manager address
*/
function getPoolManager(uint16 _chainId) external view returns (address);
/**
* @notice Get swap router for a chain (UniversalRouter, SwapRouter, etc.)
* @param _chainId The chain ID
* @return The swap router address
*/
function getSwapRouter(uint16 _chainId) external view returns (address);
/**
* @notice Get position manager for a chain (V4 PositionManager, etc.)
* @param _chainId The chain ID
* @return The position manager address
*/
function getPositionManager(uint16 _chainId) external view returns (address);
/**
* @notice Get quoter for a chain
* @param _chainId The chain ID
* @return The quoter address
*/
function getQuoter(uint16 _chainId) external view returns (address);
/**
* @notice Get Chainlink native/USD feed for a chain
* @param _chainId The chain ID
* @return The Chainlink feed address (ETH/USD, MON/USD, S/USD, etc.)
*/
function getChainlinkNativeFeed(uint16 _chainId) external view returns (address);
/**
* @notice Set Chainlink native/USD feed for a chain
* @param _chainId The chain ID
* @param _feed The Chainlink feed address
*/
function setChainlinkNativeFeed(uint16 _chainId, address _feed) external;
/**
* @notice Get LayerZero endpoint for a chain
* @param _chainId The chain ID
* @return The LayerZero endpoint address
*/
function getLayerZeroEndpoint(uint16 _chainId) external view returns (address);
// ============ ORACLE MANAGEMENT ============
/**
* @notice Set price oracle for a specific chain
* @param _chainId Chain ID
* @param _oracle Oracle address
*/
function setPriceOracle(uint16 _chainId, address _oracle) external;
/**
* @notice Get price oracle for a specific chain
* @param _chainId Chain ID
* @return Oracle address
*/
function getPriceOracle(uint16 _chainId) external view returns (address);
/**
* @notice Configure primary oracle (on Sonic chain)
* @param _primaryOracle Primary oracle address
* @param _chainEid Primary chain EID
*/
function configurePrimaryOracle(address _primaryOracle, uint32 _chainEid) external;
/**
* @notice Set lzRead channel for a chain
* @param _chainId Chain ID
* @param _channelId lzRead channel ID
*/
function setLzReadChannel(uint16 _chainId, uint32 _channelId) external;
/**
* @notice Get oracle configuration for a chain
* @param _chainId Chain ID
* @return Oracle configuration
*/
function getOracleConfig(uint16 _chainId) external view returns (OracleConfig memory);
// ============ ECOSYSTEM CONTRACT MANAGEMENT ============
/**
* @notice Get hub chain ID (Base)
* @return Hub chain ID
*/
function hubChainId() external view returns (uint16);
/**
* @notice Get hub chain EID
* @return Hub chain LayerZero EID
*/
function hubChainEid() external view returns (uint32);
/**
* @notice Check if current chain is the hub
* @return True if current chain is hub
*/
function isHubChain() external view returns (bool);
/**
* @notice Get jackpot vault for a chain
* @param _chainId Chain ID
* @return Vault address
*/
function getJackpotVault(uint16 _chainId) external view returns (address);
/**
* @notice Get gas reserve for a chain
* @param _chainId Chain ID
* @return Gas reserve address
*/
function getGasReserve(uint16 _chainId) external view returns (address);
/**
* @notice Get lottery manager for a chain
* @param _chainId Chain ID
* @return Lottery manager address
*/
function getLotteryManager(uint16 _chainId) external view returns (address);
/**
* @notice Get V4 hook for a chain
* @param _chainId Chain ID
* @return V4 hook address
*/
function getV4Hook(uint16 _chainId) external view returns (address);
/**
* @notice Get DRAGON token for a chain
* @param _chainId Chain ID
* @return DRAGON token address
*/
function getDragonToken(uint16 _chainId) external view returns (address);
/**
* @notice Get all remote vaults (non-hub chains with vaults)
* @return eids Array of chain EIDs
* @return vaults Array of vault addresses
*/
function getRemoteVaults() external view returns (uint32[] memory eids, address[] memory vaults);
// ============ CHAINDRAGON VAULT SYSTEM ============
/**
* @notice Get DragonOVault vault for a chain
* @param _chainId Chain ID
* @return DragonOVault vault address
*/
function getDragonOVault(uint16 _chainId) external view returns (address);
/**
* @notice Get veDRAGON contract for a chain
* @param _chainId Chain ID
* @return veDRAGON address
*/
function getVeDragon(uint16 _chainId) external view returns (address);
/**
* @notice Get GaugeController for a chain
* @param _chainId Chain ID
* @return GaugeController address
*/
function getGaugeController(uint16 _chainId) external view returns (address);
/**
* @notice Get LP Manager for a chain
* @param _chainId Chain ID
* @return LP Manager address
*/
function getLPManager(uint16 _chainId) external view returns (address);
// ============ LAYERZERO CONFIGURATION ============
/**
* @notice Get full LayerZero config for a chain
* @param _chainId Chain ID
* @return LZ configuration struct
*/
function getLzConfig(uint16 _chainId) external view returns (LzConfig memory);
/**
* @notice Get LZ endpoint ID for a chain
* @param _chainId Chain ID
* @return LZ Endpoint ID (EID)
*/
function getEidForChainId(uint256 _chainId) external view returns (uint32);
/**
* @notice Get chain ID for an LZ endpoint ID
* @param _eid LZ Endpoint ID
* @return Chain ID
*/
function getChainIdForEid(uint32 _eid) external view returns (uint256);
/**
* @notice Get DVN address for a chain
* @param _chainId Chain ID
* @return Primary DVN address
*/
function getDvn(uint16 _chainId) external view returns (address);
/**
* @notice Get Executor address for a chain
* @param _chainId Chain ID
* @return Executor address
*/
function getExecutor(uint16 _chainId) external view returns (address);
/**
* @notice Get Send library for a chain
* @param _chainId Chain ID
* @return SendLib address
*/
function getSendLib(uint16 _chainId) external view returns (address);
/**
* @notice Get Receive library for a chain
* @param _chainId Chain ID
* @return ReceiveLib address
*/
function getReceiveLib(uint16 _chainId) external view returns (address);
/**
* @notice Get LzRead DVN for a chain
* @param _chainId Chain ID
* @return LzRead DVN address
*/
function getLzReadDvn(uint16 _chainId) external view returns (address);
/**
* @notice Check if chain uses custom OApp config
* @param _chainId Chain ID
* @return True if chain uses custom OApp (Monad, Sonic, etc.)
*/
function usesCustomOApp(uint16 _chainId) external view returns (bool);
/**
* @notice Get effective LZ config (custom if set, default otherwise)
* @param _chainId Chain ID
* @return Effective LZ configuration
*/
function getEffectiveLzConfig(uint16 _chainId) external view returns (LzConfig memory);
/**
* @notice Get default LZ config for standard chains
* @return Default LZ configuration
*/
function getDefaultLzConfig() external view returns (LzConfig memory);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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 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) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"forge-std/=lib/forge-std/src/",
"@layerzerolabs/=node_modules/@layerzerolabs/",
"@layerzerolabs/oapp-evm/=node_modules/@layerzerolabs/lz-evm-oapp-v2/",
"@layerzerolabs/oft-evm/=node_modules/@layerzerolabs/lz-evm-oapp-v2/",
"@openzeppelin/=node_modules/@openzeppelin/",
"@uniswap/v3-core/=node_modules/@uniswap/v3-core/",
"@uniswap/v4-core/=lib/v4-core/",
"@uniswap/v4-periphery/=lib/v4-periphery/",
"@arbitrum/=node_modules/@arbitrum/",
"@chainlink/=node_modules/@chainlink/",
"@ensdomains/=lib/v4-core/node_modules/@ensdomains/",
"@eth-optimism/=node_modules/@eth-optimism/",
"@offchainlabs/=node_modules/@offchainlabs/",
"@scroll-tech/=node_modules/@scroll-tech/",
"@zksync/=node_modules/@zksync/",
"chainlink-vrf-v2.5/=lib/chainlink-vrf-v2.5/",
"ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-gas-snapshot/=lib/v4-periphery/lib/permit2/lib/forge-gas-snapshot/src/",
"hardhat-deploy/=node_modules/hardhat-deploy/",
"hardhat/=node_modules/hardhat/",
"openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/",
"permit2/=lib/v4-periphery/lib/permit2/",
"solady/=node_modules/solady/",
"solidity-bytes-utils/=node_modules/solidity-bytes-utils/",
"solmate/=node_modules/solmate/",
"v3-core/=lib/v3-core/",
"v4-core/=lib/v4-core/src/",
"v4-periphery/=lib/v4-periphery/"
],
"optimizer": {
"enabled": true,
"runs": 1
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint16","name":"chainId","type":"uint16"}],"name":"ChainAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"uint16","name":"chainId","type":"uint16"}],"name":"ChainNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"TooManyChains","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"}],"name":"ChainIdToEidUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":false,"internalType":"string","name":"chainName","type":"string"}],"name":"ChainRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"ChainStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"}],"name":"ChainUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"}],"name":"CurrentChainSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":false,"internalType":"string","name":"contractType","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"EcosystemContractSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":false,"internalType":"uint32","name":"eid","type":"uint32"}],"name":"HubChainSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oapp","type":"address"},{"indexed":true,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"string","name":"configType","type":"string"}],"name":"LayerZeroConfigured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"endpoint","type":"address"}],"name":"LayerZeroEndpointUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oapp","type":"address"},{"indexed":true,"internalType":"uint32","name":"eid","type":"uint32"},{"indexed":false,"internalType":"address","name":"lib","type":"address"},{"indexed":false,"internalType":"string","name":"libraryType","type":"string"}],"name":"LayerZeroLibrarySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":false,"internalType":"uint32","name":"channelId","type":"uint32"}],"name":"LzReadChannelConfigured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"}],"name":"PriceOracleSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"primaryOracle","type":"address"},{"indexed":false,"internalType":"uint32","name":"chainEid","type":"uint32"}],"name":"PrimaryOracleConfigured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"}],"name":"SecondaryOracleSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"chainId","type":"uint16"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"}],"name":"WrappedNativeSymbolUpdated","type":"event"},{"inputs":[],"name":"MAX_SUPPORTED_CHAINS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chainIdToEid","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint128","name":"_defaultGasLimit","type":"uint128"}],"name":"configureOAppForAllChains","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"uint16","name":"_remoteChainId","type":"uint16"},{"internalType":"bytes32","name":"_remotePeer","type":"bytes32"},{"internalType":"uint128","name":"_gasLimit","type":"uint128"}],"name":"configureOAppForChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oapp","type":"address"},{"internalType":"enum OmniDragonRegistry.OAppType","name":"_oappType","type":"uint8"},{"internalType":"uint128","name":"_defaultGasLimit","type":"uint128"}],"name":"configureOAppWithType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_primaryOracle","type":"address"},{"internalType":"uint32","name":"_chainEid","type":"uint32"}],"name":"configurePrimaryOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"customOAppChains","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultLzConfig","outputs":[{"internalType":"address","name":"endpoint","type":"address"},{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"address","name":"sendLib","type":"address"},{"internalType":"address","name":"receiveLib","type":"address"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"address","name":"dvn","type":"address"},{"internalType":"address","name":"lzReadDvn","type":"address"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"bool","name":"isConfigured","type":"bool"},{"internalType":"bool","name":"useCustomOApp","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"dragonOVaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"dragonTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"eidToChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"gasReserves","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"gaugeControllers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getChainConfig","outputs":[{"components":[{"internalType":"uint16","name":"chainId","type":"uint16"},{"internalType":"string","name":"chainName","type":"string"},{"internalType":"address","name":"wrappedNativeToken","type":"address"},{"internalType":"string","name":"wrappedNativeSymbol","type":"string"},{"internalType":"address","name":"poolManager","type":"address"},{"internalType":"address","name":"swapRouter","type":"address"},{"internalType":"address","name":"positionManager","type":"address"},{"internalType":"address","name":"quoter","type":"address"},{"internalType":"address","name":"chainlinkNativeFeed","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IOmniDragonRegistry.ChainConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"getChainIdForEid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getChainlinkNativeFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentChainId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultLzConfig","outputs":[{"components":[{"internalType":"address","name":"endpoint","type":"address"},{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"address","name":"sendLib","type":"address"},{"internalType":"address","name":"receiveLib","type":"address"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"address","name":"dvn","type":"address"},{"internalType":"address","name":"lzReadDvn","type":"address"},{"internalType":"address[]","name":"optionalDvns","type":"address[]"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"bool","name":"isConfigured","type":"bool"},{"internalType":"bool","name":"useCustomOApp","type":"bool"}],"internalType":"struct IOmniDragonRegistry.LzConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getDragonOVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getDragonToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getDvn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getEffectiveLzConfig","outputs":[{"components":[{"internalType":"address","name":"endpoint","type":"address"},{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"address","name":"sendLib","type":"address"},{"internalType":"address","name":"receiveLib","type":"address"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"address","name":"dvn","type":"address"},{"internalType":"address","name":"lzReadDvn","type":"address"},{"internalType":"address[]","name":"optionalDvns","type":"address[]"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"bool","name":"isConfigured","type":"bool"},{"internalType":"bool","name":"useCustomOApp","type":"bool"}],"internalType":"struct IOmniDragonRegistry.LzConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"getEidForChainId","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getGasReserve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getGaugeController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getJackpotVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getLPManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getLayerZeroEndpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getLotteryManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getLzConfig","outputs":[{"components":[{"internalType":"address","name":"endpoint","type":"address"},{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"address","name":"sendLib","type":"address"},{"internalType":"address","name":"receiveLib","type":"address"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"address","name":"dvn","type":"address"},{"internalType":"address","name":"lzReadDvn","type":"address"},{"internalType":"address[]","name":"optionalDvns","type":"address[]"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"bool","name":"isConfigured","type":"bool"},{"internalType":"bool","name":"useCustomOApp","type":"bool"}],"internalType":"struct IOmniDragonRegistry.LzConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getLzReadDvn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getOracleConfig","outputs":[{"components":[{"internalType":"address","name":"primaryOracle","type":"address"},{"internalType":"uint32","name":"primaryChainEid","type":"uint32"},{"internalType":"uint32","name":"lzReadChannelId","type":"uint32"},{"internalType":"bool","name":"isConfigured","type":"bool"}],"internalType":"struct IOmniDragonRegistry.OracleConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"getOracleConfigByChainId","outputs":[{"components":[{"internalType":"address","name":"primaryOracle","type":"address"},{"internalType":"uint32","name":"primaryChainEid","type":"uint32"},{"internalType":"uint32","name":"lzReadChannelId","type":"uint32"},{"internalType":"bool","name":"isConfigured","type":"bool"}],"internalType":"struct IOmniDragonRegistry.OracleConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getPoolManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getPositionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getPriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getQuoter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getReceiveLib","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRemoteVaults","outputs":[{"internalType":"uint32[]","name":"eids","type":"uint32[]"},{"internalType":"address[]","name":"vaults","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getSecondaryOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getSendLib","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupportedChains","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getSwapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getV4Hook","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getVeDragon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getWrappedNativeSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"getWrappedNativeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hubChainEid","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hubChainId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"isChainSupported","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isHubChain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"jackpotVaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"layerZeroCommonEndpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"layerZeroEndpoints","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"layerZeroUncommonEndpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"lotteryManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"lpManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"lzConfigs","outputs":[{"internalType":"address","name":"endpoint","type":"address"},{"internalType":"uint32","name":"eid","type":"uint32"},{"internalType":"address","name":"sendLib","type":"address"},{"internalType":"address","name":"receiveLib","type":"address"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"address","name":"dvn","type":"address"},{"internalType":"address","name":"lzReadDvn","type":"address"},{"internalType":"uint64","name":"confirmations","type":"uint64"},{"internalType":"bool","name":"isConfigured","type":"bool"},{"internalType":"bool","name":"useCustomOApp","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"oracleConfigs","outputs":[{"internalType":"address","name":"primaryOracle","type":"address"},{"internalType":"uint32","name":"primaryChainEid","type":"uint32"},{"internalType":"uint32","name":"lzReadChannelId","type":"uint32"},{"internalType":"bool","name":"isConfigured","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"priceOracles","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primaryChainEid","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primaryOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"string","name":"_chainName","type":"string"},{"internalType":"address","name":"_wrappedNativeToken","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"registerChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"secondaryOracles","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_vault","type":"address"}],"name":"setChainDragonVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"setChainIdToEid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setChainStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_feed","type":"address"}],"name":"setChainlinkNativeFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"setCurrentChainId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bool","name":"_isCustom","type":"bool"}],"name":"setCustomOAppChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_endpoint","type":"address"},{"internalType":"address","name":"_sendLib","type":"address"},{"internalType":"address","name":"_receiveLib","type":"address"},{"internalType":"address","name":"_executor","type":"address"},{"internalType":"address","name":"_dvn","type":"address"},{"internalType":"address","name":"_lzReadDvn","type":"address"},{"internalType":"uint64","name":"_confirmations","type":"uint64"}],"name":"setDefaultLzConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_poolManager","type":"address"},{"internalType":"address","name":"_swapRouter","type":"address"},{"internalType":"address","name":"_positionManager","type":"address"},{"internalType":"address","name":"_quoter","type":"address"}],"name":"setDexInfrastructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_token","type":"address"}],"name":"setDragonToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_reserve","type":"address"}],"name":"setGasReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_gaugeController","type":"address"}],"name":"setGaugeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"setHubChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_vault","type":"address"}],"name":"setJackpotVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_lpManager","type":"address"}],"name":"setLPManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_endpoint","type":"address"}],"name":"setLayerZeroEndpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_manager","type":"address"}],"name":"setLotteryManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_endpoint","type":"address"},{"internalType":"uint32","name":"_eid","type":"uint32"},{"internalType":"address","name":"_sendLib","type":"address"},{"internalType":"address","name":"_receiveLib","type":"address"},{"internalType":"address","name":"_executor","type":"address"},{"internalType":"address","name":"_dvn","type":"address"},{"internalType":"address","name":"_lzReadDvn","type":"address"},{"internalType":"uint64","name":"_confirmations","type":"uint64"},{"internalType":"bool","name":"_useCustomOApp","type":"bool"}],"name":"setLzConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint64","name":"_confirmations","type":"uint64"}],"name":"setLzConfirmations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_dvn","type":"address"}],"name":"setLzDvn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint32","name":"_eid","type":"uint32"}],"name":"setLzEid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_endpoint","type":"address"}],"name":"setLzEndpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_executor","type":"address"}],"name":"setLzExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint32","name":"_channelId","type":"uint32"}],"name":"setLzReadChannel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_lzReadDvn","type":"address"}],"name":"setLzReadDvn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_receiveLib","type":"address"}],"name":"setLzReceiveLib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_sendLib","type":"address"}],"name":"setLzSendLib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address[]","name":"_dvns","type":"address[]"}],"name":"setOptionalDvns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_oracle","type":"address"}],"name":"setPriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_oracle","type":"address"}],"name":"setSecondaryOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_hook","type":"address"}],"name":"setV4Hook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_veDragon","type":"address"}],"name":"setVeDragon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"string","name":"_chainName","type":"string"}],"name":"updateChainName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"_wrappedNativeToken","type":"address"}],"name":"updateWrappedNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"updateWrappedNativeSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"}],"name":"usesCustomOApp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"v4Hooks","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"veDragonContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60c0346200017357601f620059cd38819003918201601f191683019291906001600160401b03841183851017620001775781602092849260409687528339810103126200017357516001600160a01b03808216929091839003620001735782156200015d575f549260018060a01b03199281848616175f55825194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36375e8210565ffffffffffff19601454161760145561ffff461661ffff196003541617600355731a44076050125825900e736c501f859c50fe728c9182608052736f475642a6e85809b1c36fa62763669b1b48dd5b60a05261210592835f526006602052825f20918254161790556004602052805f206175e8908163ffffffff198254161790555f5260056020525f205561584190816200018c82396080518181816107600152818161243b01526146ae015260a0518161111c0152f35b51631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806301b774c81461065e578063027636ae146105f55780630348eca31461065e5780630375d4f814610659578063064232391461050f578063087bd7af146106545780630ade4f9e1461064f5780630b9549661461064a5780630d9ad8c01461064557806310e1c2b0146106405780631a21d86f1461063b5780631aede2b6146106365780631b04d0451461063157806320caeefe1461062c578063219d18da1461062757806324bb729314610622578063284e0a341461061d57806328f41de3146106185780633164b39914610609578063335635f6146106135780633593c41e1461059657806337e32a941461060e5780633a07b830146106095780634077a43d14610604578063413eef06146105ff57806342451a08146105fa578063424f5dba146105f55780634392fe86146105f057806346113785146105eb5780634707f548146105e657806347bf3faf146105b45780634af91330146104e25780634fb75116146105e1578063502ebb30146105dc57806350a06d91146105d75780635356b0b7146105d257806355e1a91a146105cd5780635696013b146105c85780635b998529146105c35780635cf0e8a4146105be5780635f89d111146105b95780635f931584146105505780636036d616146105b457806362c21b35146105af5780636616e9f5146105aa578063663abdd2146105a557806368452660146105a05780636faf75741461059b5780636ff6b53814610596578063715018a6146105915780637cb8d3bc1461058c5780637da670a0146105875780637fc7175e14610582578063861f3c6a1461057d5780638abe7fce146105785780638b42babd146105325780638cb3aaa3146105735780638d6a9afc1461050a5780638da5cb5b1461056e57806390e79f1914610569578063929f58401461056457806393029fa71461055f578063967301d41461055a57806396e78aef146104b057806398a84c24146105555780639d3b89ba14610550578063a08f4c7b1461054b578063a1368c9514610546578063a502e3ea14610541578063ada397381461053c578063af3de2d514610537578063b3829acf14610532578063b87f29e11461052d578063bb38494c14610528578063bcdae16014610523578063bd8f238e1461051e578063c0e3dcbc14610519578063c17786a014610514578063c23b3f9a1461050f578063c32c57a91461050a578063c4bffe2b14610505578063c51fea7a14610500578063c5294407146104fb578063cddf38fa146104ce578063cf236627146104f6578063d4b69041146104f1578063d580fbe8146104ec578063d72e68f4146104e7578063dc4b7148146104e2578063dd18eaca146104dd578063de6b9a96146104d8578063decb1d9a146104d3578063eba8cf8d146104ba578063ec370092146104ce578063ee3031eb146104c9578063eeb0b606146104a1578063f019e6ed146104c4578063f0a594a9146104bf578063f151e497146104ba578063f2fde38b146104b5578063f5de7899146104b0578063fb762f68146104ab578063fc9753ed146104a6578063fdc76817146104a15763fe01558f1461049c575f80fd5b6135b9565b6133cb565b61356f565b6134da565b61211b565b613467565b61327d565b61342c565b613406565b6132ad565b612c25565b6131e6565b61313b565b61309b565b611647565b613058565b612f22565b612d82565b612c60565b612ba0565b612b62565b612799565b611f8c565b61078f565b6126a3565b61255c565b612534565b6124a9565b61246b565b6123fc565b611ed9565b6123ad565b612365565b612327565b6122e9565b6121da565b611a53565b612156565b6120b9565b61207b565b61205a565b611fee565b611fc7565b611f11565b611e52565b611e0a565b611d84565b611d69565b611d45565b611d01565b61114b565b611cdb565b611c0a565b611bcc565b611b19565b611a8e565b61160c565b611a15565b6119f4565b611977565b61192f565b6117e6565b611782565b611744565b611706565b611682565b611561565b61139e565b611336565b610713565b6112a8565b611225565b6111ce565b6110cc565b611186565b611107565b611074565b610feb565b610f93565b610f55565b610ea7565b610e30565b610daa565b610c21565b610b2c565b610a8e565b6108f5565b61085c565b6107db565b61074b565b6106a2565b6004359061ffff8216820361067457565b5f80fd5b6024359061ffff8216820361067457565b6001600160a01b031690565b6001600160a01b03169052565b346106745760203660031901126106745761ffff6106be610663565b165f52600e602052602060018060a01b0360405f205416604051908152f35b61ffff165f52600160205260405f2090565b61ffff165f52601560205260405f2090565b61ffff165f52600660205260405f2090565b346106745760203660031901126106745761ffff61072f610663565b165f52601e602052602060ff60405f2054166040519015158152f35b34610674575f366003190112610674576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346106745760203660031901126106745761ffff6107ab610663565b165f52600c602052602060018060a01b0360405f205416604051908152f35b6001600160a01b0381160361067457565b34610674576040366003190112610674576107f4610663565b61ffff60243591610804836107ca565b61080c6148e7565b16805f52600e6020526108228260405f206135dd565b5f805160206157ec8339815191526060604051936020855260066020860152655634486f6f6b60d01b604086015260018060a01b031693a3005b346106745760203660031901126106745761ffff610878610663565b165f526001602052602060018060a01b03600860405f20015416604051908152f35b9181601f84011215610674578235916001600160401b038311610674576020838186019501011161067457565b60643590811515820361067457565b6101243590811515820361067457565b60243590811515820361067457565b346106745760803660031901126106745761090e610663565b6024356001600160401b0381116106745761092d90369060040161089a565b6044359161093a836107ca565b6109426108c7565b9261094b6148e7565b61095f610957866106dd565b5461ffff1690565b61ffff8087169691168614610a435760456002541015610a3157610a18610a1d92610a0a7f62bb0ad0b7a8956c331b58a2677c0309932bd3f9ff9275b0d913ee6f544a8a56976109ae8a614a36565b6109da6109b96136a5565b61ffff88168152946109cc368c8c6136fc565b602087015260408601613732565b60608401525f60808401525f60a08401525f60c08401525f60e08401525f61010084015261012083019015159052565b610a13836106dd565b6138be565b6139f7565b610a2c60405192839283613a3e565b0390a2005b60405163b73ef67b60e01b8152600490fd5b604051630b4ab72d60e21b815261ffff919091166004820152602490fd5b0390fd5b6024359063ffffffff8216820361067457565b60c435906001600160401b038216820361067457565b346106745761014036600319011261067457610aa8610663565b60243590610ab5826107ca565b60443563ffffffff8116810361067457606435610ad1816107ca565b608435610add816107ca565b60a435610ae9816107ca565b60c43591610af6836107ca565b60e43593610b03856107ca565b61010435956001600160401b038716870361067457610b2a98610b246108d6565b98613a65565b005b3461067457604036600319011261067457610b45610663565b61ffff60243591610b55836107ca565b610b5d6148e7565b16805f526012602052610b738260405f206135dd565b5f805160206157ec83398151915260606040519360208552600f60208601526e23b0bab3b2a1b7b73a3937b63632b960891b604086015260018060a01b031693a3005b6001600160a01b03918216815263ffffffff909216602083015291821660408201529181166060830152918216608082015291811660a083015290911660c08201526001600160401b0390911660e08201529015156101008201529015156101208201526101400190565b34610674575f3660031901126106745760165460018060a01b0390610c9182601754169183601854169380601954169080601a541681601b541690601d549360405198899860ff8760481c169760ff8860401c169760018060401b03169663ffffffff8260a01c1691168b610bb6565b0390f35b9081518082526020808093019301915f5b828110610cb4575050505090565b83516001600160a01b031685529381019392810192600101610ca6565b610da79060208152610ce7602082018451610695565b602083015163ffffffff166040820152610d0960408401516060830190610695565b610d1b60608401516080830190610695565b610d2d608084015160a0830190610695565b610d3f60a084015160c0830190610695565b610d5160c084015160e0830190610695565b60e08301519261016090610d72610100958387860152610180850190610c95565b948101516001600160401b03166101208481019190915281015190610d9e610140928386019015159052565b01511515910152565b90565b346106745760203660031901126106745761ffff610dc6610663565b610dce614187565b50165f526015602052610c91610de660405f20614390565b60405191829182610cd1565b9060406003198301126106745760043561ffff811681036106745791602435906001600160401b03821161067457610e2c9160040161089a565b9091565b3461067457610e3e36610df2565b90610e476148e7565b61ffff8093168093815f52600160205260405f20541603610e8e5790610e7b91835f526001602052600160405f2001614477565b5f8051602061578c8339815191525f80a2005b604051635112327760e01b815260048101849052602490fd5b3461067457604036600319011261067457610ec0610663565b602435906001600160401b03908183116106745736602384011215610674578260040135918211610674573660248360051b850101116106745761ffff90610f066148e7565b165f5260209160156020526024600660405f200191610f258484613c9e565b01905f5260205f20925f5b838110610f3957005b60019082843594610f49866107ca565b01938187015501610f30565b346106745760203660031901126106745761ffff610f71610663565b165f526001602052602060018060a01b03600660405f20015416604051908152f35b346106745760203660031901126106745761ffff610faf610663565b610fb76148e7565b168061ffff1960035416176003557ff6549dcfe73f8bc1cc6508ff53d144c3df78d7b2a4f3d670dd1cd6bb1752d3be5f80a2005b3461067457604036600319011261067457611004610663565b61ffff60243591611014836107ca565b61101c6148e7565b16805f52600d6020526110328260405f206135dd565b5f805160206157ec83398151915260606040519360208552600e60208601526d2637ba3a32b93ca6b0b730b3b2b960911b604086015260018060a01b031693a3005b3461067457602036600319011261067457602061ffff80611093610663565b16805f526001835260405f209160ff600884015460a01c1692836110bf575b5050506040519015158152f35b54161490505f80806110b2565b346106745760203660031901126106745761ffff6110e8610663565b165f52600f602052602060018060a01b0360405f205416604051908152f35b34610674575f366003190112610674576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346106745760203660031901126106745761ffff611167610663565b165f526013602052602060018060a01b0360405f205416604051908152f35b3461067457604036600319011261067457610b2a6111a2610663565b61ffff602435916111b2836107ca565b6111ba6148e7565b165f526015602052600460405f20016135dd565b3461067457604036600319011261067457610b2a6111ea610663565b61ffff602435916111fa836107ca565b6112026148e7565b165f5260156020526112178160405f206135dd565b600660205260405f206135dd565b346106745760403660031901126106745761123e610663565b61ffff6024359161124e836107ca565b6112566148e7565b16805f52601160205261126c8260405f206135dd565b5f805160206157ec8339815191526060604051936020855260086020860152673b32a22920a3a7a760c11b604086015260018060a01b031693a3005b34610674576040366003190112610674576112c1610663565b602435906112ce826107ca565b6112d66148e7565b6001600160a01b038216156113025761ffff610e7b911691825f526001602052600860405f20016135dd565b60405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081999595960a21b6044820152606490fd5b34610674575f36600319011261067457602063ffffffff60145460101c16604051908152f35b604435906001600160801b038216820361067457565b602435906001600160801b038216820361067457565b606435906001600160801b038216820361067457565b34610674576060366003190112610674576004356113bb816107ca565b602435600481101561067457906113d061135c565b906113d96148e7565b6001600160a01b038116926113ef841515614533565b61ffff92834616945f9060029560028514925b87548110156114ac578061142861141a6001936139c5565b905461ffff9160031b1c1690565b8a848216146114a65761143d611442916106ef565b614390565b611457611453610120830151151590565b1590565b6114a65761147685611470602084015163ffffffff1690565b8b614ac7565b61147f8861456e565b868615611497575061149190896152fc565b01611402565b6114a1918a614e34565b611491565b50611491565b5f8385886114b98161456e565b801584146114ed5750505f805160206157cc8339815191526114e86114dc6145f2565b6040519182918261355e565b0390a3005b6114f68161456e565b6001811484146115205750505f805160206157cc8339815191526114e861151b6145d2565b6114dc565b6115299061456e565b8214611548575f805160206157cc8339815191526114e861151b6145b0565b5f805160206157cc8339815191526114e861151b61458c565b346106745760203660031901126106745761ffff61157d610663565b165f52601560205260405f20805490610c9160018060a01b039283600184015416926115ac6002820154610689565b946115ba6003830154610689565b916115c86004820154610689565b60076115d76005840154610689565b9201549360405198899860ff8760481c169760ff8860401c169760018060401b03169663ffffffff8260a01c1691168b610bb6565b346106745760203660031901126106745761ffff611628610663565b165f52600a602052602060018060a01b0360405f205416604051908152f35b346106745760203660031901126106745761ffff611663610663565b165f526007602052602060018060a01b0360405f205416604051908152f35b34610674576040366003190112610674577ffa8dff0fd33fe41758aabbe1501d22db0a4e4cb4bee446e3842f4891410ceadc60406116be610663565b63ffffffff61ffff6116ce610a65565b926116d76148e7565b16916014548365ffffffff00008360101b169165ffffffffffff191617176014558351928352166020820152a1005b346106745760203660031901126106745761ffff611722610663565b165f526015602052602060018060a01b03600560405f20015416604051908152f35b346106745760203660031901126106745761ffff611760610663565b165f526015602052602060018060a01b03600360405f20015416604051908152f35b346106745760203660031901126106745761ffff61179e610663565b165f526008602052608060405f205460ff63ffffffff916040519260018060a01b0382168452808260a01c1660208501528160c01c16604084015260e01c1615156060820152f35b346106745760e036600319011261067457600435611803816107ca565b60243561180f816107ca565b6044359061181c826107ca565b606435611828816107ca565b608435611834816107ca565b60a43591611841836107ca565b611849610a78565b946118526148e7565b61185a613bfa565b946118636136b4565b9761186e9089613732565b5f60208901526118819060408901613732565b61188e9060608801613732565b61189b9060808701613732565b6118a89060a08601613732565b6118b59060c08501613732565b60e08301526118c8906101008301613c6c565b60016101208201525f6101408201526118e090613df7565b60405180611918816060906020815260156020820152741111519055531517d31697d0d3d3919251d7d4d155605a1b60408201520190565b035f805160206157cc8339815191525f92918392a3005b3461067457604036600319011261067457610b2a61194b610663565b61ffff6024359161195b836107ca565b6119636148e7565b165f526015602052600360405f20016135dd565b3461067457604036600319011261067457611990610663565b6024359061199d826107ca565b6119a56148e7565b61ffff918282168093815f52600160205260405f20541603610e8e57906119da610e7b9260026119d4846106dd565b016135dd565b60036119ee6119e885614a36565b926106dd565b016137d2565b34610674575f36600319011261067457602061ffff60035416604051908152f35b346106745760203660031901126106745761ffff611a31610663565b165f526015602052602060018060a01b03600260405f20015416604051908152f35b346106745760203660031901126106745761ffff611a6f610663565b165f52600d602052602060018060a01b0360405f205416604051908152f35b3461067457604036600319011261067457611aa7610663565b61ffff60243591611ab7836107ca565b611abf6148e7565b16805f526010602052611ad58260405f206135dd565b5f805160206157ec83398151915260606040519360208552601060208601526f10da185a5b911c9859dbdb95985d5b1d60821b604086015260018060a01b031693a3005b3461067457602036600319011261067457611b32614611565b5061ffff600435165f526008602052610c9160405f2060ff60405191611b5783613610565b5460018060a01b038116835263ffffffff808260a01c1660208501528160c01c16604084015260e01c161515606082015260405191829182919091606080608083019460018060a01b038151168452602081015163ffffffff8091166020860152604082015116604085015201511515910152565b346106745760203660031901126106745761ffff611be8610663565b165f526015602052602060018060a01b03600460405f20015416604051908152f35b346106745760a036600319011261067457611c23610663565b602435611c2f816107ca565b604435611c3b816107ca565b606435611c47816107ca565b60843591611c54836107ca565b611c5c6148e7565b61ffff938486168095815f526001602052611c7d60405f2061ffff90541690565b1603611cbf5794611cba600793611caf6119d494611ca4610e7b999a60046119d4886106dd565b60056119d4866106dd565b60066119d4846106dd565b6106dd565b604051635112327760e01b815261ffff87166004820152602490fd5b34610674575f36600319011261067457602063ffffffff60095460a01c16604051908152f35b34610674575f36600319011261067457611d196148e7565b5f80546001600160a01b0319811682556001600160a01b03165f805160206157ac8339815191528280a3005b3461067457602036600319011261067457610c91610de6611d64610663565b614635565b34610674575f36600319011261067457602060405160458152f35b3461067457604036600319011261067457611d9d610663565b61ffff60243591611dad836107ca565b611db56148e7565b16805f52600f602052611dcb8260405f206135dd565b5f805160206157ec83398151915260606040519360208552600b60208601526a223930b3b7b72a37b5b2b760a91b604086015260018060a01b031693a3005b3461067457604036600319011261067457610b2a611e26610663565b61ffff60243591611e36836107ca565b611e3e6148e7565b165f526015602052600560405f20016135dd565b3461067457604036600319011261067457611e6b610663565b61ffff60243591611e7b836107ca565b611e836148e7565b16805f52600b602052611e998260405f206135dd565b5f805160206157ec83398151915260606040519360208552600c60208601526b129858dadc1bdd15985d5b1d60a21b604086015260018060a01b031693a3005b346106745760203660031901126106745760043563ffffffff8116809103610674575f526005602052602060405f2054604051908152f35b34610674576040366003190112610674577f1121620854be62ee6386fe112976b58e1f8f41bec38d8bd2f2d8438ce15c8f70604060043563ffffffff611f55610a65565b611f5d6148e7565b825f526004602052611f7181855f2061411e565b16805f52600560205281835f205582519182526020820152a1005b346106745760203660031901126106745761ffff611fa8610663565b165f526011602052602060018060a01b0360405f205416604051908152f35b34610674575f366003190112610674575f546040516001600160a01b039091168152602090f35b3461067457604036600319011261067457612007610663565b63ffffffff61ffff612017610a65565b926120206148e7565b1691825f5260156020526120378160405f20613c7b565b60046020526120498160405f2061411e565b165f52600560205260405f20555f80f35b34610674575f36600319011261067457602061ffff60145416604051908152f35b346106745760203660031901126106745761ffff612097610663565b165f526001602052602060018060a01b03600260405f20015416604051908152f35b3461067457604036600319011261067457610b2a6120d5610663565b61ffff6120e06108e6565b916120e96148e7565b165f52601e60205261210a8160405f209060ff801983541691151516179055565b6015602052600760405f2001613dda565b346106745760203660031901126106745761ffff612137610663565b165f52600b602052602060018060a01b0360405f205416604051908152f35b346106745760403660031901126106745761216f610663565b60243561217b816107ca565b6121836148e7565b6001600160a01b038116916121b49061ffff906121a18515156146e5565b1691825f52600a60205260405f206135dd565b7ff649851bca835268631c2b872d43c76f647f6b53f43f1d28ef1b966483f197d15f80a3005b34610674576040366003190112610674576004356121f7816107ca565b6121ff611372565b6122076148e7565b6001600160a01b03821661221c811515614533565b61ffff91824616935f5b6002548110156122a2578061223f61141a6001936139c5565b878782161461229c5761143d612254916106ef565b84612266611453610120840151151590565b612295578161228988612283602061228f96015163ffffffff1690565b88614ac7565b85614e34565b01612226565b505061228f565b5061228f565b5f845f805160206157cc833981519152604051806114e88160609060208152601460208201527313d0541417d0555513d7d0d3d3919251d554915160621b60408201520190565b346106745760203660031901126106745761ffff612305610663565b165f526001602052602060018060a01b03600560405f20015416604051908152f35b346106745760203660031901126106745761ffff612343610663565b165f526015602052602060018060a01b03600160405f20015416604051908152f35b3461067457604036600319011261067457610b2a612381610663565b61ffff60243591612391836107ca565b6123996148e7565b165f526015602052600160405f20016135dd565b34610674576040366003190112610674576123c6610663565b6024356001600160401b03811681036106745761ffff610b2a926123e86148e7565b165f526015602052600760405f2001613dbb565b346106745760203660031901126106745761ffff612418610663565b165f526006602052602060018060a01b038060405f20541680155f1461246557507f0000000000000000000000000000000000000000000000000000000000000000905b60405191168152f35b9061245c565b346106745760203660031901126106745761ffff612487610663565b165f526001602052602060018060a01b03600760405f20015416604051908152f35b34610674576040366003190112610674576124c2610663565b7fc51601f82a6c70ee2efd5de798b118e577be43137e5c717056848d0bbbe7809b602061ffff6124f0610a65565b936124f96148e7565b165f81815260088352604090819020805463ffffffff60c01b191660c087901b63ffffffff60c01b161790555163ffffffff909416845292a2005b34610674575f366003190112610674576009546040516001600160a01b039091168152602090f35b3461067457604036600319011261067457610b2a612578610663565b61ffff60243591612588836107ca565b6125906148e7565b165f526015602052600260405f20016135dd565b91908251928382525f5b8481106125ce575050825f602080949584010152601f8019910116010190565b6020818301810151848301820152016125ae565b610da790602081526125fb60208201845161ffff169052565b602083015161264361261b610140928360408601526101608501906125a4565b61262d60408701516060860190610695565b6060860151848203601f190160808601526125a4565b93612656608082015160a0850190610695565b61266860a082015160c0850190610695565b61267a60c082015160e0850190610695565b60e081015161268f6101009182860190610695565b81015190610d9e6101209283860190610695565b34610674576020366003190112610674576126bc610663565b5f6101206040516126cc81613630565b828152606060208201528260408201526060808201528260808201528260a08201528260c08201528260e082015282610100820152015261270f610957826106dd565b61ffff80831691160361273c5761273061272b610c91926106dd565b6147ca565b604051918291826125e2565b604051635112327760e01b815261ffff919091166004820152602490fd5b60209060206040818301928281528551809452019301915f5b828110612781575050505090565b835161ffff1685529381019392810192600101612773565b34610674575f3660031901126106745760408051600254808252916020820160025f52905f8051602061576c833981519152935f915b81600f8401106129f9575091839161286d93610c919654918181106129e4575b8181106129cb575b8181106129b3575b81811061299a575b818110612981575b818110612968575b81811061294f575b818110612936575b81811061291d575b818110612904575b8181106128eb575b8181106128d2575b8181106128b9575b8181106128a0575b818110612887575b10612879575b500382613682565b6040519182918261275a565b60f01c81526020015f612865565b60e083901c61ffff16845292600190602001930161285f565b60d083901c61ffff168452926001906020019301612857565b60c083901c61ffff16845292600190602001930161284f565b60b083901c61ffff168452926001906020019301612847565b60a083901c61ffff16845292600190602001930161283f565b609083901c61ffff168452926001906020019301612837565b608083901c61ffff16845292600190602001930161282f565b607083901c61ffff168452926001906020019301612827565b606083901c61ffff16845292600190602001930161281f565b605083901c61ffff168452926001906020019301612817565b604083901c61ffff16845292600190602001930161280f565b603083901c61ffff168452926001906020019301612807565b602083811c61ffff16855290936001910193016127ff565b601083901c61ffff1684529260019060200193016127f7565b61ffff831684529260019060200193016127ef565b94926001610200601092612b568754612b4b838c612b2461ffff91612a238484881661ffff169052565b612a4c6020612a3c818701868f8b901c1661ffff169052565b8488848801921c1661ffff169052565b612afc606091612a66838701868a60301c1661ffff169052565b612a7c608091868a848a01921c1661ffff169052565b612ad460a091612a96838901888c60501c1661ffff169052565b612aac60c095888c888c01921c1661ffff169052565b868a61010060e09a612ac88c8201858560701c1661ffff169052565b01921c1661ffff169052565b612aea6101208b01868a60901c1661ffff169052565b84886101408c01921c1661ffff169052565b612b126101608901848860b01c1661ffff169052565b82866101808a01921c1661ffff169052565b612b3a6101a08701828660d01c1661ffff169052565b836101c08701921c1661ffff169052565b60f01c6101e0830152565b019401920191946127cf565b346106745760203660031901126106745761ffff612b7e610663565b165f526001602052602060018060a01b03600460405f20015416604051908152f35b3461067457604036600319011261067457612bb9610663565b61ffff60243591612bc9836107ca565b612bd16148e7565b16805f52600c602052612be78260405f206135dd565b5f805160206157ec83398151915260606040519360208552600a6020860152694761735265736572766560b01b604086015260018060a01b031693a3005b346106745760203660031901126106745761ffff612c41610663565b165f526012602052602060018060a01b0360405f205416604051908152f35b3461067457604036600319011261067457612c79610663565b612c816108e6565b612c896148e7565b61ffff918281168093815f52600160205260405f20541603610e8e5781612cdf7f8a2e7bc3935fd57632299c1b85c1f2a2ca6b83577ced6c12e0516eb9d809c9d2936008612cd9610a2c956106dd565b016138a1565b60405190151581529081906020820190565b9081518082526020808093019301915f5b828110612d10575050505090565b83516001600160a01b031685529381019392810192600101612d02565b909291604082019160408152845180935260608101926020809601905f5b818110612d6857505050610da79394506020818403910152612cf1565b825163ffffffff1686529487019491870191600101612d4b565b34610674575f366003190112610674575f80600254612dae612da760145461ffff1690565b61ffff1690565b925b818110612ece5750612dca612dc483613c3a565b92613c3a565b925f905f5b838110612de55760405180610c91888883612d2d565b81612df5612da761141a846139c5565b141580612e9a575b612e0a575b600101612dcf565b91612e92600191612e4a612e35612e2b612e2661141a896139c5565b6140df565b5463ffffffff1690565b612e3f838a6148d3565b9063ffffffff169052565b612e8d612e7e612e71612e5f61141a896139c5565b61ffff165f52600b60205260405f2090565b546001600160a01b031690565b612e88838b6148d3565b613732565b614894565b929050612e02565b50612e5f612ec6612e71612ead846139c5565b90546001600160a01b0394919061ffff9160031b1c1690565b161515612dfd565b83612ede612da761141a846139c5565b141580612f07575b612ef3575b600101612db0565b91612eff600191614894565b929050612eeb565b50612e5f612f1a612e71612ead846139c5565b161515612ee6565b3461067457608036600319011261067457600435612f3f816107ca565b612f47610678565b90612f50611388565b612f586148e7565b6001600160a01b0382169261ffff90612f72851515614533565b165f526015602052612f8660405f20614390565b916101208301511561301557612fc3612fcd9284602063ffffffff960193612fbe604435612fb8875163ffffffff1690565b83614ac7565b614e34565b5163ffffffff1690565b16905f805160206157cc833981519152604051806114e88160609060208152601560208201527413d0541417d0d210525397d0d3d3919251d5549151605a1b60408201520190565b60405162461bcd60e51b815260206004820152601b60248201527a14995b5bdd194818da185a5b881b9bdd0818dbdb999a59dd5c9959602a1b6044820152606490fd5b346106745760203660031901126106745761ffff613074610663565b61307c614611565b50165f526008602052610c9160405f2060ff60405191611b5783613610565b34610674576040366003190112610674576130b4610663565b6024356130c0816107ca565b6130c86148e7565b6001600160a01b038116916130f99061ffff906130e68515156146e5565b1691825f52600760205260405f206135dd565b600860205260405f908120805460ff60e01b1916600160e01b1790557f2266a81f17c96c32ee098cae5157f8e48746474f861ecc33e0e9c477bc7d35d19080a3005b346106745761314936610df2565b906131526148e7565b61ffff928381168094815f52600160205260405f205416036131cd5791816131a8827f3b2cda9d4495d453fa37b754e82b0cb1f85969b6109ff9f7f115456dcdb81c009460036131a289986106dd565b01614477565b6131b760405192839283613a3e565b0390a25f8051602061578c8339815191525f80a2005b604051635112327760e01b815260048101859052602490fd5b34610674576040366003190112610674576131ff610663565b6024359061320c826107ca565b6132146148e7565b6001600160a01b03821690811561326b577f8efcbf71ab784f8ebb6bf61d2ae0526705fc7fb1c1ce8b4320688b03c21850149161326261ffff6020931694855f526006845260405f206135dd565b604051908152a2005b60405163d92e233d60e01b8152600490fd5b34610674576020366003190112610674576004355f526004602052602063ffffffff60405f205416604051908152f35b34610674576040366003190112610674576004356132ca816107ca565b7f36d1fadd15d1022f48d4477c2f58748713a8c2648a96be06b5852e2a7bb9b091610a2c6132f6610a65565b6132fe6148e7565b6001600160a01b03841693613385906133188615156146e5565b6009805463ffffffff60a01b1988166001600160c01b03199091161760a085901b63ffffffff60a01b1617905560925f526007602052613378817f6158b6df9f3d7178cf0df15ead8155214868eab5a79e7108878471a4bfa6c65c6135dd565b6133806140f1565b6135dd565b613396816133916140f1565b613c7b565b6133b46133a16140f1565b805460ff60e01b1916600160e01b179055565b60405163ffffffff90911681529081906020820190565b346106745760203660031901126106745761ffff6133e7610663565b165f526010602052602060018060a01b0360405f205416604051908152f35b34610674575f36600319011261067457602061ffff806014541690461614604051908152f35b346106745760203660031901126106745761ffff613448610663565b165f526006602052602060018060a01b0360405f205416604051908152f35b3461067457602036600319011261067457600435613484816107ca565b61348c6148e7565b6001600160a01b039081169081156134c2575f548260018060a01b03198216175f55165f805160206157ac8339815191525f80a3005b604051631e4fbdf760e01b81525f6004820152602490fd5b34610674576040366003190112610674576134f3610663565b61ffff60243591613503836107ca565b61350b6148e7565b16805f5260136020526135218260405f206135dd565b5f805160206157ec833981519152606060405193602085526009602086015268262826b0b730b3b2b960b91b604086015260018060a01b031693a3005b906020610da79281815201906125a4565b346106745760203660031901126106745761ffff61358b610663565b165f526001602052610c916135a5600360405f200161472a565b6040519182916020835260208301906125a4565b34610674575f366003190112610674576135d1614187565b50610c91610de6614299565b80546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761362b57604052565b6135fc565b61014081019081106001600160401b0382111761362b57604052565b606081019081106001600160401b0382111761362b57604052565b604081019081106001600160401b0382111761362b57604052565b601f909101601f19168101906001600160401b0382119082101761362b57604052565b604051906136b282613630565b565b6040519061016082016001600160401b0381118382101761362b57604052565b604051906136b28261364c565b6001600160401b03811161362b57601f01601f191660200190565b929192613708826136e1565b916137166040519384613682565b829481845281830111610674578281602093845f960137010152565b6001600160a01b039091169052565b90600182811c9216801561376f575b602083101461375b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613750565b818110613784575050565b5f8155600101613779565b9190601f811161379e57505050565b6136b2925f5260205f20906020601f840160051c830193106137c8575b601f0160051c0190613779565b90915081906137bb565b81519192916001600160401b03811161362b576137f9816137f38454613741565b8461378f565b602080601f831160011461383a5750819061382b9394955f9261382f575b50508160011b915f199060031b1c19161790565b9055565b015190505f80613817565b90601f1983169561384e855f5260205f2090565b925f905b88821061388957505083600195969710613871575b505050811b019055565b01515f1960f88460031b161c191690555f8080613867565b80600185968294968601518155019501930190613852565b805460ff60a01b191691151560a01b60ff60a01b16919091179055565b906139ab61012060086136b2946138ec6138da865161ffff1690565b825461ffff191661ffff909116178255565b6138fd6020860151600183016137d2565b61391661390d6040870151610689565b600283016135dd565b6139276060860151600383016137d2565b6139406139376080870151610689565b600483016135dd565b61395961395060a0870151610689565b600583016135dd565b61397261396960c0870151610689565b600683016135dd565b61398b61398260e0870151610689565b600783016135dd565b01926139a461399e610100830151610689565b856135dd565b0151151590565b906138a1565b634e487b7160e01b5f52603260045260245ffd5b906002548210156139f25760025f52600482901c5f8051602061576c833981519152019160011b601e1690565b6139b1565b60025490600160401b82101561362b5760018201806002558210156139f25760025f5260205f208260041c019161ffff8060f085549360041b169316831b921b1916179055565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b96919897939294959095613a776148e7565b613a7f613bfa565b93613a886136b4565b96613a938989613732565b63ffffffff8c166020890152613aac9060408901613732565b613ab99060608801613732565b613ac69060808701613732565b613ad39060a08601613732565b613ae09060c08501613732565b60e0830152613af3906101008301613c6c565b6001610120820152831515610140820152613b0d836106ef565b90613b1791613fe4565b82613b2e8361ffff165f52601e60205260405f2090565b90613b44919060ff801983541691151516179055565b613b4d82610701565b90613b57916135dd565b82613b61826140df565b90613b6b9161411e565b61ffff16613b878363ffffffff165f52600560205260405f2090565b5515613bc1575f5f805160206157cc83398151915263ffffffff613ba961415c565b935b613bbc60405192839216958261355e565b0390a3565b5f5f805160206157cc83398151915263ffffffff613bdd614133565b93613bab565b6001600160401b03811161362b5760051b60200190565b604051602081016001600160401b0381118282101761362b576040525f8152905f368137565b60405190613c2d82613667565b6001825260203681840137565b90613c4482613be3565b613c516040519182613682565b8281528092613c62601f1991613be3565b0190602036910137565b6001600160401b039091169052565b805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b90600160401b811161362b57815490808355818110613cbc57505050565b6136b2925f5260205f209182019101613779565b8051906001600160401b03821161362b57600160401b821161362b57601c5482601c55808310613d41575b50601c5f9081526020918201915f8051602061574c833981519152915b848110613d26575050505050565b83516001600160a01b03168382015592810192600101613d18565b601c5f52613d62905f8051602061574c833981519152908101908401613779565b5f613cfb565b8151916001600160401b03831161362b57613d838383613c9e565b6020809101915f5260205f20905f5b848110613da0575050505050565b83516001600160a01b03168382015592810192600101613d92565b80546001600160401b0319166001600160401b03909216919091179055565b805460ff60481b191691151560481b60ff60481b16919091179055565b613fc56101406136b292613e30613e0e8251610689565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b613e69613e44602083015163ffffffff1690565b6016805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b613e9b613e796040830151610689565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b613ecd613eab6060830151610689565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b613eff613edd6080830151610689565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b613f31613f0f60a0830151610689565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b613f63613f4160c0830151610689565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b613f7060e0820151613cd0565b610100810151601d80546001600160401b0319166001600160401b039092169190911790556139a4613fa6610120830151151590565b601d805460ff60401b191691151560401b60ff60401b16919091179055565b601d805460ff60481b191691151560481b60ff60481b16919091179055565b906140d961014060076136b294614004613ffe8651610689565b826135dd565b61401e614018602087015163ffffffff1690565b82613c7b565b61403761402e6040870151610689565b600183016135dd565b61404761390d6060870151610689565b6140606140576080870151610689565b600383016135dd565b61407061393760a0870151610689565b61408061395060c0870151610689565b61409160e086015160068301613d68565b610100850151910193906140ae906001600160401b031685613dbb565b6139a46140bf610120830151151590565b855460ff60401b191690151560401b60ff60401b16178555565b90613dda565b61ffff165f52600460205260405f2090565b60925f5260086020527f0849f82a83851433a6d01f34de538eb67ba2a2b05e2943072947611bbb9c845690565b9063ffffffff1663ffffffff19825416179055565b6040519061414082613667565b600d82526c131697d0d3d3919251d7d4d155609a1b6020830152565b6040519061416982613667565b600f82526e10d554d513d357d3d0541417d4d155608a1b6020830152565b6040519061016082016001600160401b0381118382101761362b576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c0820152606060e082015282610100820152826101208201520152565b60405190601c54808352826020916020820190601c5f5260205f20935f905b82821061421f575050506136b292500383613682565b85546001600160a01b031684526001958601958895509381019390910190614209565b90604051918281549182825260209260208301915f5260205f20935f905b828210614276575050506136b292500383613682565b85546001600160a01b031684526001958601958895509381019390910190614260565b6142a16136b4565b906142d263ffffffff6016546142bf60018060a01b03821686613732565b60a01c16602084019063ffffffff169052565b6142e96142e0601754610689565b60408401613732565b6143006142f7601854610689565b60608401613732565b61431761430e601954610689565b60808401613732565b61432e614325601a54610689565b60a08401613732565b61434561433c601b54610689565b60c08401613732565b61434d6141ea565b60e0830152601d546136b29060ff906143736001600160401b0382166101008701613c6c565b604081901c8216151561012086015260481c161515610140840152565b906136b260ff60076143a06136b4565b946143d063ffffffff82546143bd60018060a01b0382168a613732565b60a01c16602088019063ffffffff169052565b6143e96143e06001830154610689565b60408801613732565b6144026143f96002830154610689565b60608801613732565b61441b6144126003830154610689565b60808801613732565b61443461442b6004830154610689565b60a08801613732565b61444d6144446005830154610689565b60c08801613732565b61445960068201614242565b60e087015201546143736001600160401b0382166101008701613c6c565b9092916001600160401b03811161362b57614496816137f38454613741565b5f601f82116001146144cf57819061382b9394955f926144c45750508160011b915f199060031b1c19161790565b013590505f80613817565b601f198216946144e2845f5260205f2090565b915f5b87811061451b57508360019596971061450257505050811b019055565b01355f19600384901b60f8161c191690555f8080613867565b909260206001819286860135815501940191016144e5565b1561453a57565b60405162461bcd60e51b815260206004820152600c60248201526b0496e76616c6964204f4170760a41b6044820152606490fd5b6004111561457857565b634e487b7160e01b5f52602160045260245ffd5b6040519061459982613667565b600882526721a7a6a827a9a2a960c11b6020830152565b604051906145bd82613667565b600682526513169491505160d21b6020830152565b604051906145df82613667565b600482526304f4150560e41b6020830152565b604051906145ff82613667565b600382526213d19560ea1b6020830152565b6040519061461e82613610565b5f6060838281528260208201528260408201520152565b61463d614187565b5061464a61143d826106ef565b610140810151158015906146d7575b6146d25750614666614299565b9063ffffffff614675826140df565b541660208301526001600160a01b039081908161469182610701565b5416156146aa576146a190610701565b54165b16815290565b50507f00000000000000000000000000000000000000000000000000000000000000006146a4565b905090565b506101208101511515614659565b156146ec57565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206f7261636c65206164647265737360501b6044820152606490fd5b9060405191825f825461473c81613741565b908184526020946001916001811690815f146147a8575060011461476a575b5050506136b292500383613682565b5f90815285812095935091905b8183106147905750506136b293508201015f808061475b565b85548884018501529485019487945091830191614777565b925050506136b294925060ff191682840152151560051b8201015f808061475b565b906136b260ff60086147da6136a5565b946147f26147ea825461ffff1690565b61ffff168752565b6147fe6001820161472a565b60208701526148136143e06002830154610689565b61481f6003820161472a565b60608701526148346144126004830154610689565b61484461442b6005830154610689565b6148546144446006830154610689565b61486d6148646007830154610689565b60e08801613732565b01546148866001600160a01b0382166101008701613732565b60a01c161515610120840152565b5f1981146148a25760010190565b634e487b7160e01b5f52601160045260245ffd5b8051156139f25760200190565b8051600110156139f25760400190565b80518210156139f25760209160051b010190565b5f546001600160a01b031633036148fa57565b60405163118cdaa760e01b8152336004820152602490fd5b6040519061491f82613667565b6002825261575360f01b6020830152565b6040519061493d82613667565b60058252640ae82ac82b60db1b6020830152565b6040519061495e82613667565b60048252635746544d60e01b6020830152565b6040519061497e82613667565b6006825265574d4154494360d01b6020830152565b604051906149a082613667565b60048252632ba1272160e11b6020830152565b604051906149c082613667565b60048252635754414360e01b6020830152565b604051906149e082613667565b6005825264574859504560d81b6020830152565b60405190614a0182613667565b600682526515d353d3905160d21b6020830152565b60405190614a2382613667565b60048252630ae8aa8960e31b6020830152565b60928114614abe5761a86a8114614ab55760fa8114614aac5760898114614aa35760388114614a9a5760ef8114614a91576103e78114614a88576176b614614a8057610da7614a16565b610da76149f4565b50610da76149d3565b50610da76149b3565b50610da7614993565b50610da7614971565b50610da7614951565b50610da7614930565b50610da7614912565b906136b29263ffffffff60405192633400288b60e01b6020850152166024830152604482015260448152614afa81613610565b60405191614b0783613667565b600c83526b1cd95d1419595c8819985a5b60a21b60208401526154ce565b15614b2c57565b60405162461bcd60e51b815260206004820152601a602482015279131bd8d85b0818da185a5b881b9bdd0818dbdb999a59dd5c995960321b6044820152606490fd5b15614b7557565b60405162461bcd60e51b8152602060048201526011602482015270139bc81b1bd8d85b08195b991c1bda5b9d607a1b6044820152606490fd5b6001600160a01b03918216815263ffffffff9092166020830152909116604082015260600190565b60405190614be382613667565b60138252721cd95d14d95b99131a589c985c9e4819985a5b606a1b6020830152565b60405190614c1282613667565b60168252751cd95d149958d95a5d99531a589c985c9e4819985a5b60521b6020830152565b60409060405191614c4783613667565b6001835282915f5b602080821015614c8157835160209291614c688261364c565b5f82525f81830152606086830152828801015201614c4f565b505091925050565b9190606091606084019160018060a01b0380911685526020911681850152604092606060408601528551809352608085018260808560051b8801019701945f925b858410614cdc57505050505050505090565b9091929394959698978580614d1e6001938d607f1990820301885285878d5163ffffffff808251168552868201511686850152015191818982015201906125a4565b9a9b99019796959190910193019190614cca565b60405190614d3f82613667565b60168252751cd95d115e1958dd5d1bdc90dbdb999a59c819985a5b60521b6020830152565b91614d9c90610da7949260018060401b03168452600160208501525f60408501525f606085015260c0608085015260c0840190612cf1565b9160a0818403910152612cf1565b9091614d9c610da79360018452600160208501525f60408501525f606085015260c0608085015260c0840190612cf1565b60405190614de882613667565b600f82526e1cd95d14d95b991553138819985a5b608a1b6020830152565b60405190614e1382613667565b60128252711cd95d149958d95a5d995553138819985a5b60721b6020830152565b614f2b60206136b29493614e4e61143d61ffff46166106ef565b614e64614e5f610120830151151590565b614b25565b614e6e8151610689565b6001600160a01b0391614e848284161515614b6e565b6040908482820191614e968351610689565b86811661528a575b506060810195614eae8751610689565b818116615207575b50614ec46080830151610689565b9081161515806151f2575b615135575b5060a081018a614eec614ee78351610689565b610689565b151580615120575b615042575b50505060a091500190614f0f614ee78351610689565b15158061502d575b614f31575b50505050015163ffffffff1690565b90615602565b6150249361501691614f57614f4e614f47613c20565b9551610689565b612e88866148b6565b61010087015161500a90614fef906001600160401b0316614f86614f79613bfa565b85519889938e8501614d64565b0393614f9a601f1995868101895288613682565b614fa2614c37565b96614fb38c8c015163ffffffff1690565b90614fcb614fbf6136d4565b63ffffffff9093168352565b6002828e015285820152614fde886148b6565b52614fe8876148b6565b5051610689565b91516306dbd9f960e41b8a8201529485928c60248501614c89565b03908101835282613682565b61501e614e06565b916154ce565b5f808080614f1c565b5061503b614ee78551610689565b1515614f17565b61500a6150ec615116966150826101006151079761507461506b615064613c20565b9951610689565b612e888a6148b6565b01516001600160401b031690565b61509b61508d613bfa565b8b5197889360208501614d64565b03946150af601f1996878101835282613682565b6150c78e6150bb614c37565b99015163ffffffff1690565b906150d3614fbf6136d4565b6150df8f830160029052565b8a820152614fde886148b6565b9487519586936306dbd9f960e41b8e86015260248501614c89565b61510f614ddb565b90846154ce565b5f8481808a614ef9565b5061512e614ee78651610689565b1515614ef4565b84516127108a82019081526001600160a01b0390921660208301526151ec916151dd90829060400103615170601f1991828101855284613682565b615178614c37565b926151898d88015163ffffffff1690565b90615195614fbf6136d4565b6001828f0152898201526151a8846148b6565b526151b2836148b6565b508d61500a6151c18951610689565b948a519586936306dbd9f960e41b602086015260248501614c89565b6151e5614d32565b90876154ce565b5f614ed4565b50615200614ee78551610689565b1515614ecf565b615284906152758d6152676152228e89015163ffffffff1690565b8a51636a14d71560e01b60208201526001600160a01b03938416602482015263ffffffff90911660448201529190931660648201525f608482015291829060a4820190565b03601f198101835282613682565b61527d614c05565b90886154ce565b5f614eb6565b6152c9906152c18c6152676152a58d88015163ffffffff1690565b9389519485936309535ff360e41b602086015260248501614bae565b6151e5614bd6565b5f614e9e565b604051906152dc82613667565b60118252701cd95d131e949958591553138819985a5b607a1b6020830152565b9061530d61143d61ffff46166106ef565b9061531f614e5f610120840151151590565b6153298251610689565b916001600160a01b03906153408285161515614b6e565b61534d60c0820151610689565b9082821615615486575b604001916153658351610689565b818116615448575b508116151580615433575b615384575b5050505050565b6154299461500a615404615421946153a761539d613c20565b95612e88876148b6565b6153af613bfa565b946153c260405196879260208401614daa565b03946153d6601f1996878101835282613682565b6153e360206150bb614c37565b906153ef614fbf6136d4565b600260208301526040820152614fde886148b6565b946040519586936306dbd9f960e41b602086015260248501614c89565b61501e6152cf565b5f8080808061537d565b50615441614ee78351610689565b1515615378565b615480906152c1615460602088015163ffffffff1690565b6152676040519384926309535ff360e41b60208501528c60248501614bae565b5f61536d565b9050604061549760a0830151610689565b919050615357565b3d156154c9573d906154b0826136e1565b916154be6040519384613682565b82523d5f602084013e565b606090565b5f91829182602083519301915af1906154e561549f565b91156154ef575050565b8151156154ff5750602081519101fd5b60405162461bcd60e51b815260206004820152908190610a619060248301906125a4565b60609063ffffffff610da794931681526001602082015281604082015201906125a4565b60609063ffffffff610da794931681526002602082015281604082015201906125a4565b6040906040519161557b8361364c565b60028352825f5b82811061558e57505050565b806060602080938501015201615582565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106155d45750505050505090565b90919293949584806155f2600193603f198682030187528a516125a4565b98019301930191949392906155c4565b604051600360f01b6020820152600160f81b60228201819052601160f01b6023830152602582015260809390931b6001600160801b0319166026840152601683529091601f199190615655603682613682565b6156986040519461567a8661566e858460208401615523565b03868101885287613682565b61568c60405193849260208401615547565b03848101835282613682565b6156a061556b565b936156aa856148b6565b526156b4846148b6565b506156be846148c3565b526156c8836148c3565b505f806040516020810190630b98bd0760e41b82526156fa816156ee896024830161559f565b03878101835282613682565b519082855af161570861549f565b501561571357505050565b5f9283809361573b604051918261500a6020820196630502603d60e11b88526024830161559f565b51925af15061574861549f565b5056fe0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acee8242d0dc51110feb37170760dbf7f8f2f68ca3b7e0c076130099f0376e01df28be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e079e9965c0300757dfcd8b13acb16fd53a18e322fd9aa016353434bd82b375ddffc8d34b6ceb5f56f2100abe2e4df9f55de23da794df4d3eccc026037655afd84a264697066735822122076cc5b48fba7255937535d5a3f63263301e17e6a8a22a9b5afe4610451cfcf8064736f6c63430008180033000000000000000000000000b05cf01231cf2ff99499682e64d3780d57c80fdd
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f3560e01c806301b774c81461065e578063027636ae146105f55780630348eca31461065e5780630375d4f814610659578063064232391461050f578063087bd7af146106545780630ade4f9e1461064f5780630b9549661461064a5780630d9ad8c01461064557806310e1c2b0146106405780631a21d86f1461063b5780631aede2b6146106365780631b04d0451461063157806320caeefe1461062c578063219d18da1461062757806324bb729314610622578063284e0a341461061d57806328f41de3146106185780633164b39914610609578063335635f6146106135780633593c41e1461059657806337e32a941461060e5780633a07b830146106095780634077a43d14610604578063413eef06146105ff57806342451a08146105fa578063424f5dba146105f55780634392fe86146105f057806346113785146105eb5780634707f548146105e657806347bf3faf146105b45780634af91330146104e25780634fb75116146105e1578063502ebb30146105dc57806350a06d91146105d75780635356b0b7146105d257806355e1a91a146105cd5780635696013b146105c85780635b998529146105c35780635cf0e8a4146105be5780635f89d111146105b95780635f931584146105505780636036d616146105b457806362c21b35146105af5780636616e9f5146105aa578063663abdd2146105a557806368452660146105a05780636faf75741461059b5780636ff6b53814610596578063715018a6146105915780637cb8d3bc1461058c5780637da670a0146105875780637fc7175e14610582578063861f3c6a1461057d5780638abe7fce146105785780638b42babd146105325780638cb3aaa3146105735780638d6a9afc1461050a5780638da5cb5b1461056e57806390e79f1914610569578063929f58401461056457806393029fa71461055f578063967301d41461055a57806396e78aef146104b057806398a84c24146105555780639d3b89ba14610550578063a08f4c7b1461054b578063a1368c9514610546578063a502e3ea14610541578063ada397381461053c578063af3de2d514610537578063b3829acf14610532578063b87f29e11461052d578063bb38494c14610528578063bcdae16014610523578063bd8f238e1461051e578063c0e3dcbc14610519578063c17786a014610514578063c23b3f9a1461050f578063c32c57a91461050a578063c4bffe2b14610505578063c51fea7a14610500578063c5294407146104fb578063cddf38fa146104ce578063cf236627146104f6578063d4b69041146104f1578063d580fbe8146104ec578063d72e68f4146104e7578063dc4b7148146104e2578063dd18eaca146104dd578063de6b9a96146104d8578063decb1d9a146104d3578063eba8cf8d146104ba578063ec370092146104ce578063ee3031eb146104c9578063eeb0b606146104a1578063f019e6ed146104c4578063f0a594a9146104bf578063f151e497146104ba578063f2fde38b146104b5578063f5de7899146104b0578063fb762f68146104ab578063fc9753ed146104a6578063fdc76817146104a15763fe01558f1461049c575f80fd5b6135b9565b6133cb565b61356f565b6134da565b61211b565b613467565b61327d565b61342c565b613406565b6132ad565b612c25565b6131e6565b61313b565b61309b565b611647565b613058565b612f22565b612d82565b612c60565b612ba0565b612b62565b612799565b611f8c565b61078f565b6126a3565b61255c565b612534565b6124a9565b61246b565b6123fc565b611ed9565b6123ad565b612365565b612327565b6122e9565b6121da565b611a53565b612156565b6120b9565b61207b565b61205a565b611fee565b611fc7565b611f11565b611e52565b611e0a565b611d84565b611d69565b611d45565b611d01565b61114b565b611cdb565b611c0a565b611bcc565b611b19565b611a8e565b61160c565b611a15565b6119f4565b611977565b61192f565b6117e6565b611782565b611744565b611706565b611682565b611561565b61139e565b611336565b610713565b6112a8565b611225565b6111ce565b6110cc565b611186565b611107565b611074565b610feb565b610f93565b610f55565b610ea7565b610e30565b610daa565b610c21565b610b2c565b610a8e565b6108f5565b61085c565b6107db565b61074b565b6106a2565b6004359061ffff8216820361067457565b5f80fd5b6024359061ffff8216820361067457565b6001600160a01b031690565b6001600160a01b03169052565b346106745760203660031901126106745761ffff6106be610663565b165f52600e602052602060018060a01b0360405f205416604051908152f35b61ffff165f52600160205260405f2090565b61ffff165f52601560205260405f2090565b61ffff165f52600660205260405f2090565b346106745760203660031901126106745761ffff61072f610663565b165f52601e602052602060ff60405f2054166040519015158152f35b34610674575f366003190112610674576040517f0000000000000000000000001a44076050125825900e736c501f859c50fe728c6001600160a01b03168152602090f35b346106745760203660031901126106745761ffff6107ab610663565b165f52600c602052602060018060a01b0360405f205416604051908152f35b6001600160a01b0381160361067457565b34610674576040366003190112610674576107f4610663565b61ffff60243591610804836107ca565b61080c6148e7565b16805f52600e6020526108228260405f206135dd565b5f805160206157ec8339815191526060604051936020855260066020860152655634486f6f6b60d01b604086015260018060a01b031693a3005b346106745760203660031901126106745761ffff610878610663565b165f526001602052602060018060a01b03600860405f20015416604051908152f35b9181601f84011215610674578235916001600160401b038311610674576020838186019501011161067457565b60643590811515820361067457565b6101243590811515820361067457565b60243590811515820361067457565b346106745760803660031901126106745761090e610663565b6024356001600160401b0381116106745761092d90369060040161089a565b6044359161093a836107ca565b6109426108c7565b9261094b6148e7565b61095f610957866106dd565b5461ffff1690565b61ffff8087169691168614610a435760456002541015610a3157610a18610a1d92610a0a7f62bb0ad0b7a8956c331b58a2677c0309932bd3f9ff9275b0d913ee6f544a8a56976109ae8a614a36565b6109da6109b96136a5565b61ffff88168152946109cc368c8c6136fc565b602087015260408601613732565b60608401525f60808401525f60a08401525f60c08401525f60e08401525f61010084015261012083019015159052565b610a13836106dd565b6138be565b6139f7565b610a2c60405192839283613a3e565b0390a2005b60405163b73ef67b60e01b8152600490fd5b604051630b4ab72d60e21b815261ffff919091166004820152602490fd5b0390fd5b6024359063ffffffff8216820361067457565b60c435906001600160401b038216820361067457565b346106745761014036600319011261067457610aa8610663565b60243590610ab5826107ca565b60443563ffffffff8116810361067457606435610ad1816107ca565b608435610add816107ca565b60a435610ae9816107ca565b60c43591610af6836107ca565b60e43593610b03856107ca565b61010435956001600160401b038716870361067457610b2a98610b246108d6565b98613a65565b005b3461067457604036600319011261067457610b45610663565b61ffff60243591610b55836107ca565b610b5d6148e7565b16805f526012602052610b738260405f206135dd565b5f805160206157ec83398151915260606040519360208552600f60208601526e23b0bab3b2a1b7b73a3937b63632b960891b604086015260018060a01b031693a3005b6001600160a01b03918216815263ffffffff909216602083015291821660408201529181166060830152918216608082015291811660a083015290911660c08201526001600160401b0390911660e08201529015156101008201529015156101208201526101400190565b34610674575f3660031901126106745760165460018060a01b0390610c9182601754169183601854169380601954169080601a541681601b541690601d549360405198899860ff8760481c169760ff8860401c169760018060401b03169663ffffffff8260a01c1691168b610bb6565b0390f35b9081518082526020808093019301915f5b828110610cb4575050505090565b83516001600160a01b031685529381019392810192600101610ca6565b610da79060208152610ce7602082018451610695565b602083015163ffffffff166040820152610d0960408401516060830190610695565b610d1b60608401516080830190610695565b610d2d608084015160a0830190610695565b610d3f60a084015160c0830190610695565b610d5160c084015160e0830190610695565b60e08301519261016090610d72610100958387860152610180850190610c95565b948101516001600160401b03166101208481019190915281015190610d9e610140928386019015159052565b01511515910152565b90565b346106745760203660031901126106745761ffff610dc6610663565b610dce614187565b50165f526015602052610c91610de660405f20614390565b60405191829182610cd1565b9060406003198301126106745760043561ffff811681036106745791602435906001600160401b03821161067457610e2c9160040161089a565b9091565b3461067457610e3e36610df2565b90610e476148e7565b61ffff8093168093815f52600160205260405f20541603610e8e5790610e7b91835f526001602052600160405f2001614477565b5f8051602061578c8339815191525f80a2005b604051635112327760e01b815260048101849052602490fd5b3461067457604036600319011261067457610ec0610663565b602435906001600160401b03908183116106745736602384011215610674578260040135918211610674573660248360051b850101116106745761ffff90610f066148e7565b165f5260209160156020526024600660405f200191610f258484613c9e565b01905f5260205f20925f5b838110610f3957005b60019082843594610f49866107ca565b01938187015501610f30565b346106745760203660031901126106745761ffff610f71610663565b165f526001602052602060018060a01b03600660405f20015416604051908152f35b346106745760203660031901126106745761ffff610faf610663565b610fb76148e7565b168061ffff1960035416176003557ff6549dcfe73f8bc1cc6508ff53d144c3df78d7b2a4f3d670dd1cd6bb1752d3be5f80a2005b3461067457604036600319011261067457611004610663565b61ffff60243591611014836107ca565b61101c6148e7565b16805f52600d6020526110328260405f206135dd565b5f805160206157ec83398151915260606040519360208552600e60208601526d2637ba3a32b93ca6b0b730b3b2b960911b604086015260018060a01b031693a3005b3461067457602036600319011261067457602061ffff80611093610663565b16805f526001835260405f209160ff600884015460a01c1692836110bf575b5050506040519015158152f35b54161490505f80806110b2565b346106745760203660031901126106745761ffff6110e8610663565b165f52600f602052602060018060a01b0360405f205416604051908152f35b34610674575f366003190112610674576040517f0000000000000000000000006f475642a6e85809b1c36fa62763669b1b48dd5b6001600160a01b03168152602090f35b346106745760203660031901126106745761ffff611167610663565b165f526013602052602060018060a01b0360405f205416604051908152f35b3461067457604036600319011261067457610b2a6111a2610663565b61ffff602435916111b2836107ca565b6111ba6148e7565b165f526015602052600460405f20016135dd565b3461067457604036600319011261067457610b2a6111ea610663565b61ffff602435916111fa836107ca565b6112026148e7565b165f5260156020526112178160405f206135dd565b600660205260405f206135dd565b346106745760403660031901126106745761123e610663565b61ffff6024359161124e836107ca565b6112566148e7565b16805f52601160205261126c8260405f206135dd565b5f805160206157ec8339815191526060604051936020855260086020860152673b32a22920a3a7a760c11b604086015260018060a01b031693a3005b34610674576040366003190112610674576112c1610663565b602435906112ce826107ca565b6112d66148e7565b6001600160a01b038216156113025761ffff610e7b911691825f526001602052600860405f20016135dd565b60405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081999595960a21b6044820152606490fd5b34610674575f36600319011261067457602063ffffffff60145460101c16604051908152f35b604435906001600160801b038216820361067457565b602435906001600160801b038216820361067457565b606435906001600160801b038216820361067457565b34610674576060366003190112610674576004356113bb816107ca565b602435600481101561067457906113d061135c565b906113d96148e7565b6001600160a01b038116926113ef841515614533565b61ffff92834616945f9060029560028514925b87548110156114ac578061142861141a6001936139c5565b905461ffff9160031b1c1690565b8a848216146114a65761143d611442916106ef565b614390565b611457611453610120830151151590565b1590565b6114a65761147685611470602084015163ffffffff1690565b8b614ac7565b61147f8861456e565b868615611497575061149190896152fc565b01611402565b6114a1918a614e34565b611491565b50611491565b5f8385886114b98161456e565b801584146114ed5750505f805160206157cc8339815191526114e86114dc6145f2565b6040519182918261355e565b0390a3005b6114f68161456e565b6001811484146115205750505f805160206157cc8339815191526114e861151b6145d2565b6114dc565b6115299061456e565b8214611548575f805160206157cc8339815191526114e861151b6145b0565b5f805160206157cc8339815191526114e861151b61458c565b346106745760203660031901126106745761ffff61157d610663565b165f52601560205260405f20805490610c9160018060a01b039283600184015416926115ac6002820154610689565b946115ba6003830154610689565b916115c86004820154610689565b60076115d76005840154610689565b9201549360405198899860ff8760481c169760ff8860401c169760018060401b03169663ffffffff8260a01c1691168b610bb6565b346106745760203660031901126106745761ffff611628610663565b165f52600a602052602060018060a01b0360405f205416604051908152f35b346106745760203660031901126106745761ffff611663610663565b165f526007602052602060018060a01b0360405f205416604051908152f35b34610674576040366003190112610674577ffa8dff0fd33fe41758aabbe1501d22db0a4e4cb4bee446e3842f4891410ceadc60406116be610663565b63ffffffff61ffff6116ce610a65565b926116d76148e7565b16916014548365ffffffff00008360101b169165ffffffffffff191617176014558351928352166020820152a1005b346106745760203660031901126106745761ffff611722610663565b165f526015602052602060018060a01b03600560405f20015416604051908152f35b346106745760203660031901126106745761ffff611760610663565b165f526015602052602060018060a01b03600360405f20015416604051908152f35b346106745760203660031901126106745761ffff61179e610663565b165f526008602052608060405f205460ff63ffffffff916040519260018060a01b0382168452808260a01c1660208501528160c01c16604084015260e01c1615156060820152f35b346106745760e036600319011261067457600435611803816107ca565b60243561180f816107ca565b6044359061181c826107ca565b606435611828816107ca565b608435611834816107ca565b60a43591611841836107ca565b611849610a78565b946118526148e7565b61185a613bfa565b946118636136b4565b9761186e9089613732565b5f60208901526118819060408901613732565b61188e9060608801613732565b61189b9060808701613732565b6118a89060a08601613732565b6118b59060c08501613732565b60e08301526118c8906101008301613c6c565b60016101208201525f6101408201526118e090613df7565b60405180611918816060906020815260156020820152741111519055531517d31697d0d3d3919251d7d4d155605a1b60408201520190565b035f805160206157cc8339815191525f92918392a3005b3461067457604036600319011261067457610b2a61194b610663565b61ffff6024359161195b836107ca565b6119636148e7565b165f526015602052600360405f20016135dd565b3461067457604036600319011261067457611990610663565b6024359061199d826107ca565b6119a56148e7565b61ffff918282168093815f52600160205260405f20541603610e8e57906119da610e7b9260026119d4846106dd565b016135dd565b60036119ee6119e885614a36565b926106dd565b016137d2565b34610674575f36600319011261067457602061ffff60035416604051908152f35b346106745760203660031901126106745761ffff611a31610663565b165f526015602052602060018060a01b03600260405f20015416604051908152f35b346106745760203660031901126106745761ffff611a6f610663565b165f52600d602052602060018060a01b0360405f205416604051908152f35b3461067457604036600319011261067457611aa7610663565b61ffff60243591611ab7836107ca565b611abf6148e7565b16805f526010602052611ad58260405f206135dd565b5f805160206157ec83398151915260606040519360208552601060208601526f10da185a5b911c9859dbdb95985d5b1d60821b604086015260018060a01b031693a3005b3461067457602036600319011261067457611b32614611565b5061ffff600435165f526008602052610c9160405f2060ff60405191611b5783613610565b5460018060a01b038116835263ffffffff808260a01c1660208501528160c01c16604084015260e01c161515606082015260405191829182919091606080608083019460018060a01b038151168452602081015163ffffffff8091166020860152604082015116604085015201511515910152565b346106745760203660031901126106745761ffff611be8610663565b165f526015602052602060018060a01b03600460405f20015416604051908152f35b346106745760a036600319011261067457611c23610663565b602435611c2f816107ca565b604435611c3b816107ca565b606435611c47816107ca565b60843591611c54836107ca565b611c5c6148e7565b61ffff938486168095815f526001602052611c7d60405f2061ffff90541690565b1603611cbf5794611cba600793611caf6119d494611ca4610e7b999a60046119d4886106dd565b60056119d4866106dd565b60066119d4846106dd565b6106dd565b604051635112327760e01b815261ffff87166004820152602490fd5b34610674575f36600319011261067457602063ffffffff60095460a01c16604051908152f35b34610674575f36600319011261067457611d196148e7565b5f80546001600160a01b0319811682556001600160a01b03165f805160206157ac8339815191528280a3005b3461067457602036600319011261067457610c91610de6611d64610663565b614635565b34610674575f36600319011261067457602060405160458152f35b3461067457604036600319011261067457611d9d610663565b61ffff60243591611dad836107ca565b611db56148e7565b16805f52600f602052611dcb8260405f206135dd565b5f805160206157ec83398151915260606040519360208552600b60208601526a223930b3b7b72a37b5b2b760a91b604086015260018060a01b031693a3005b3461067457604036600319011261067457610b2a611e26610663565b61ffff60243591611e36836107ca565b611e3e6148e7565b165f526015602052600560405f20016135dd565b3461067457604036600319011261067457611e6b610663565b61ffff60243591611e7b836107ca565b611e836148e7565b16805f52600b602052611e998260405f206135dd565b5f805160206157ec83398151915260606040519360208552600c60208601526b129858dadc1bdd15985d5b1d60a21b604086015260018060a01b031693a3005b346106745760203660031901126106745760043563ffffffff8116809103610674575f526005602052602060405f2054604051908152f35b34610674576040366003190112610674577f1121620854be62ee6386fe112976b58e1f8f41bec38d8bd2f2d8438ce15c8f70604060043563ffffffff611f55610a65565b611f5d6148e7565b825f526004602052611f7181855f2061411e565b16805f52600560205281835f205582519182526020820152a1005b346106745760203660031901126106745761ffff611fa8610663565b165f526011602052602060018060a01b0360405f205416604051908152f35b34610674575f366003190112610674575f546040516001600160a01b039091168152602090f35b3461067457604036600319011261067457612007610663565b63ffffffff61ffff612017610a65565b926120206148e7565b1691825f5260156020526120378160405f20613c7b565b60046020526120498160405f2061411e565b165f52600560205260405f20555f80f35b34610674575f36600319011261067457602061ffff60145416604051908152f35b346106745760203660031901126106745761ffff612097610663565b165f526001602052602060018060a01b03600260405f20015416604051908152f35b3461067457604036600319011261067457610b2a6120d5610663565b61ffff6120e06108e6565b916120e96148e7565b165f52601e60205261210a8160405f209060ff801983541691151516179055565b6015602052600760405f2001613dda565b346106745760203660031901126106745761ffff612137610663565b165f52600b602052602060018060a01b0360405f205416604051908152f35b346106745760403660031901126106745761216f610663565b60243561217b816107ca565b6121836148e7565b6001600160a01b038116916121b49061ffff906121a18515156146e5565b1691825f52600a60205260405f206135dd565b7ff649851bca835268631c2b872d43c76f647f6b53f43f1d28ef1b966483f197d15f80a3005b34610674576040366003190112610674576004356121f7816107ca565b6121ff611372565b6122076148e7565b6001600160a01b03821661221c811515614533565b61ffff91824616935f5b6002548110156122a2578061223f61141a6001936139c5565b878782161461229c5761143d612254916106ef565b84612266611453610120840151151590565b612295578161228988612283602061228f96015163ffffffff1690565b88614ac7565b85614e34565b01612226565b505061228f565b5061228f565b5f845f805160206157cc833981519152604051806114e88160609060208152601460208201527313d0541417d0555513d7d0d3d3919251d554915160621b60408201520190565b346106745760203660031901126106745761ffff612305610663565b165f526001602052602060018060a01b03600560405f20015416604051908152f35b346106745760203660031901126106745761ffff612343610663565b165f526015602052602060018060a01b03600160405f20015416604051908152f35b3461067457604036600319011261067457610b2a612381610663565b61ffff60243591612391836107ca565b6123996148e7565b165f526015602052600160405f20016135dd565b34610674576040366003190112610674576123c6610663565b6024356001600160401b03811681036106745761ffff610b2a926123e86148e7565b165f526015602052600760405f2001613dbb565b346106745760203660031901126106745761ffff612418610663565b165f526006602052602060018060a01b038060405f20541680155f1461246557507f0000000000000000000000001a44076050125825900e736c501f859c50fe728c905b60405191168152f35b9061245c565b346106745760203660031901126106745761ffff612487610663565b165f526001602052602060018060a01b03600760405f20015416604051908152f35b34610674576040366003190112610674576124c2610663565b7fc51601f82a6c70ee2efd5de798b118e577be43137e5c717056848d0bbbe7809b602061ffff6124f0610a65565b936124f96148e7565b165f81815260088352604090819020805463ffffffff60c01b191660c087901b63ffffffff60c01b161790555163ffffffff909416845292a2005b34610674575f366003190112610674576009546040516001600160a01b039091168152602090f35b3461067457604036600319011261067457610b2a612578610663565b61ffff60243591612588836107ca565b6125906148e7565b165f526015602052600260405f20016135dd565b91908251928382525f5b8481106125ce575050825f602080949584010152601f8019910116010190565b6020818301810151848301820152016125ae565b610da790602081526125fb60208201845161ffff169052565b602083015161264361261b610140928360408601526101608501906125a4565b61262d60408701516060860190610695565b6060860151848203601f190160808601526125a4565b93612656608082015160a0850190610695565b61266860a082015160c0850190610695565b61267a60c082015160e0850190610695565b60e081015161268f6101009182860190610695565b81015190610d9e6101209283860190610695565b34610674576020366003190112610674576126bc610663565b5f6101206040516126cc81613630565b828152606060208201528260408201526060808201528260808201528260a08201528260c08201528260e082015282610100820152015261270f610957826106dd565b61ffff80831691160361273c5761273061272b610c91926106dd565b6147ca565b604051918291826125e2565b604051635112327760e01b815261ffff919091166004820152602490fd5b60209060206040818301928281528551809452019301915f5b828110612781575050505090565b835161ffff1685529381019392810192600101612773565b34610674575f3660031901126106745760408051600254808252916020820160025f52905f8051602061576c833981519152935f915b81600f8401106129f9575091839161286d93610c919654918181106129e4575b8181106129cb575b8181106129b3575b81811061299a575b818110612981575b818110612968575b81811061294f575b818110612936575b81811061291d575b818110612904575b8181106128eb575b8181106128d2575b8181106128b9575b8181106128a0575b818110612887575b10612879575b500382613682565b6040519182918261275a565b60f01c81526020015f612865565b60e083901c61ffff16845292600190602001930161285f565b60d083901c61ffff168452926001906020019301612857565b60c083901c61ffff16845292600190602001930161284f565b60b083901c61ffff168452926001906020019301612847565b60a083901c61ffff16845292600190602001930161283f565b609083901c61ffff168452926001906020019301612837565b608083901c61ffff16845292600190602001930161282f565b607083901c61ffff168452926001906020019301612827565b606083901c61ffff16845292600190602001930161281f565b605083901c61ffff168452926001906020019301612817565b604083901c61ffff16845292600190602001930161280f565b603083901c61ffff168452926001906020019301612807565b602083811c61ffff16855290936001910193016127ff565b601083901c61ffff1684529260019060200193016127f7565b61ffff831684529260019060200193016127ef565b94926001610200601092612b568754612b4b838c612b2461ffff91612a238484881661ffff169052565b612a4c6020612a3c818701868f8b901c1661ffff169052565b8488848801921c1661ffff169052565b612afc606091612a66838701868a60301c1661ffff169052565b612a7c608091868a848a01921c1661ffff169052565b612ad460a091612a96838901888c60501c1661ffff169052565b612aac60c095888c888c01921c1661ffff169052565b868a61010060e09a612ac88c8201858560701c1661ffff169052565b01921c1661ffff169052565b612aea6101208b01868a60901c1661ffff169052565b84886101408c01921c1661ffff169052565b612b126101608901848860b01c1661ffff169052565b82866101808a01921c1661ffff169052565b612b3a6101a08701828660d01c1661ffff169052565b836101c08701921c1661ffff169052565b60f01c6101e0830152565b019401920191946127cf565b346106745760203660031901126106745761ffff612b7e610663565b165f526001602052602060018060a01b03600460405f20015416604051908152f35b3461067457604036600319011261067457612bb9610663565b61ffff60243591612bc9836107ca565b612bd16148e7565b16805f52600c602052612be78260405f206135dd565b5f805160206157ec83398151915260606040519360208552600a6020860152694761735265736572766560b01b604086015260018060a01b031693a3005b346106745760203660031901126106745761ffff612c41610663565b165f526012602052602060018060a01b0360405f205416604051908152f35b3461067457604036600319011261067457612c79610663565b612c816108e6565b612c896148e7565b61ffff918281168093815f52600160205260405f20541603610e8e5781612cdf7f8a2e7bc3935fd57632299c1b85c1f2a2ca6b83577ced6c12e0516eb9d809c9d2936008612cd9610a2c956106dd565b016138a1565b60405190151581529081906020820190565b9081518082526020808093019301915f5b828110612d10575050505090565b83516001600160a01b031685529381019392810192600101612d02565b909291604082019160408152845180935260608101926020809601905f5b818110612d6857505050610da79394506020818403910152612cf1565b825163ffffffff1686529487019491870191600101612d4b565b34610674575f366003190112610674575f80600254612dae612da760145461ffff1690565b61ffff1690565b925b818110612ece5750612dca612dc483613c3a565b92613c3a565b925f905f5b838110612de55760405180610c91888883612d2d565b81612df5612da761141a846139c5565b141580612e9a575b612e0a575b600101612dcf565b91612e92600191612e4a612e35612e2b612e2661141a896139c5565b6140df565b5463ffffffff1690565b612e3f838a6148d3565b9063ffffffff169052565b612e8d612e7e612e71612e5f61141a896139c5565b61ffff165f52600b60205260405f2090565b546001600160a01b031690565b612e88838b6148d3565b613732565b614894565b929050612e02565b50612e5f612ec6612e71612ead846139c5565b90546001600160a01b0394919061ffff9160031b1c1690565b161515612dfd565b83612ede612da761141a846139c5565b141580612f07575b612ef3575b600101612db0565b91612eff600191614894565b929050612eeb565b50612e5f612f1a612e71612ead846139c5565b161515612ee6565b3461067457608036600319011261067457600435612f3f816107ca565b612f47610678565b90612f50611388565b612f586148e7565b6001600160a01b0382169261ffff90612f72851515614533565b165f526015602052612f8660405f20614390565b916101208301511561301557612fc3612fcd9284602063ffffffff960193612fbe604435612fb8875163ffffffff1690565b83614ac7565b614e34565b5163ffffffff1690565b16905f805160206157cc833981519152604051806114e88160609060208152601560208201527413d0541417d0d210525397d0d3d3919251d5549151605a1b60408201520190565b60405162461bcd60e51b815260206004820152601b60248201527a14995b5bdd194818da185a5b881b9bdd0818dbdb999a59dd5c9959602a1b6044820152606490fd5b346106745760203660031901126106745761ffff613074610663565b61307c614611565b50165f526008602052610c9160405f2060ff60405191611b5783613610565b34610674576040366003190112610674576130b4610663565b6024356130c0816107ca565b6130c86148e7565b6001600160a01b038116916130f99061ffff906130e68515156146e5565b1691825f52600760205260405f206135dd565b600860205260405f908120805460ff60e01b1916600160e01b1790557f2266a81f17c96c32ee098cae5157f8e48746474f861ecc33e0e9c477bc7d35d19080a3005b346106745761314936610df2565b906131526148e7565b61ffff928381168094815f52600160205260405f205416036131cd5791816131a8827f3b2cda9d4495d453fa37b754e82b0cb1f85969b6109ff9f7f115456dcdb81c009460036131a289986106dd565b01614477565b6131b760405192839283613a3e565b0390a25f8051602061578c8339815191525f80a2005b604051635112327760e01b815260048101859052602490fd5b34610674576040366003190112610674576131ff610663565b6024359061320c826107ca565b6132146148e7565b6001600160a01b03821690811561326b577f8efcbf71ab784f8ebb6bf61d2ae0526705fc7fb1c1ce8b4320688b03c21850149161326261ffff6020931694855f526006845260405f206135dd565b604051908152a2005b60405163d92e233d60e01b8152600490fd5b34610674576020366003190112610674576004355f526004602052602063ffffffff60405f205416604051908152f35b34610674576040366003190112610674576004356132ca816107ca565b7f36d1fadd15d1022f48d4477c2f58748713a8c2648a96be06b5852e2a7bb9b091610a2c6132f6610a65565b6132fe6148e7565b6001600160a01b03841693613385906133188615156146e5565b6009805463ffffffff60a01b1988166001600160c01b03199091161760a085901b63ffffffff60a01b1617905560925f526007602052613378817f6158b6df9f3d7178cf0df15ead8155214868eab5a79e7108878471a4bfa6c65c6135dd565b6133806140f1565b6135dd565b613396816133916140f1565b613c7b565b6133b46133a16140f1565b805460ff60e01b1916600160e01b179055565b60405163ffffffff90911681529081906020820190565b346106745760203660031901126106745761ffff6133e7610663565b165f526010602052602060018060a01b0360405f205416604051908152f35b34610674575f36600319011261067457602061ffff806014541690461614604051908152f35b346106745760203660031901126106745761ffff613448610663565b165f526006602052602060018060a01b0360405f205416604051908152f35b3461067457602036600319011261067457600435613484816107ca565b61348c6148e7565b6001600160a01b039081169081156134c2575f548260018060a01b03198216175f55165f805160206157ac8339815191525f80a3005b604051631e4fbdf760e01b81525f6004820152602490fd5b34610674576040366003190112610674576134f3610663565b61ffff60243591613503836107ca565b61350b6148e7565b16805f5260136020526135218260405f206135dd565b5f805160206157ec833981519152606060405193602085526009602086015268262826b0b730b3b2b960b91b604086015260018060a01b031693a3005b906020610da79281815201906125a4565b346106745760203660031901126106745761ffff61358b610663565b165f526001602052610c916135a5600360405f200161472a565b6040519182916020835260208301906125a4565b34610674575f366003190112610674576135d1614187565b50610c91610de6614299565b80546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761362b57604052565b6135fc565b61014081019081106001600160401b0382111761362b57604052565b606081019081106001600160401b0382111761362b57604052565b604081019081106001600160401b0382111761362b57604052565b601f909101601f19168101906001600160401b0382119082101761362b57604052565b604051906136b282613630565b565b6040519061016082016001600160401b0381118382101761362b57604052565b604051906136b28261364c565b6001600160401b03811161362b57601f01601f191660200190565b929192613708826136e1565b916137166040519384613682565b829481845281830111610674578281602093845f960137010152565b6001600160a01b039091169052565b90600182811c9216801561376f575b602083101461375b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613750565b818110613784575050565b5f8155600101613779565b9190601f811161379e57505050565b6136b2925f5260205f20906020601f840160051c830193106137c8575b601f0160051c0190613779565b90915081906137bb565b81519192916001600160401b03811161362b576137f9816137f38454613741565b8461378f565b602080601f831160011461383a5750819061382b9394955f9261382f575b50508160011b915f199060031b1c19161790565b9055565b015190505f80613817565b90601f1983169561384e855f5260205f2090565b925f905b88821061388957505083600195969710613871575b505050811b019055565b01515f1960f88460031b161c191690555f8080613867565b80600185968294968601518155019501930190613852565b805460ff60a01b191691151560a01b60ff60a01b16919091179055565b906139ab61012060086136b2946138ec6138da865161ffff1690565b825461ffff191661ffff909116178255565b6138fd6020860151600183016137d2565b61391661390d6040870151610689565b600283016135dd565b6139276060860151600383016137d2565b6139406139376080870151610689565b600483016135dd565b61395961395060a0870151610689565b600583016135dd565b61397261396960c0870151610689565b600683016135dd565b61398b61398260e0870151610689565b600783016135dd565b01926139a461399e610100830151610689565b856135dd565b0151151590565b906138a1565b634e487b7160e01b5f52603260045260245ffd5b906002548210156139f25760025f52600482901c5f8051602061576c833981519152019160011b601e1690565b6139b1565b60025490600160401b82101561362b5760018201806002558210156139f25760025f5260205f208260041c019161ffff8060f085549360041b169316831b921b1916179055565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b96919897939294959095613a776148e7565b613a7f613bfa565b93613a886136b4565b96613a938989613732565b63ffffffff8c166020890152613aac9060408901613732565b613ab99060608801613732565b613ac69060808701613732565b613ad39060a08601613732565b613ae09060c08501613732565b60e0830152613af3906101008301613c6c565b6001610120820152831515610140820152613b0d836106ef565b90613b1791613fe4565b82613b2e8361ffff165f52601e60205260405f2090565b90613b44919060ff801983541691151516179055565b613b4d82610701565b90613b57916135dd565b82613b61826140df565b90613b6b9161411e565b61ffff16613b878363ffffffff165f52600560205260405f2090565b5515613bc1575f5f805160206157cc83398151915263ffffffff613ba961415c565b935b613bbc60405192839216958261355e565b0390a3565b5f5f805160206157cc83398151915263ffffffff613bdd614133565b93613bab565b6001600160401b03811161362b5760051b60200190565b604051602081016001600160401b0381118282101761362b576040525f8152905f368137565b60405190613c2d82613667565b6001825260203681840137565b90613c4482613be3565b613c516040519182613682565b8281528092613c62601f1991613be3565b0190602036910137565b6001600160401b039091169052565b805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b90600160401b811161362b57815490808355818110613cbc57505050565b6136b2925f5260205f209182019101613779565b8051906001600160401b03821161362b57600160401b821161362b57601c5482601c55808310613d41575b50601c5f9081526020918201915f8051602061574c833981519152915b848110613d26575050505050565b83516001600160a01b03168382015592810192600101613d18565b601c5f52613d62905f8051602061574c833981519152908101908401613779565b5f613cfb565b8151916001600160401b03831161362b57613d838383613c9e565b6020809101915f5260205f20905f5b848110613da0575050505050565b83516001600160a01b03168382015592810192600101613d92565b80546001600160401b0319166001600160401b03909216919091179055565b805460ff60481b191691151560481b60ff60481b16919091179055565b613fc56101406136b292613e30613e0e8251610689565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b613e69613e44602083015163ffffffff1690565b6016805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b613e9b613e796040830151610689565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b613ecd613eab6060830151610689565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b613eff613edd6080830151610689565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b613f31613f0f60a0830151610689565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b613f63613f4160c0830151610689565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b613f7060e0820151613cd0565b610100810151601d80546001600160401b0319166001600160401b039092169190911790556139a4613fa6610120830151151590565b601d805460ff60401b191691151560401b60ff60401b16919091179055565b601d805460ff60481b191691151560481b60ff60481b16919091179055565b906140d961014060076136b294614004613ffe8651610689565b826135dd565b61401e614018602087015163ffffffff1690565b82613c7b565b61403761402e6040870151610689565b600183016135dd565b61404761390d6060870151610689565b6140606140576080870151610689565b600383016135dd565b61407061393760a0870151610689565b61408061395060c0870151610689565b61409160e086015160068301613d68565b610100850151910193906140ae906001600160401b031685613dbb565b6139a46140bf610120830151151590565b855460ff60401b191690151560401b60ff60401b16178555565b90613dda565b61ffff165f52600460205260405f2090565b60925f5260086020527f0849f82a83851433a6d01f34de538eb67ba2a2b05e2943072947611bbb9c845690565b9063ffffffff1663ffffffff19825416179055565b6040519061414082613667565b600d82526c131697d0d3d3919251d7d4d155609a1b6020830152565b6040519061416982613667565b600f82526e10d554d513d357d3d0541417d4d155608a1b6020830152565b6040519061016082016001600160401b0381118382101761362b576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c0820152606060e082015282610100820152826101208201520152565b60405190601c54808352826020916020820190601c5f5260205f20935f905b82821061421f575050506136b292500383613682565b85546001600160a01b031684526001958601958895509381019390910190614209565b90604051918281549182825260209260208301915f5260205f20935f905b828210614276575050506136b292500383613682565b85546001600160a01b031684526001958601958895509381019390910190614260565b6142a16136b4565b906142d263ffffffff6016546142bf60018060a01b03821686613732565b60a01c16602084019063ffffffff169052565b6142e96142e0601754610689565b60408401613732565b6143006142f7601854610689565b60608401613732565b61431761430e601954610689565b60808401613732565b61432e614325601a54610689565b60a08401613732565b61434561433c601b54610689565b60c08401613732565b61434d6141ea565b60e0830152601d546136b29060ff906143736001600160401b0382166101008701613c6c565b604081901c8216151561012086015260481c161515610140840152565b906136b260ff60076143a06136b4565b946143d063ffffffff82546143bd60018060a01b0382168a613732565b60a01c16602088019063ffffffff169052565b6143e96143e06001830154610689565b60408801613732565b6144026143f96002830154610689565b60608801613732565b61441b6144126003830154610689565b60808801613732565b61443461442b6004830154610689565b60a08801613732565b61444d6144446005830154610689565b60c08801613732565b61445960068201614242565b60e087015201546143736001600160401b0382166101008701613c6c565b9092916001600160401b03811161362b57614496816137f38454613741565b5f601f82116001146144cf57819061382b9394955f926144c45750508160011b915f199060031b1c19161790565b013590505f80613817565b601f198216946144e2845f5260205f2090565b915f5b87811061451b57508360019596971061450257505050811b019055565b01355f19600384901b60f8161c191690555f8080613867565b909260206001819286860135815501940191016144e5565b1561453a57565b60405162461bcd60e51b815260206004820152600c60248201526b0496e76616c6964204f4170760a41b6044820152606490fd5b6004111561457857565b634e487b7160e01b5f52602160045260245ffd5b6040519061459982613667565b600882526721a7a6a827a9a2a960c11b6020830152565b604051906145bd82613667565b600682526513169491505160d21b6020830152565b604051906145df82613667565b600482526304f4150560e41b6020830152565b604051906145ff82613667565b600382526213d19560ea1b6020830152565b6040519061461e82613610565b5f6060838281528260208201528260408201520152565b61463d614187565b5061464a61143d826106ef565b610140810151158015906146d7575b6146d25750614666614299565b9063ffffffff614675826140df565b541660208301526001600160a01b039081908161469182610701565b5416156146aa576146a190610701565b54165b16815290565b50507f0000000000000000000000001a44076050125825900e736c501f859c50fe728c6146a4565b905090565b506101208101511515614659565b156146ec57565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206f7261636c65206164647265737360501b6044820152606490fd5b9060405191825f825461473c81613741565b908184526020946001916001811690815f146147a8575060011461476a575b5050506136b292500383613682565b5f90815285812095935091905b8183106147905750506136b293508201015f808061475b565b85548884018501529485019487945091830191614777565b925050506136b294925060ff191682840152151560051b8201015f808061475b565b906136b260ff60086147da6136a5565b946147f26147ea825461ffff1690565b61ffff168752565b6147fe6001820161472a565b60208701526148136143e06002830154610689565b61481f6003820161472a565b60608701526148346144126004830154610689565b61484461442b6005830154610689565b6148546144446006830154610689565b61486d6148646007830154610689565b60e08801613732565b01546148866001600160a01b0382166101008701613732565b60a01c161515610120840152565b5f1981146148a25760010190565b634e487b7160e01b5f52601160045260245ffd5b8051156139f25760200190565b8051600110156139f25760400190565b80518210156139f25760209160051b010190565b5f546001600160a01b031633036148fa57565b60405163118cdaa760e01b8152336004820152602490fd5b6040519061491f82613667565b6002825261575360f01b6020830152565b6040519061493d82613667565b60058252640ae82ac82b60db1b6020830152565b6040519061495e82613667565b60048252635746544d60e01b6020830152565b6040519061497e82613667565b6006825265574d4154494360d01b6020830152565b604051906149a082613667565b60048252632ba1272160e11b6020830152565b604051906149c082613667565b60048252635754414360e01b6020830152565b604051906149e082613667565b6005825264574859504560d81b6020830152565b60405190614a0182613667565b600682526515d353d3905160d21b6020830152565b60405190614a2382613667565b60048252630ae8aa8960e31b6020830152565b60928114614abe5761a86a8114614ab55760fa8114614aac5760898114614aa35760388114614a9a5760ef8114614a91576103e78114614a88576176b614614a8057610da7614a16565b610da76149f4565b50610da76149d3565b50610da76149b3565b50610da7614993565b50610da7614971565b50610da7614951565b50610da7614930565b50610da7614912565b906136b29263ffffffff60405192633400288b60e01b6020850152166024830152604482015260448152614afa81613610565b60405191614b0783613667565b600c83526b1cd95d1419595c8819985a5b60a21b60208401526154ce565b15614b2c57565b60405162461bcd60e51b815260206004820152601a602482015279131bd8d85b0818da185a5b881b9bdd0818dbdb999a59dd5c995960321b6044820152606490fd5b15614b7557565b60405162461bcd60e51b8152602060048201526011602482015270139bc81b1bd8d85b08195b991c1bda5b9d607a1b6044820152606490fd5b6001600160a01b03918216815263ffffffff9092166020830152909116604082015260600190565b60405190614be382613667565b60138252721cd95d14d95b99131a589c985c9e4819985a5b606a1b6020830152565b60405190614c1282613667565b60168252751cd95d149958d95a5d99531a589c985c9e4819985a5b60521b6020830152565b60409060405191614c4783613667565b6001835282915f5b602080821015614c8157835160209291614c688261364c565b5f82525f81830152606086830152828801015201614c4f565b505091925050565b9190606091606084019160018060a01b0380911685526020911681850152604092606060408601528551809352608085018260808560051b8801019701945f925b858410614cdc57505050505050505090565b9091929394959698978580614d1e6001938d607f1990820301885285878d5163ffffffff808251168552868201511686850152015191818982015201906125a4565b9a9b99019796959190910193019190614cca565b60405190614d3f82613667565b60168252751cd95d115e1958dd5d1bdc90dbdb999a59c819985a5b60521b6020830152565b91614d9c90610da7949260018060401b03168452600160208501525f60408501525f606085015260c0608085015260c0840190612cf1565b9160a0818403910152612cf1565b9091614d9c610da79360018452600160208501525f60408501525f606085015260c0608085015260c0840190612cf1565b60405190614de882613667565b600f82526e1cd95d14d95b991553138819985a5b608a1b6020830152565b60405190614e1382613667565b60128252711cd95d149958d95a5d995553138819985a5b60721b6020830152565b614f2b60206136b29493614e4e61143d61ffff46166106ef565b614e64614e5f610120830151151590565b614b25565b614e6e8151610689565b6001600160a01b0391614e848284161515614b6e565b6040908482820191614e968351610689565b86811661528a575b506060810195614eae8751610689565b818116615207575b50614ec46080830151610689565b9081161515806151f2575b615135575b5060a081018a614eec614ee78351610689565b610689565b151580615120575b615042575b50505060a091500190614f0f614ee78351610689565b15158061502d575b614f31575b50505050015163ffffffff1690565b90615602565b6150249361501691614f57614f4e614f47613c20565b9551610689565b612e88866148b6565b61010087015161500a90614fef906001600160401b0316614f86614f79613bfa565b85519889938e8501614d64565b0393614f9a601f1995868101895288613682565b614fa2614c37565b96614fb38c8c015163ffffffff1690565b90614fcb614fbf6136d4565b63ffffffff9093168352565b6002828e015285820152614fde886148b6565b52614fe8876148b6565b5051610689565b91516306dbd9f960e41b8a8201529485928c60248501614c89565b03908101835282613682565b61501e614e06565b916154ce565b5f808080614f1c565b5061503b614ee78551610689565b1515614f17565b61500a6150ec615116966150826101006151079761507461506b615064613c20565b9951610689565b612e888a6148b6565b01516001600160401b031690565b61509b61508d613bfa565b8b5197889360208501614d64565b03946150af601f1996878101835282613682565b6150c78e6150bb614c37565b99015163ffffffff1690565b906150d3614fbf6136d4565b6150df8f830160029052565b8a820152614fde886148b6565b9487519586936306dbd9f960e41b8e86015260248501614c89565b61510f614ddb565b90846154ce565b5f8481808a614ef9565b5061512e614ee78651610689565b1515614ef4565b84516127108a82019081526001600160a01b0390921660208301526151ec916151dd90829060400103615170601f1991828101855284613682565b615178614c37565b926151898d88015163ffffffff1690565b90615195614fbf6136d4565b6001828f0152898201526151a8846148b6565b526151b2836148b6565b508d61500a6151c18951610689565b948a519586936306dbd9f960e41b602086015260248501614c89565b6151e5614d32565b90876154ce565b5f614ed4565b50615200614ee78551610689565b1515614ecf565b615284906152758d6152676152228e89015163ffffffff1690565b8a51636a14d71560e01b60208201526001600160a01b03938416602482015263ffffffff90911660448201529190931660648201525f608482015291829060a4820190565b03601f198101835282613682565b61527d614c05565b90886154ce565b5f614eb6565b6152c9906152c18c6152676152a58d88015163ffffffff1690565b9389519485936309535ff360e41b602086015260248501614bae565b6151e5614bd6565b5f614e9e565b604051906152dc82613667565b60118252701cd95d131e949958591553138819985a5b607a1b6020830152565b9061530d61143d61ffff46166106ef565b9061531f614e5f610120840151151590565b6153298251610689565b916001600160a01b03906153408285161515614b6e565b61534d60c0820151610689565b9082821615615486575b604001916153658351610689565b818116615448575b508116151580615433575b615384575b5050505050565b6154299461500a615404615421946153a761539d613c20565b95612e88876148b6565b6153af613bfa565b946153c260405196879260208401614daa565b03946153d6601f1996878101835282613682565b6153e360206150bb614c37565b906153ef614fbf6136d4565b600260208301526040820152614fde886148b6565b946040519586936306dbd9f960e41b602086015260248501614c89565b61501e6152cf565b5f8080808061537d565b50615441614ee78351610689565b1515615378565b615480906152c1615460602088015163ffffffff1690565b6152676040519384926309535ff360e41b60208501528c60248501614bae565b5f61536d565b9050604061549760a0830151610689565b919050615357565b3d156154c9573d906154b0826136e1565b916154be6040519384613682565b82523d5f602084013e565b606090565b5f91829182602083519301915af1906154e561549f565b91156154ef575050565b8151156154ff5750602081519101fd5b60405162461bcd60e51b815260206004820152908190610a619060248301906125a4565b60609063ffffffff610da794931681526001602082015281604082015201906125a4565b60609063ffffffff610da794931681526002602082015281604082015201906125a4565b6040906040519161557b8361364c565b60028352825f5b82811061558e57505050565b806060602080938501015201615582565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106155d45750505050505090565b90919293949584806155f2600193603f198682030187528a516125a4565b98019301930191949392906155c4565b604051600360f01b6020820152600160f81b60228201819052601160f01b6023830152602582015260809390931b6001600160801b0319166026840152601683529091601f199190615655603682613682565b6156986040519461567a8661566e858460208401615523565b03868101885287613682565b61568c60405193849260208401615547565b03848101835282613682565b6156a061556b565b936156aa856148b6565b526156b4846148b6565b506156be846148c3565b526156c8836148c3565b505f806040516020810190630b98bd0760e41b82526156fa816156ee896024830161559f565b03878101835282613682565b519082855af161570861549f565b501561571357505050565b5f9283809361573b604051918261500a6020820196630502603d60e11b88526024830161559f565b51925af15061574861549f565b5056fe0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acee8242d0dc51110feb37170760dbf7f8f2f68ca3b7e0c076130099f0376e01df28be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e079e9965c0300757dfcd8b13acb16fd53a18e322fd9aa016353434bd82b375ddffc8d34b6ceb5f56f2100abe2e4df9f55de23da794df4d3eccc026037655afd84a264697066735822122076cc5b48fba7255937535d5a3f63263301e17e6a8a22a9b5afe4610451cfcf8064736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b05cf01231cf2ff99499682e64d3780d57c80fdd
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0xB05Cf01231cF2fF99499682E64D3780d57c80FdD
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b05cf01231cf2ff99499682e64d3780d57c80fdd
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.