メソッド "example" の example が正常に送信されました。 内部トランザクション トランザクション トークン転送 nft転送 トークン詳細転送 IDごとのトークン詳細転送 トークン所有者 ログ 実行が取り消されました。
false
false
契約
0x81e27A06c92C380d780df4B82C358124c78DaE54
概要
TXENE バランス
0 TXENE
TXENE 価値
$--- (@ $---/TXENE)
より詳しい情報
契約作成者
My Happy SVG 最新の25の内部トランザクション(すべてを表示します)
"%>
親txnハッシュ
方法
ブロック から 価値
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
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
トランザクションハッシュ
方法
ブロック から 価値 txn料金
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)
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
Transaction Hash
Method
ブロック から タイプ アイテム
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 Source Code (Solidity)
Contract Security Audit
- Submit Audit Here
Contract ABI
Contract Creation Code
Deployed ByteCode Sourcemap
Swarm Source
ipfs://dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b61
My Happy SVG Latest 25 from a total of 323,666 transactions (+ 1 Pending)
txnハッシュ ブロック 方法 My Happy SVG ログ
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
0xecf33c0f32a79068…
17453280 13 mins ago
0x22895118
deposit(bytes,bytes,bytes,bytes32)
DepositEvent (bytes pubkey, bytes withdrawal_credentials, bytes amount, bytes signature, bytes index)
[topic0] 0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
00000000000000000000000000000000000000000000000000000000000000a0
My Happy SVG Latest 15 blocks produced
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
警告!契約バイトコードは変更されており、検証されたものと一致しません。したがって、このスマートコントラクトとの相互作用は危険toなる場合があります。
契約名:
SignalRegistry
最適化を有効toする:
true
コンパイラバージョン:
v0.8.20+commit.a1b79de6
最適化は実行されます:
200
EVMバージョン:
paris
検証:
2026-04-24T20:41:36.965373Z

コンストラクターの引数

0x000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6

Arg [0] (address) : 0xdd06e4fac3df7ec18b552d7cd26036bc27e23ce6

                              

ファイル 1 の 1: contracts/SignalRegistry.sol

Sol2uml
新規
// 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;
    }
}
        

コンパイラ設定

{"viaIR":true,"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
              

契約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"}]}]
              

契約作成コード

0x6080346100c957601f611ca638819003918201601f19168301916001600160401b038311848410176100ce578084926020946040528339810103126100c957516001600160a01b0390818116908190036100c95780156100b05760018060a01b0319918260015416600155816000549384161760005560405192167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36001600255611bc190816100e58239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033000000000000000000000000dd06e4fac3df7ec18b552d7cd26036bc27e23ce6

展開されたbytecode

0x6080604052600436101561001257600080fd5b6000803560e01c80631157e2c1146116fa5780631c5b5b93146116d157806322f3e2d41461169057806326e05dd4146116735780633dc9abfa146115c45780633defb9621461156957806344d6ee2b1461154b57806369c1a7121461152d578063715018a6146114c857806377142c08146114aa57806379ba50971461142c5780638da5cb5b14611405578063945c11ff146113dc57806394e8c3311461121b578063aa1a0989146110f5578063b9cd881314610c5b578063c6522d0114610b6d578063d1951e15146106ad578063e30c397814610684578063e5f6534a146101735763f2fde38b1461010457600080fd5b346101705760203660031901126101705761011d611769565b6101256117bf565b600180546001600160a01b0319166001600160a01b0392831690811790915582549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b5034610170576060366003190112610170576004356001600160401b038111610680576101a4903690600401611737565b6101ac6117bf565b600280541461066e5760028055604051818382376020818381016003815203019020916004830154156106495760068301549060ff8216156106245760ff8260081c166105fc576005840154908560ff60018701541695600187146000146105e2578360243511945b60243585116105c457620f424061022e86602435611a2c565b045b600289036105be5761024190611a6f565b975b83958061050a575b505061ff00191661010017600682015560405161026781611841565b8515158152876020820152846040820152426060820152602435608082015260443560a0820152600560a0604051898782376020818b810185815203019020926102c081511515859060ff801983541691151516179055565b6020810151600185015560408101516002850155606081015160038501556080810151600485015501519101556001600a5401600a5560405186848237600487820190815281900360200190206006546001600160a01b031680610467575b50506007546001600160a01b031690816103a2575b505050908360c093927fd7bc90a7b314cbf2954c472d1c018339fab1bb78c0782cf7338a60eb17899fe595604051928392833781016000815203902094604051921515835260208301526040820152602435606082015260443560808201524260a0820152a2600160025580f35b60ff600182015460081c1690823b156104635761040192849283604051809681958294635aed5aed60e01b84526004840152610100602484015260036103ef610104850160028401611996565b91811985840301604486015201611996565b8b151560648301528d60848301528a60a483015260243560c483015260443560e483015203925af180156104585761043a575b80610334565b610447909493929461185c565b6104545790918538610434565b8580fd5b6040513d84823e3d90fd5b8380fd5b600260048394959301549301549060ff600186015460081c1693813b1561046357838a898b976104b8968b956040519a8b998a98899763a199b20760e01b895260c060048a015260c48901916117d3565b946024870152151560448601526064850152608484015260a483015203925af180156104ff576104ec575b9081889261031f565b6104f89097919761185c565b95386104e3565b6040513d8a823e3d90fd5b9095509192509060243581116105815761052681602435611a2c565b6127109081810291818304149015171561056d576105498a949392600292611a4f565b955b14610558575b388061024b565b9361056561010091611a6f565b949050610551565b634e487b7160e01b8a52601160045260248afd5b61058d60243582611a2c565b6127109081810291818304149015171561056d576105b86105b38b959493600293611a4f565b611a6f565b9561054b565b97610243565b6105dd620f42406105d760243588611a2c565b04611a6f565b610230565b600287036105f557836024351094610215565b8194610215565b8261062060405192839262f565ab60e21b84526020600485015260248401916117d3565b0390fd5b826106206040519283926340387f1b60e11b84526020600485015260248401916117d3565b60405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b604051633ee5aeb560e01b8152600490fd5b5080fd5b50346101705780600319360112610170576001546040516001600160a01b039091168152602090f35b503461017057600319604036820112610680576004356001600160401b038111610b69576106df903690600401611737565b90916001600160401b03602435116104635760a09060243536030112610b69576107076117bf565b6040518183823760208183810160038152030190209160048301548015610b4357600684015460ff8116610b205760101c60ff16610afa57610e108101809111610ae6574211610a8457600183015460405190838360208401376024803501356020858401015260ff60f81b9060f81b166040848301015260446024350135604184830101526107a460618285810103604181018452018261186f565b60208151910120835490818103610a665750506040518282823760208184810160048152030190206107e0602435600401602435600401611964565b906001600160401b0382116109e1578190610805826107ff86546118d6565b86611910565b8790601f8311600114610a005788926109f5575b50508160011b916000199060031b1c19161781555b6024803501356001820155604460243501356002820155610859606460243501602435600401611964565b906001600160401b0382116109e1576108828261087960038601546118d6565b60038601611910565b8690601f831160011461094a5792827ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc896936109219693600499968b9261093f575b50508160011b916000199060031b1c19161760038201555b60243560840135960186905560068301805460ff1916600117905560405191829181908337810187815203902093604051928392608084526002608085019101611996565b9060446024350135602084015260408301524260608301520390a280f35b0135905038806108c4565b6003840188526020882091885b601f19851681106109c9575083610921969360049996936001937ffe5007de8216604970ee80431d05ad9a63c00ed655d1305cf149277d072dabc89a97601f198116106109af575b505050811b0160038201556108dc565b0135600019600384901b60f8161c1916905538808061099f565b90926020600181928686013581550194019101610957565b634e487b7160e01b87526041600452602487fd5b013590503880610819565b84895260208920899450915b601f1984168510610a4e576001945083601f19811610610a34575b505050811b01815561082e565b0135600019600384901b60f8161c19169055388080610a27565b81810135835560209485019460019093019201610a0c565b60449250604051916305846adf60e11b835260048301526024820152fd5b90836040518091838583378382019081520390207f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc6020604051428152a2610620604051928392638981073360e01b84526020600485015260248401916117d3565b634e487b7160e01b85526011600452602485fd5b50604051638981073360e01b8152602060048201529182916106209160248401916117d3565b604051633b7f299d60e11b815260206004820152806106206024820187876117d3565b5060405163129a3e3360e21b8152602060048201529182916106209160248401916117d3565b8280fd5b5034610170576020366003190112610170576004356001600160401b03811161068057906020610ba360c0933690600401611737565b9260a0604051610bb281611841565b8281528285820152826040820152826060820152826080820152015282604051938492833781016005815203019020604051610bed81611841565b60ff8254161515918282526001810154602083019081526002820154604084019081526003830154916060850192835260a0600560048601549560808801968752015495019485526040519586525160208601525160408501525160608401525160808301525160a0820152f35b50346101705760e0366003190112610170576004356001600160401b03811161068057610c8c903690600401611737565b906044359060ff82168203610463576064359260ff841684036110f1576084356001600160401b03811161045457610cc8903690600401611737565b60a4356001600160401b0381116110ed57610ce7903690600401611737565b939094610cf26117bf565b600460405183838237602081858101600381520301902001546110c857600360ff8916116110ad57604051610d26816117f4565b602435815260ff8816602082015260ff89166040820152610d48368587611890565b6060820152610d58368789611890565b60808201524260a082015260c43560c08201528960e08201528961010082015289610120820152604051838382376020818581016003815203019020815181556001810160ff60208401511681549061ff00604086015160081b169161ffff19161717905560608201518051906001600160401b03821161101f578c8291610df083610de760028801546118d6565b60028801611910565b602091601f841160011461103e5792611033575b50508160011b916000199060031b1c19161760028201555b60808201518051906001600160401b03821161101f57610e438261087960038601546118d6565b6020908d601f8411600114610f7c5794600660ff9c9995857fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b92610f71575b50508160011b916000199060031b1c19161760038201555b60a0830151600482015560c083015160058201550190610edd60e08201511515839060ff801983541691151516179055565b61010081015115159061ff0062ff00006101208554930151151560101b169260081b169062ffff001916171790556001600954016009558d82604051938493843782019081520390209a604051998a996024358b521660208a015216604088015260e0606088015260e08701916117d3565b9184830360808601526117d3565b60c43560a08301524260c08301520390a280f35b015190503880610e93565b919060038501835260208320925b601f1985168110611007575094600660ff9c999560017fbecd35a49d5ac4a745a4929227d1836e223fcdea6049fd04420c0089f030a1b19f9d9a95968f97610f4f9b96610f5d9f9b83601f19811610610fee575b505050811b016003820155610eab565b015160001960f88460031b161c19169055388080610fde565b91926020600181928685015181550194019201610f8a565b634e487b7160e01b8d52604160045260248dfd5b015190503880610e04565b6002860181526020812090945091905b601f1984168510611092576001945083601f19811610611079575b505050811b016002820155610e1c565b015160001960f88460031b161c19169055388080611069565b8181015183556020948501946001909301929091019061104e565b604051630a2dce0760e31b815260ff89166004820152602490fd5b60405163796cc68d60e01b8152602060048201529182916106209160248401916117d3565b8780fd5b8480fd5b503461017057602080600319360112610680576004356001600160401b038111610b6957918161112b60a0943690600401611737565b92608060405161113a81611826565b606081528285820152826040820152606080820152015282604051938492833781016004815203019020906112106040519261117584611826565b60405161118d816111868185611996565b038261186f565b84526001810154908385019182526002810154604086019081526111f16004604051936111c8856111c18160038501611996565b038661186f565b6060890194855201549560808801968752604051988998828a52519189015260c088019061177f565b9251604087015251606086015251848203601f1901608086015261177f565b905160a08301520390f35b5034610170576020366003190112610170576004356001600160401b0381116106805761124e6020913690600401611737565b9261012060405161125e816117f4565b8281528285820152826040820152606080820152606060808201528260a08201528260c08201528260e08201528261010082015201528260405193849283378101600381520301902060ff6006604051926112b8846117f4565b80548452826001820154818116602087015260081c1660408501526040516112e7816111868160028601611996565b6060850152604051611300816111868160038601611996565b6080850152600481015460a0850152600581015460c08501520154818116151560e0840152818160081c16151561010084015260101c1615156101208201526040518091602082528051602083015260ff602082015116604083015260ff604082015116606083015260608101516101206113a261138c6101409384608088015261016087019061177f565b6080850151868203601f190160a088015261177f565b9260a081015160c086015260c081015160e086015260e0810151151561010086015261010081015115158286015201511515908301520390f35b50346101705780600319360112610170576006546040516001600160a01b039091168152602090f35b5034610170578060031936011261017057546040516001600160a01b039091168152602090f35b50346101705780600319360112610170576001546001600160a01b033381831603611492576001600160a01b031991821660015582543392811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405163118cdaa760e01b8152336004820152602490fd5b50346101705780600319360112610170576020600a54604051908152f35b50346101705780600319360112610170576114e16117bf565b600180546001600160a01b03199081169091558154908116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101705780600319360112610170576020600854604051908152f35b50346101705780600319360112610170576020600954604051908152f35b50346101705780600319360112610170576115826117bf565b426008557f2c9f2b6011d93cfc4365f13817b7a0105d374c3b06cdf4de6723009f3aa80ba86060600954600a546040519142835260208301526040820152a180f35b5034610170576040366003190112610170576115de611769565b6001600160a01b036024358181169290839003610463576115fd6117bf565b16908115611661578015611661577feaef7cd9257c1fea4f8488cbea5e7d9089a48a21dd9dd1603762c3013e1bd20e91816040926bffffffffffffffffffffffff60a01b83816006541617600655600754161760075582519182526020820152a180f35b60405163d92e233d60e01b8152600490fd5b50346101705780600319360112610170576020604051610e108152f35b5034610170578060031936011261017057602060085480151590816116bb575b506040519015158152f35b611c2091506116ca9042611a2c565b10826116b0565b50346101705780600319360112610170576007546040516001600160a01b039091168152602090f35b5034610170576020366003190112610170576004356001600160401b0381116106805761172e611734913690600401611737565b90611a80565b80f35b9181601f84011215611764578235916001600160401b038311611764576020838186019501011161176457565b600080fd5b600435906001600160a01b038216820361176457565b919082519283825260005b8481106117ab575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161178a565b6000546001600160a01b0316330361149257565b908060209392818452848401376000828201840152601f01601f1916010190565b61014081019081106001600160401b0382111761181057604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761181057604052565b60c081019081106001600160401b0382111761181057604052565b6001600160401b03811161181057604052565b90601f801991011681019081106001600160401b0382111761181057604052565b9291926001600160401b03821161181057604051916118b9601f8201601f19166020018461186f565b829481845281830111611764578281602093846000960137010152565b90600182811c92168015611906575b60208310146118f057565b634e487b7160e01b600052602260045260246000fd5b91607f16916118e5565b90601f811161191e57505050565b600091825260208220906020601f850160051c8301941061195a575b601f0160051c01915b82811061194f57505050565b818155600101611943565b909250829061193a565b903590601e198136030182121561176457018035906001600160401b0382116117645760200191813603831361176457565b90600092918054916119a7836118d6565b918282526001938481169081600014611a0957506001146119c9575b50505050565b90919394506000526020928360002092846000945b8386106119f55750505050010190388080806119c3565b8054858701830152940193859082016119de565b9294505050602093945060ff191683830152151560051b010190388080806119c3565b91908203918211611a3957565b634e487b7160e01b600052601160045260246000fd5b8115611a59570490565b634e487b7160e01b600052601260045260246000fd5b600160ff1b8114611a395760000390565b9060409182518282823760208184810160038152030190206004810154908115611b69576006019081549060ff8216611b475760ff8260101c16611b3f57610e108101809111611a3957421115611b1d5762ff000019166201000017905582517f1d8ecc51aaf0720fa685a5311a44666d165b9060817d718b3b98b1a47cf203bc92602092829190819083378101600081520390209251428152a2565b8451630d64593d60e31b815260206004820152806106206024820187876117d3565b505050505050565b8551633b7f299d60e11b815260206004820152806106206024820188886117d3565b845163129a3e3360e21b815260206004820152806106206024820187876117d356fea2646970667358221220ecea29cd8e03afde10a890b139c655e07ee1c04502f1373c8c386393db5e2c5664736f6c63430008140033