Contract
0x81e27A06c92C380d780df4B82C358124c78DaE54
Overview
TXENE BALANCE
0 TXENE
TXENE VALUE
$--- (@ $---/TXENE)
More Info
CONTRACT CREATOR
| Parent Txn Hash |
Method
|
Block | Age | From | To | "%>Value | |
|---|---|---|---|---|---|---|---|
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH | ||
|
0xecf33c0f32a79068…
|
Deposit
|
10 secs ago | 0xbAFA44...559c1138 | Beacon Deposit Contract | 32 ETH |
|
|
Transaction Hash |
Method
|
Block | Age | From | To | Value | Txn Fee | |
|---|---|---|---|---|---|---|---|---|---|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) | |
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | 30,000,000,000 | Catecoin (CATE) |
|
|
Transaction Hash |
Method
|
Block | Age | From | To | Type | Item | |
|---|---|---|---|---|---|---|---|---|---|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
|
|
|
0xecf33c0f32a79068…
|
Transfer
|
12 hrs 44 mins ago | Catecoin: Deployer 2 |
IN
|
Beacon Deposit Co... | ECR_721 |
Greeting Cards 2023 Limit
NFT: Greeting Cards 2023 Limited Ed
|
Contract Source Code Verified
(Exact Match)
ContractName:
DepositContract
Optimization Enabled:
Yes
with
5000000
runs
Compiler Version:
v0.6.11+commit.5ef660b1
Other Settings:
default
evmVersion,
Unlicense
license
Contract Security Audit
Contract ABI
Contract Creation Code
Deployed ByteCode Sourcemap
Swarm Source
ipfs://dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b61
Descriptions included below are taken from the contract source code NatSpec. CVCscan does not provide any guarantees on their safety or accuracy.
| Txn Hash | Block | Age | Method |
|
|---|---|---|---|---|
|
0xecf33c0f32a79068…
|
17453280 | 13 mins ago |
0x22895118
|
DepositEvent (bytes
pubkey,
bytes
withdrawal_credentials,
bytes
amount,
bytes
signature,
bytes
index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
|
|
0xecf33c0f32a79068…
|
17453280 | 13 mins ago |
0x22895118
|
DepositEvent (bytes
pubkey,
bytes
withdrawal_credentials,
bytes
amount,
bytes
signature,
bytes
index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
|
|
0xecf33c0f32a79068…
|
17453280 | 13 mins ago |
0x22895118
|
DepositEvent (bytes
pubkey,
bytes
withdrawal_credentials,
bytes
amount,
bytes
signature,
bytes
index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
Hex
Hex
Number
Text
Address
|
| Block | Age | Transaction | Difficulty | Gas Used | Reward |
|---|---|---|---|---|---|
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
|
0xecf33c0f32a79068…
|
34 days 21 hrs ago | 145 | 0.00 TH |
10,915,233 (36.38%)
|
0.026092595899657117 ETH |
QR Code
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract Name:
- SignalRegistry
- Optimization Enabled:
- true
- Compiler Version:
- v0.8.20+commit.a1b79de6
- Optimization Runs:
- 200
- EVM Version:
- paris
- Verified At:
- 2026-04-24T20:41:36.965373Z
Constructor Arguments
0x000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6
Arg [0] (address) : 0xdd06e4fac3df7ec18b552d7cd26036bc27e23ce6
File 1 of 1: contracts/SignalRegistry.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// =============================================================
// NEXUS Protocol — SignalRegistry.sol (FLATTENED)
// Xenea Ubusuna Testnet · Chain ID 1096
// Deploy THIRD — wire to PerformanceLedger + AgentPayment after
// =============================================================
// ------------------------------------------------------------
// OpenZeppelin: Context
// ------------------------------------------------------------
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// ------------------------------------------------------------
// OpenZeppelin: Ownable
// ------------------------------------------------------------
abstract contract Ownable is Context {
address private _owner;
error OwnableUnauthorizedAccount(address account);
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor(address initialOwner) {
if (initialOwner == address(0)) revert OwnableInvalidOwner(address(0));
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) revert OwnableUnauthorizedAccount(_msgSender());
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) revert OwnableInvalidOwner(address(0));
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// ------------------------------------------------------------
// OpenZeppelin: Ownable2Step
// ------------------------------------------------------------
abstract contract Ownable2Step is Ownable {
address private _pendingOwner;
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
function pendingOwner() public view virtual returns (address) {
return _pendingOwner;
}
function transferOwnership(address newOwner) public virtual override onlyOwner {
_pendingOwner = newOwner;
emit OwnershipTransferStarted(owner(), newOwner);
}
function _transferOwnership(address newOwner) internal virtual override {
delete _pendingOwner;
super._transferOwnership(newOwner);
}
function acceptOwnership() public virtual {
address sender = _msgSender();
if (pendingOwner() != sender) revert OwnableUnauthorizedAccount(sender);
_transferOwnership(sender);
}
}
// ------------------------------------------------------------
// OpenZeppelin: ReentrancyGuard
// ------------------------------------------------------------
abstract contract ReentrancyGuard {
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
if (_status == ENTERED) revert ReentrancyGuardReentrantCall();
_status = ENTERED;
}
function _nonReentrantAfter() private {
_status = NOT_ENTERED;
}
}
// ------------------------------------------------------------
// IAgentPayment (minimal — for settlement call)
// ------------------------------------------------------------
interface IAgentPayment {
function settleHandoffChain(
string calldata signalId,
int256 R_scaled,
bool win,
uint256 qualityScore,
int256 evEst_scaled,
uint8 confTier
) external;
}
// ------------------------------------------------------------
// IPerformanceLedger (minimal — for outcome recording)
// ------------------------------------------------------------
interface IPerformanceLedger {
function recordOutcome(
uint8 confTier,
string calldata regime,
string calldata session,
bool win,
int256 pnlUsd,
int256 R_scaled,
uint256 binanceClosePrice,
uint256 pythClosePrice
) external;
}
// ------------------------------------------------------------
// SignalRegistry — Main Contract
// ------------------------------------------------------------
/// @title SignalRegistry
/// @notice Immutable on-chain record of NEXUS signal commitments and outcomes.
///
/// Commit-reveal scheme:
/// 1. Before trade: commitSignal(hash, direction, confTier, regime, session)
/// Hash = keccak256(signalId ‖ nonce ‖ direction ‖ evEst_scaled)
/// Nonce is secret — kept off-chain until reveal.
/// Regime committed here — immutable from this point forward.
///
/// 2. After trade executes: revealSignal(signalId, reveal_struct)
/// Contract recomputes hash from plaintext.
/// Rejects if mismatch — prevents front-running and retroactive edits.
/// Reveal must occur within 1 hour of commit (REVEAL_DEADLINE).
///
/// 3. When MT5 closes position: reportOutcome(signalId, win, pnlUsd, R_scaled)
/// Triggers automatic settlement cascade:
/// → AgentPayment.settleHandoffChain() (machine economy)
/// → PerformanceLedger.recordOutcome() (public track record)
///
/// Heartbeat:
/// Owner fires heartbeat() every ~60 minutes.
/// Proves system was running even in quiet markets with no signals.
/// HeartbeatPulse event is the continuous operation proof.
///
/// @dev Deploy THIRD. Call linkContracts() after all three are deployed.
/// History lives in events only — mappings hold current state.
/// Never iterate on-chain mappings — no gas explosion risk.
contract SignalRegistry is Ownable2Step, ReentrancyGuard {
// ── Constants ────────────────────────────────────────────────────────
/// @notice Maximum time between commit and reveal before commit expires.
uint256 public constant REVEAL_DEADLINE = 1 hours;
// ── Custom errors ────────────────────────────────────────────────────
error AlreadyCommitted(string signalId);
error NotCommitted(string signalId);
error AlreadyRevealed(string signalId);
error AlreadyOutcomeReported(string signalId);
error CommitExpired(string signalId);
error RevealDeadlineNotPassed(string signalId);
error HashMismatch(bytes32 expected, bytes32 provided);
error OutcomeBeforeReveal(string signalId);
error ZeroAddress();
error InvalidConfTier(uint8 tier);
// ── Structs ──────────────────────────────────────────────────────────
struct SignalCommit {
bytes32 hash;
uint8 direction; // 0=flat 1=up 2=down
uint8 confTier; // 0=none 1=low 2=med 3=high
string regime; // committed at signal time — immutable
string session; // trading session
uint256 commitTimestamp;
uint256 entryPrice; // entry price × 10^8 (e.g. 7625000000000 = $76,250)
bool revealed;
bool outcomeReported;
bool expired;
}
struct SignalReveal {
string signalId;
bytes32 nonce; // secret nonce from commit hash preimage
int256 evEst_scaled; // EV × 10000
string zoneId;
uint256 qualityScore; // quality × 100
}
struct Outcome {
bool win;
int256 pnlUsd_scaled; // PnL × 100
int256 R_scaled; // R × 10000
uint256 closeTimestamp;
uint256 binanceClosePrice; // Binance spot at close (8 decimals, e.g. 7625000000000 = $76,250)
uint256 pythClosePrice; // Pyth BTC/USD at close (8 decimals)
}
// ── State ────────────────────────────────────────────────────────────
mapping(string => SignalCommit) private _commits;
mapping(string => SignalReveal) private _reveals;
mapping(string => Outcome) private _outcomes;
IAgentPayment public agentPayment;
IPerformanceLedger public performanceLedger;
uint256 public lastHeartbeat;
uint256 public totalCommits;
uint256 public totalOutcomes;
// ── Events ───────────────────────────────────────────────────────────
event SignalCommitted(
string indexed signalId,
bytes32 hash,
uint8 direction,
uint8 confTier,
string regime,
string session,
uint256 entryPrice,
uint256 timestamp
);
event SignalRevealed(
string indexed signalId,
string regime,
int256 evEst_scaled,
uint256 qualityScore,
uint256 timestamp
);
event OutcomeReported(
string indexed signalId,
bool win,
int256 pnlUsd_scaled,
int256 R_scaled,
uint256 binanceClosePrice,
uint256 pythClosePrice,
uint256 timestamp
);
event SignalExpired(string indexed signalId, uint256 timestamp);
event HeartbeatPulse(uint256 timestamp, uint256 totalCommits, uint256 totalOutcomes);
event ContractsLinked(address agentPayment, address performanceLedger);
// ── Constructor ──────────────────────────────────────────────────────
constructor(address initialOwner) Ownable(initialOwner) {}
// ── Admin ────────────────────────────────────────────────────────────
/// @notice Link AgentPayment and PerformanceLedger after all contracts deployed.
/// Owner-only. Can be updated if contracts are redeployed.
function linkContracts(
address _agentPayment,
address _performanceLedger
) external onlyOwner {
if (_agentPayment == address(0)) revert ZeroAddress();
if (_performanceLedger == address(0)) revert ZeroAddress();
agentPayment = IAgentPayment(_agentPayment);
performanceLedger = IPerformanceLedger(_performanceLedger);
emit ContractsLinked(_agentPayment, _performanceLedger);
}
// ── Core functions ───────────────────────────────────────────────────
/// @notice Commit a signal before trade execution.
/// @param signalId Unique signal identifier (e.g. "sig_a3f9b2c1").
/// @param hash keccak256(signalId ‖ nonce ‖ direction ‖ evEst_scaled).
/// Nonce must remain secret until revealSignal() is called.
/// @param direction 0=flat 1=up 2=down.
/// @param confTier 0=none 1=low 2=med 3=high.
/// @param regime Current market regime — immutable from this point.
/// @param session Current trading session.
function commitSignal(
string calldata signalId,
bytes32 hash,
uint8 direction,
uint8 confTier,
string calldata regime,
string calldata session,
uint256 entryPrice
) external onlyOwner {
if (_commits[signalId].commitTimestamp != 0) revert AlreadyCommitted(signalId);
if (confTier > 3) revert InvalidConfTier(confTier);
_commits[signalId] = SignalCommit({
hash: hash,
direction: direction,
confTier: confTier,
regime: regime,
session: session,
commitTimestamp: block.timestamp,
entryPrice: entryPrice,
revealed: false,
outcomeReported: false,
expired: false
});
unchecked { ++totalCommits; }
emit SignalCommitted(
signalId, hash, direction, confTier, regime, session, entryPrice, block.timestamp
);
}
/// @notice Reveal plaintext signal data after trade execution.
/// Contract recomputes hash — reverts on mismatch.
/// Must be called within REVEAL_DEADLINE (1 hour) of commit.
function revealSignal(
string calldata signalId,
SignalReveal calldata reveal
) external onlyOwner {
SignalCommit storage commit = _commits[signalId];
if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
if (commit.revealed) revert AlreadyRevealed(signalId);
if (commit.expired) revert CommitExpired(signalId);
if (block.timestamp > commit.commitTimestamp + REVEAL_DEADLINE) {
commit.expired = true;
emit SignalExpired(signalId, block.timestamp);
revert CommitExpired(signalId);
}
// Recompute hash — reject any plaintext that doesn't match the commit
bytes32 recomputed = keccak256(abi.encodePacked(
signalId,
reveal.nonce,
commit.direction,
reveal.evEst_scaled
));
if (recomputed != commit.hash) revert HashMismatch(commit.hash, recomputed);
_reveals[signalId] = reveal;
commit.revealed = true;
emit SignalRevealed(
signalId,
commit.regime,
reveal.evEst_scaled,
reveal.qualityScore,
block.timestamp
);
}
/// @notice Report trade outcome using oracle prices only.
/// win/pnlUsd/R_scaled are computed on-chain from price data.
/// No self-reporting from MT5 — outcome is derived from Binance
/// and Pyth close prices vs the committed entry price.
/// @param signalId Signal identifier.
/// @param binanceClosePrice Binance spot close price × 10^8.
/// @param pythClosePrice Pyth BTC/USD close price × 10^8.
function reportOutcome(
string calldata signalId,
uint256 binanceClosePrice,
uint256 pythClosePrice
) external onlyOwner nonReentrant {
SignalCommit storage commit = _commits[signalId];
if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
if (!commit.revealed) revert OutcomeBeforeReveal(signalId);
if (commit.outcomeReported) revert AlreadyOutcomeReported(signalId);
// ── Compute outcome from oracle prices vs committed entry price ──
// Use Binance as primary source; Pyth as corroborating reference.
uint256 closePrice = binanceClosePrice;
uint256 entry = commit.entryPrice;
// direction: 1 = up (long), 2 = down (short)
bool win;
if (commit.direction == 1) {
win = closePrice > entry;
} else if (commit.direction == 2) {
win = closePrice < entry;
} else {
win = false; // flat — no directional prediction
}
// pnlUsd_scaled = price move in USD × 100 (signed)
// Assumes 1 unit of base asset; consumer scales by position size
int256 priceDelta;
if (closePrice >= entry) {
priceDelta = int256((closePrice - entry) / 1e6); // scale to cents
} else {
priceDelta = -int256((entry - closePrice) / 1e6);
}
int256 pnlUsd = commit.direction == 2 ? -priceDelta : priceDelta;
// R_scaled = price move as % of entry × 10000
// e.g. 1% move = R_scaled 100
int256 R_scaled;
if (entry > 0) {
if (closePrice >= entry) {
R_scaled = int256(((closePrice - entry) * 10000) / entry);
} else {
R_scaled = -int256(((entry - closePrice) * 10000) / entry);
}
if (commit.direction == 2) R_scaled = -R_scaled;
}
// Checks-Effects-Interactions pattern
commit.outcomeReported = true;
_outcomes[signalId] = Outcome({
win: win,
pnlUsd_scaled: pnlUsd,
R_scaled: R_scaled,
closeTimestamp: block.timestamp,
binanceClosePrice: binanceClosePrice,
pythClosePrice: pythClosePrice
});
unchecked { ++totalOutcomes; }
SignalReveal storage reveal = _reveals[signalId];
// Interactions — external calls last
if (address(agentPayment) != address(0)) {
agentPayment.settleHandoffChain(
signalId,
R_scaled,
win,
reveal.qualityScore,
reveal.evEst_scaled,
commit.confTier
);
}
if (address(performanceLedger) != address(0)) {
performanceLedger.recordOutcome(
commit.confTier,
commit.regime,
commit.session,
win,
pnlUsd,
R_scaled,
binanceClosePrice,
pythClosePrice
);
}
emit OutcomeReported(signalId, win, pnlUsd, R_scaled, binanceClosePrice, pythClosePrice, block.timestamp);
}
/// @notice Mark an orphaned commit as expired.
/// Callable by anyone after REVEAL_DEADLINE has passed.
/// Prevents stale commits accumulating indefinitely.
function expireSignal(string calldata signalId) external {
SignalCommit storage commit = _commits[signalId];
if (commit.commitTimestamp == 0) revert NotCommitted(signalId);
if (commit.revealed) revert AlreadyRevealed(signalId);
if (commit.expired) return; // idempotent
if (block.timestamp <= commit.commitTimestamp + REVEAL_DEADLINE)
revert RevealDeadlineNotPassed(signalId);
commit.expired = true;
emit SignalExpired(signalId, block.timestamp);
}
/// @notice On-chain proof of operation. Owner fires every ~60 minutes.
/// Proves system was running even during quiet markets.
function heartbeat() external onlyOwner {
lastHeartbeat = block.timestamp;
emit HeartbeatPulse(block.timestamp, totalCommits, totalOutcomes);
}
// ── Views ────────────────────────────────────────────────────────────
function getCommit(string calldata signalId)
external view returns (SignalCommit memory)
{
return _commits[signalId];
}
function getReveal(string calldata signalId)
external view returns (SignalReveal memory)
{
return _reveals[signalId];
}
function getOutcome(string calldata signalId)
external view returns (Outcome memory)
{
return _outcomes[signalId];
}
function isActive() external view returns (bool) {
return lastHeartbeat > 0 &&
block.timestamp - lastHeartbeat < 2 hours;
}
}
Compiler Settings
{"viaIR":true,"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"initialOwner","internalType":"address"}]},{"type":"error","name":"AlreadyCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"AlreadyOutcomeReported","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"AlreadyRevealed","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"CommitExpired","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"HashMismatch","inputs":[{"type":"bytes32","name":"expected","internalType":"bytes32"},{"type":"bytes32","name":"provided","internalType":"bytes32"}]},{"type":"error","name":"InvalidConfTier","inputs":[{"type":"uint8","name":"tier","internalType":"uint8"}]},{"type":"error","name":"NotCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"OutcomeBeforeReveal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"RevealDeadlineNotPassed","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"event","name":"ContractsLinked","inputs":[{"type":"address","name":"agentPayment","internalType":"address","indexed":false},{"type":"address","name":"performanceLedger","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"HeartbeatPulse","inputs":[{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalCommits","internalType":"uint256","indexed":false},{"type":"uint256","name":"totalOutcomes","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OutcomeReported","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"bool","name":"win","internalType":"bool","indexed":false},{"type":"int256","name":"pnlUsd_scaled","internalType":"int256","indexed":false},{"type":"int256","name":"R_scaled","internalType":"int256","indexed":false},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"pythClosePrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SignalCommitted","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"bytes32","name":"hash","internalType":"bytes32","indexed":false},{"type":"uint8","name":"direction","internalType":"uint8","indexed":false},{"type":"uint8","name":"confTier","internalType":"uint8","indexed":false},{"type":"string","name":"regime","internalType":"string","indexed":false},{"type":"string","name":"session","internalType":"string","indexed":false},{"type":"uint256","name":"entryPrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SignalExpired","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SignalRevealed","inputs":[{"type":"string","name":"signalId","internalType":"string","indexed":true},{"type":"string","name":"regime","internalType":"string","indexed":false},{"type":"int256","name":"evEst_scaled","internalType":"int256","indexed":false},{"type":"uint256","name":"qualityScore","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"REVEAL_DEADLINE","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"acceptOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IAgentPayment"}],"name":"agentPayment","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"commitSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"uint8","name":"direction","internalType":"uint8"},{"type":"uint8","name":"confTier","internalType":"uint8"},{"type":"string","name":"regime","internalType":"string"},{"type":"string","name":"session","internalType":"string"},{"type":"uint256","name":"entryPrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"expireSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.SignalCommit","components":[{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"uint8","name":"direction","internalType":"uint8"},{"type":"uint8","name":"confTier","internalType":"uint8"},{"type":"string","name":"regime","internalType":"string"},{"type":"string","name":"session","internalType":"string"},{"type":"uint256","name":"commitTimestamp","internalType":"uint256"},{"type":"uint256","name":"entryPrice","internalType":"uint256"},{"type":"bool","name":"revealed","internalType":"bool"},{"type":"bool","name":"outcomeReported","internalType":"bool"},{"type":"bool","name":"expired","internalType":"bool"}]}],"name":"getCommit","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.Outcome","components":[{"type":"bool","name":"win","internalType":"bool"},{"type":"int256","name":"pnlUsd_scaled","internalType":"int256"},{"type":"int256","name":"R_scaled","internalType":"int256"},{"type":"uint256","name":"closeTimestamp","internalType":"uint256"},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256"},{"type":"uint256","name":"pythClosePrice","internalType":"uint256"}]}],"name":"getOutcome","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct SignalRegistry.SignalReveal","components":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"nonce","internalType":"bytes32"},{"type":"int256","name":"evEst_scaled","internalType":"int256"},{"type":"string","name":"zoneId","internalType":"string"},{"type":"uint256","name":"qualityScore","internalType":"uint256"}]}],"name":"getReveal","inputs":[{"type":"string","name":"signalId","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"heartbeat","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isActive","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastHeartbeat","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"linkContracts","inputs":[{"type":"address","name":"_agentPayment","internalType":"address"},{"type":"address","name":"_performanceLedger","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pendingOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IPerformanceLedger"}],"name":"performanceLedger","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reportOutcome","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"uint256","name":"binanceClosePrice","internalType":"uint256"},{"type":"uint256","name":"pythClosePrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revealSignal","inputs":[{"type":"string","name":"signalId","internalType":"string"},{"type":"tuple","name":"reveal","internalType":"struct SignalRegistry.SignalReveal","components":[{"type":"string","name":"signalId","internalType":"string"},{"type":"bytes32","name":"nonce","internalType":"bytes32"},{"type":"int256","name":"evEst_scaled","internalType":"int256"},{"type":"string","name":"zoneId","internalType":"string"},{"type":"uint256","name":"qualityScore","internalType":"uint256"}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalCommits","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalOutcomes","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Contract Creation Code
0x6080346100c957601f611ca638819003918201601f19168301916001600160401b038311848410176100ce578084926020946040528339810103126100c957516001600160a01b0390818116908190036100c95780156100b05760018060a01b0319918260015416600155816000549384161760005560405192167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36001600255611bc190816100e58239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6
Deployed ByteCode
0x6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033