ETH Price: $1,973.47 (-4.59%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Initialize217089732025-01-26 13:25:35385 days ago1737897935IN
Henlo: DAO
0 ETH0.000150823.38065978

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HenloDao

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;

contract HenloDao {
    /// @notice The name of this contract
    string public constant name = "Henlo DAO";

    /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed
    function quorumVotes() public pure returns (uint) { return 5_250_000_000_000e9; } // 5_250_000_000_000e9 = 2.5% of Henlo

    /// @notice The number of votes required in order for a voter to become a proposer
    function proposalThreshold() public pure returns (uint) { return 210_000_000_000e9; } // 210_000_000_000e9 = 0.1% of Henlo

    /// @notice The maximum number of actions that can be included in a proposal
    function proposalMaxOperations() public pure returns (uint) { return 10; } // 10 actionss

    /// @notice The delay before voting on a proposal may take place, once proposed
    function votingDelay() public pure returns (uint) { return 1; } // 1 block

    /// @notice The duration of voting on a proposal, in blocks
    function votingPeriod() virtual public pure returns (uint) { return 40320; } // ~7 days in blocks (assuming 15s blocks)

    /// @notice The address of the Protocol Timelock
    TimelockInterface public timelock;

    /// @notice The address of the governance token
    HenloInterface public henlo;

    /// @notice The address of the Governor Guardian
    address public guardian;

    /// @notice The total number of proposals
    uint public proposalCount;

    struct Proposal {
        /// @notice Unique id for looking up a proposal
        uint id;

        /// @notice Creator of the proposal
        address proposer;

        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds
        uint eta;

        /// @notice the ordered list of target addresses for calls to be made
        address[] targets;

        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made
        uint[] values;

        /// @notice The ordered list of function signatures to be called
        string[] signatures;

        /// @notice The ordered list of calldata to be passed to each call
        bytes[] calldatas;

        /// @notice The block at which voting begins: holders must delegate their votes prior to this block
        uint startBlock;

        /// @notice The block at which voting ends: votes must be cast prior to this block
        uint endBlock;

        /// @notice Current number of votes in favor of this proposal
        uint forVotes;

        /// @notice Current number of votes in opposition to this proposal
        uint againstVotes;

        /// @notice Flag marking whether the proposal has been canceled
        bool canceled;

        /// @notice Flag marking whether the proposal has been executed
        bool executed;

        /// @notice Receipts of ballots for the entire set of voters
        mapping (address => Receipt) receipts;
    }

    /// @notice Ballot receipt record for a voter
    struct Receipt {
        /// @notice Whether or not a vote has been cast
        bool hasVoted;

        /// @notice Whether or not the voter supports the proposal
        bool support;

        /// @notice The number of votes the voter had, which were cast
        uint96 votes;
    }

    /// @notice Possible states that a proposal may be in
    enum ProposalState {
        Pending,
        Active,
        Canceled,
        Defeated,
        Succeeded,
        Queued,
        Expired,
        Executed
    }

    /// @notice The official record of all proposals ever proposed
    mapping (uint => Proposal) public proposals;

    /// @notice The latest proposal for each proposer
    mapping (address => uint) public latestProposalIds;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the ballot struct used by the contract
    bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,bool support)");

    /// @notice An event emitted when a new proposal is created
    event ProposalCreated(uint id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, uint startBlock, uint endBlock, string description);

    /// @notice An event emitted when a vote has been cast on a proposal
    event VoteCast(address voter, uint proposalId, bool support, uint votes);

    /// @notice An event emitted when a proposal has been canceled
    event ProposalCanceled(uint id);

    /// @notice An event emitted when a proposal has been queued in the Timelock
    event ProposalQueued(uint id, uint eta);

    /// @notice An event emitted when a proposal has been executed in the Timelock
    event ProposalExecuted(uint id);

    constructor(address henlo_, address guardian_) {
        require(guardian_ != address(0), "Henlo DAO::gurdian can not be address zero");
        henlo = HenloInterface(henlo_);
        guardian = guardian_;
    }

    function initialize(address timelock_) public {
        // gaurdian will be setted to zero address after first call, so this function is only callable once
        require(msg.sender == guardian, "Henlo DAO::_setTimelock: sender must be gov guardian");
        timelock = TimelockInterface(timelock_);
        guardian = address(0);
    }

    function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) {
        require(henlo.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold(), "Henlo DAO::propose: proposer votes below proposal threshold");
        require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "Henlo DAO::propose: proposal function information arity mismatch");
        require(targets.length != 0, "Henlo DAO::propose: must provide actions");
        require(targets.length <= proposalMaxOperations(), "Henlo DAO::propose: too many actions");

        uint latestProposalId = latestProposalIds[msg.sender];
        if (latestProposalId != 0) {
          ProposalState proposersLatestProposalState = state(latestProposalId);
          require(proposersLatestProposalState != ProposalState.Active, "Henlo DAO::propose: one live proposal per proposer, found an already active proposal");
          require(proposersLatestProposalState != ProposalState.Pending, "Henlo DAO::propose: one live proposal per proposer, found an already pending proposal");
        }

        uint startBlock = add256(block.number, votingDelay());
        uint endBlock = add256(startBlock, votingPeriod());

        proposalCount++;
        uint proposalId = proposalCount;
        Proposal storage newProposal = proposals[proposalId];
        // This should never happen but add a check in case.
        require(newProposal.id == 0, "Henlo DAO::propose: ProposalID collsion");
        newProposal.id = proposalId;
        newProposal.proposer = msg.sender;
        newProposal.eta = 0;
        newProposal.targets = targets;
        newProposal.values = values;
        newProposal.signatures = signatures;
        newProposal.calldatas = calldatas;
        newProposal.startBlock = startBlock;
        newProposal.endBlock = endBlock;
        newProposal.forVotes = 0;
        newProposal.againstVotes = 0;
        newProposal.canceled = false;
        newProposal.executed = false;

        latestProposalIds[newProposal.proposer] = newProposal.id;

        emit ProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, startBlock, endBlock, description);
        return newProposal.id;
    }

    function queue(uint proposalId) public {
        require(state(proposalId) == ProposalState.Succeeded, "Henlo DAO::queue: proposal can only be queued if it is succeeded");
        Proposal storage proposal = proposals[proposalId];
        uint eta = add256(block.timestamp, timelock.delay());
        for (uint i = 0; i < proposal.targets.length; i++) {
            _queueOrRevert(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta);
        }
        proposal.eta = eta;
        emit ProposalQueued(proposalId, eta);
    }

    function _queueOrRevert(address target, uint value, string memory signature, bytes memory data, uint eta) internal {
        require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "Henlo DAO::_queueOrRevert: proposal action already queued at eta");
        timelock.queueTransaction(target, value, signature, data, eta);
    }

    function execute(uint proposalId) public payable {
        require(state(proposalId) == ProposalState.Queued, "Henlo DAO::execute: proposal can only be executed if it is queued");
        Proposal storage proposal = proposals[proposalId];
        proposal.executed = true;
        for (uint i = 0; i < proposal.targets.length; i++) {
            timelock.executeTransaction{value: proposal.values[i]}(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }
        emit ProposalExecuted(proposalId);
    }

    function cancel(uint proposalId) public {
        ProposalState state_ = state(proposalId);
        require(state_ != ProposalState.Executed, "Henlo DAO::cancel: cannot cancel executed proposal");
        require(state_ != ProposalState.Canceled, "Henlo DAO::cancel: cannot cancel a proposal that already been canceled");

        Proposal storage proposal = proposals[proposalId];
        require(henlo.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold(), "Henlo DAO::cancel: proposer above threshold");

        proposal.canceled = true;
        for (uint i = 0; i < proposal.targets.length; i++) {
            timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }

        emit ProposalCanceled(proposalId);
    }

    function getActions(uint proposalId) public view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas) {
        Proposal storage p = proposals[proposalId];
        return (p.targets, p.values, p.signatures, p.calldatas);
    }

    function getDetails(uint proposalId) public view returns (uint startblock_, uint endBlock_, uint forVotes_, uint againstVotes_, address proposer_) {
        Proposal storage p = proposals[proposalId];
        return (p.startBlock, p.endBlock, p.forVotes, p.againstVotes, p.proposer);
    }

    function getReceipt(uint proposalId, address voter) public view returns (Receipt memory) {
        return proposals[proposalId].receipts[voter];
    }

    function state(uint proposalId) public view returns (ProposalState) {
        require(proposalCount >= proposalId && proposalId > 0, "Henlo DAO::state: invalid proposal id");
        Proposal storage proposal = proposals[proposalId];
        if (proposal.canceled) {
            return ProposalState.Canceled;
        } else if (block.number <= proposal.startBlock) {
            return ProposalState.Pending;
        } else if (block.number <= proposal.endBlock) {
            return ProposalState.Active;
        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes()) {
            return ProposalState.Defeated;
        } else if (proposal.eta == 0) {
            return ProposalState.Succeeded;
        } else if (proposal.executed) {
            return ProposalState.Executed;
        } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) {
            return ProposalState.Expired;
        } else {
            return ProposalState.Queued;
        }
    }

    function castVote(uint proposalId, bool support) public {
        return _castVote(msg.sender, proposalId, support);
    }

    function castVoteBySig(uint proposalId, bool support, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "Henlo DAO::castVoteBySig: invalid signature");
        return _castVote(signatory, proposalId, support);
    }

    function _castVote(address voter, uint proposalId, bool support) internal {
        require(state(proposalId) == ProposalState.Active, "Henlo DAO::_castVote: voting is closed");
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = proposal.receipts[voter];
        require(receipt.hasVoted == false, "Henlo DAO::_castVote: voter already voted");
        uint96 votes = henlo.getPriorVotes(voter, proposal.startBlock);

        if (support) {
            proposal.forVotes = add256(proposal.forVotes, votes);
        } else {
            proposal.againstVotes = add256(proposal.againstVotes, votes);
        }

        receipt.hasVoted = true;
        receipt.support = support;
        receipt.votes = votes;

        emit VoteCast(voter, proposalId, support, votes);
    }

    function add256(uint256 a, uint256 b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub256(uint256 a, uint256 b) internal pure returns (uint) {
        require(b <= a, "subtraction underflow");
        return a - b;
    }

    function getChainId() internal view returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

interface TimelockInterface {
    function delay() external view returns (uint);
    function GRACE_PERIOD() external view returns (uint);
    function acceptAdmin() external;
    function queuedTransactions(bytes32 hash) external view returns (bool);
    function queueTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external returns (bytes32);
    function cancelTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external;
    function executeTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external payable returns (bytes memory);
}

interface HenloInterface {
    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "remappings": []
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"henlo_","type":"address"},{"internalType":"address","name":"guardian_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"VoteCast","type":"event"},{"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getDetails","outputs":[{"internalType":"uint256","name":"startblock_","type":"uint256"},{"internalType":"uint256","name":"endBlock_","type":"uint256"},{"internalType":"uint256","name":"forVotes_","type":"uint256"},{"internalType":"uint256","name":"againstVotes_","type":"uint256"},{"internalType":"address","name":"proposer_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct HenloDao.Receipt","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"henlo","outputs":[{"internalType":"contract HenloInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"timelock_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum HenloDao.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

608060405234801561000f575f80fd5b506040516150a63803806150a683398181016040528101906100319190610184565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361009f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161009690610242565b60405180910390fd5b8160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610260565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101538261012a565b9050919050565b61016381610149565b811461016d575f80fd5b50565b5f8151905061017e8161015a565b92915050565b5f806040838503121561019a57610199610126565b5b5f6101a785828601610170565b92505060206101b885828601610170565b9150509250929050565b5f82825260208201905092915050565b7f48656e6c6f2044414f3a3a6775726469616e2063616e206e6f742062652061645f8201527f6472657373207a65726f00000000000000000000000000000000000000000000602082015250565b5f61022c602a836101c2565b9150610237826101d2565b604082019050919050565b5f6020820190508181035f83015261025981610220565b9050919050565b614e398061026d5f395ff3fe608060405260043610610165575f3560e01c80634634c61f116100d0578063d33219b411610089578063ddf0b00911610063578063ddf0b0091461054e578063deaaa7cc14610576578063e23a9a52146105a0578063fe0d94c1146105dc57610165565b8063d33219b4146104be578063da35c664146104e8578063da95691a1461051257610165565b80634634c61f146103b05780637bdbe4d0146103d8578063b58131b014610402578063b93a89f71461042c578063c0ec7fc01461046c578063c4d66de81461049657610165565b806324bc1a641161012257806324bc1a641461028f578063328dd982146102b95780633932abb1146102f85780633e4f49e61461032257806340e58ee51461035e578063452a93201461038657610165565b8063013cf08b1461016957806302a251a3146101ad57806306fdde03146101d757806315373e3d1461020157806317977c611461022957806320606b7014610265575b5f80fd5b348015610174575f80fd5b5061018f600480360381019061018a919061271a565b6105f8565b6040516101a4999897969594939291906127ad565b60405180910390f35b3480156101b8575f80fd5b506101c161067a565b6040516101ce9190612838565b60405180910390f35b3480156101e2575f80fd5b506101eb610683565b6040516101f891906128c1565b60405180910390f35b34801561020c575f80fd5b506102276004803603810190610222919061290b565b6106bc565b005b348015610234575f80fd5b5061024f600480360381019061024a9190612973565b6106cb565b60405161025c9190612838565b60405180910390f35b348015610270575f80fd5b506102796106e0565b60405161028691906129b6565b60405180910390f35b34801561029a575f80fd5b506102a3610704565b6040516102b09190612838565b60405180910390f35b3480156102c4575f80fd5b506102df60048036038101906102da919061271a565b610715565b6040516102ef9493929190612d4d565b60405180910390f35b348015610303575f80fd5b5061030c6109c0565b6040516103199190612838565b60405180910390f35b34801561032d575f80fd5b506103486004803603810190610343919061271a565b6109c8565b6040516103559190612e1f565b60405180910390f35b348015610369575f80fd5b50610384600480360381019061037f919061271a565b610b90565b005b348015610391575f80fd5b5061039a610f38565b6040516103a79190612e38565b60405180910390f35b3480156103bb575f80fd5b506103d660048036038101906103d19190612eb1565b610f5d565b005b3480156103e3575f80fd5b506103ec61113d565b6040516103f99190612838565b60405180910390f35b34801561040d575f80fd5b50610416611145565b6040516104239190612838565b60405180910390f35b348015610437575f80fd5b50610452600480360381019061044d919061271a565b611155565b604051610463959493929190612f28565b60405180910390f35b348015610477575f80fd5b506104806111ba565b60405161048d9190612fd4565b60405180910390f35b3480156104a1575f80fd5b506104bc60048036038101906104b79190612973565b6111df565b005b3480156104c9575f80fd5b506104d26112f0565b6040516104df919061300d565b60405180910390f35b3480156104f3575f80fd5b506104fc611313565b6040516105099190612838565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190613530565b611319565b6040516105459190612838565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f919061271a565b61189a565b005b348015610581575f80fd5b5061058a611bcb565b60405161059791906129b6565b60405180910390f35b3480156105ab575f80fd5b506105c660048036038101906105c19190613633565b611bef565b6040516105d391906136e6565b60405180910390f35b6105f660048036038101906105f1919061271a565b611cc9565b005b6004602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600701549080600801549080600901549080600a01549080600b015f9054906101000a900460ff169080600b0160019054906101000a900460ff16905089565b5f619d80905090565b6040518060400160405280600981526020017f48656e6c6f2044414f000000000000000000000000000000000000000000000081525081565b6106c7338383611f20565b5050565b6005602052805f5260405f205f915090505481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b5f69011c9a62d04ed0c80000905090565b6060806060805f60045f8781526020019081526020015f20905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156107bd57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610774575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561080d57602002820191905f5260205f20905b8154815260200190600101908083116107f9575b5050505050925081805480602002602001604051908101604052809291908181526020015f905b828210156108dc578382905f5260205f200180546108519061372c565b80601f016020809104026020016040519081016040528092919081815260200182805461087d9061372c565b80156108c85780601f1061089f576101008083540402835291602001916108c8565b820191905f5260205f20905b8154815290600101906020018083116108ab57829003601f168201915b505050505081526020019060010190610834565b50505050915080805480602002602001604051908101604052809291908181526020015f905b828210156109aa578382905f5260205f2001805461091f9061372c565b80601f016020809104026020016040519081016040528092919081815260200182805461094b9061372c565b80156109965780601f1061096d57610100808354040283529160200191610996565b820191905f5260205f20905b81548152906001019060200180831161097957829003601f168201915b505050505081526020019060010190610902565b5050505090509450945094509450509193509193565b5f6001905090565b5f81600354101580156109da57505f82115b610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906137cc565b60405180910390fd5b5f60045f8481526020019081526020015f20905080600b015f9054906101000a900460ff1615610a4d576002915050610b8b565b80600701544311610a61575f915050610b8b565b80600801544311610a76576001915050610b8b565b80600a01548160090154111580610a975750610a90610704565b8160090154105b15610aa6576003915050610b8b565b5f816002015403610abb576004915050610b8b565b80600b0160019054906101000a900460ff1615610adc576007915050610b8b565b610b7581600201545f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7091906137fe565b6121dd565b4210610b85576006915050610b8b565b60059150505b919050565b5f610b9a826109c8565b9050600780811115610baf57610bae612dac565b5b816007811115610bc257610bc1612dac565b5b03610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990613899565b60405180910390fd5b60026007811115610c1657610c15612dac565b5b816007811115610c2957610c28612dac565b5b03610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c609061394d565b60405180910390fd5b5f60045f8481526020019081526020015f209050610c85611145565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe1836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cf143600161223a565b6040518363ffffffff1660e01b8152600401610d0e92919061396b565b602060405180830381865afa158015610d29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4d91906139bc565b6bffffffffffffffffffffffff1610610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613a57565b60405180910390fd5b600181600b015f6101000a81548160ff0219169083151502179055505f5b8160030180549050811015610efb575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663591fcdfe836003018381548110610e1957610e18613a75565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018481548110610e5757610e56613a75565b5b905f5260205f200154856005018581548110610e7657610e75613a75565b5b905f5260205f2001866006018681548110610e9457610e93613a75565b5b905f5260205f200187600201546040518663ffffffff1660e01b8152600401610ec1959493929190613bd8565b5f604051808303815f87803b158015610ed8575f80fd5b505af1158015610eea573d5f803e3d5ffd5b505050508080600101915050610db9565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610f2b9190612838565b60405180910390a1505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600981526020017f48656e6c6f2044414f000000000000000000000000000000000000000000000081525080519060200120610fc4612292565b30604051602001610fd89493929190613c37565b6040516020818303038152906040528051906020012090505f7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee878760405160200161102693929190613c7a565b6040516020818303038152906040528051906020012090505f8282604051602001611052929190613d23565b6040516020818303038152906040528051906020012090505f6001828888886040515f815260200160405260405161108d9493929190613d68565b6020604051602081039080840390855afa1580156110ad573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90613e1b565b60405180910390fd5b611132818a8a611f20565b505050505050505050565b5f600a905090565b5f680b6255df5f50080000905090565b5f805f805f8060045f8881526020019081526020015f20905080600701548160080154826009015483600a0154846001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16955095509550955095505091939590929450565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590613ea9565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b5f611322611145565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe13361136b43600161223a565b6040518363ffffffff1660e01b815260040161138892919061396b565b602060405180830381865afa1580156113a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c791906139bc565b6bffffffffffffffffffffffff1611611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613f37565b60405180910390fd5b84518651148015611427575083518651145b8015611434575082518651145b611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90613fc5565b60405180910390fd5b5f8651036114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614053565b60405180910390fd5b6114be61113d565b86511115611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906140e1565b60405180910390fd5b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8114611624575f611553826109c8565b90506001600781111561156957611568612dac565b5b81600781111561157c5761157b612dac565b5b036115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390614195565b60405180910390fd5b5f60078111156115cf576115ce612dac565b5b8160078111156115e2576115e1612dac565b5b03611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614249565b60405180910390fd5b505b5f611636436116316109c0565b6121dd565b90505f61164a8261164561067a565b6121dd565b905060035f81548092919061165e90614294565b91905055505f60035490505f60045f8381526020019081526020015f2090505f815f0154146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b99061434b565b60405180910390fd5b81815f018190555033816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f81600201819055508a81600301908051906020019061172d92919061244b565b50898160040190805190602001906117469291906124d2565b508881600501908051906020019061175f92919061251d565b5087816006019080519060200190611778929190612574565b508381600701819055508281600801819055505f81600901819055505f81600a01819055505f81600b015f6101000a81548160ff0219169083151502179055505f81600b0160016101000a81548160ff021916908315150217905550805f015460055f836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0815f0154338d8d8d8d8a8a8f60405161187e99989796959493929190614369565b60405180910390a1805f01549550505050505095945050505050565b600460078111156118ae576118ad612dac565b5b6118b7826109c8565b60078111156118c9576118c8612dac565b5b14611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190090614487565b60405180910390fd5b5f60045f8381526020019081526020015f2090505f6119b3425f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561198a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ae91906137fe565b6121dd565b90505f5b8260030180549050811015611b8357611b768360030182815481106119df576119de613a75565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018381548110611a1d57611a1c613a75565b5b905f5260205f200154856005018481548110611a3c57611a3b613a75565b5b905f5260205f20018054611a4f9061372c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7b9061372c565b8015611ac65780601f10611a9d57610100808354040283529160200191611ac6565b820191905f5260205f20905b815481529060010190602001808311611aa957829003601f168201915b5050505050866006018581548110611ae157611ae0613a75565b5b905f5260205f20018054611af49061372c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b209061372c565b8015611b6b5780601f10611b4257610100808354040283529160200191611b6b565b820191905f5260205f20905b815481529060010190602001808311611b4e57829003601f168201915b50505050508661229e565b80806001019150506119b7565b508082600201819055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928382604051611bbe9291906144a5565b60405180910390a1505050565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b611bf76125cb565b60045f8481526020019081526020015f20600c015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f82015f9054906101000a900460ff161515151581526020015f820160019054906101000a900460ff161515151581526020015f820160029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905092915050565b60056007811115611cdd57611cdc612dac565b5b611ce6826109c8565b6007811115611cf857611cf7612dac565b5b14611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90614562565b60405180910390fd5b5f60045f8381526020019081526020015f209050600181600b0160016101000a81548160ff0219169083151502179055505f5b8160030180549050811015611ee4575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f836004018381548110611dcb57611dca613a75565b5b905f5260205f200154846003018481548110611dea57611de9613a75565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856004018581548110611e2857611e27613a75565b5b905f5260205f200154866005018681548110611e4757611e46613a75565b5b905f5260205f2001876006018781548110611e6557611e64613a75565b5b905f5260205f200188600201546040518763ffffffff1660e01b8152600401611e92959493929190613bd8565b5f6040518083038185885af1158015611ead573d5f803e3d5ffd5b50505050506040513d5f823e3d601f19601f82011682018060405250810190611ed691906145ee565b508080600101915050611d6b565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611f149190612838565b60405180910390a15050565b60016007811115611f3457611f33612dac565b5b611f3d836109c8565b6007811115611f4f57611f4e612dac565b5b14611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f86906146a5565b60405180910390fd5b5f60045f8481526020019081526020015f2090505f81600c015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f1515815f015f9054906101000a900460ff1615151461203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614733565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18785600701546040518363ffffffff1660e01b815260040161209b92919061396b565b602060405180830381865afa1580156120b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120da91906139bc565b9050831561210b576120fe8360090154826bffffffffffffffffffffffff166121dd565b8360090181905550612130565b61212783600a0154826bffffffffffffffffffffffff166121dd565b83600a01819055505b6001825f015f6101000a81548160ff02191690831515021790555083825f0160016101000a81548160ff02191690831515021790555080825f0160026101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055507f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46868686846040516121cd9493929190614781565b60405180910390a1505050505050565b5f8082846121eb91906147c4565b905083811015612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790614841565b60405180910390fd5b8091505092915050565b5f8282111561227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906148a9565b60405180910390fd5b818361228a91906148c7565b905092915050565b5f804690508091505090565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2b0653786868686866040516020016122f2959493929190614932565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161232491906129b6565b602060405180830381865afa15801561233f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236391906149a5565b156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a90614a40565b60405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90186868686866040518663ffffffff1660e01b8152600401612403959493929190614932565b6020604051808303815f875af115801561241f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124439190614a72565b505050505050565b828054828255905f5260205f209081019282156124c1579160200282015b828111156124c0578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612469565b5b5090506124ce91906125fb565b5090565b828054828255905f5260205f2090810192821561250c579160200282015b8281111561250b5782518255916020019190600101906124f0565b5b50905061251991906125fb565b5090565b828054828255905f5260205f20908101928215612563579160200282015b828111156125625782518290816125529190614c1f565b509160200191906001019061253b565b5b5090506125709190612616565b5090565b828054828255905f5260205f209081019282156125ba579160200282015b828111156125b95782518290816125a99190614d34565b5091602001919060010190612592565b5b5090506125c79190612639565b5090565b60405180606001604052805f151581526020015f151581526020015f6bffffffffffffffffffffffff1681525090565b5b80821115612612575f815f9055506001016125fc565b5090565b5b80821115612635575f818161262c919061265c565b50600101612617565b5090565b5b80821115612658575f818161264f9190612699565b5060010161263a565b5090565b5080546126689061372c565b5f825580601f106126795750612696565b601f0160209004905f5260205f209081019061269591906125fb565b5b50565b5080546126a59061372c565b5f825580601f106126b657506126d3565b601f0160209004905f5260205f20908101906126d291906125fb565b5b50565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6126f9816126e7565b8114612703575f80fd5b50565b5f81359050612714816126f0565b92915050565b5f6020828403121561272f5761272e6126df565b5b5f61273c84828501612706565b91505092915050565b61274e816126e7565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61277d82612754565b9050919050565b61278d81612773565b82525050565b5f8115159050919050565b6127a781612793565b82525050565b5f610120820190506127c15f83018c612745565b6127ce602083018b612784565b6127db604083018a612745565b6127e86060830189612745565b6127f56080830188612745565b61280260a0830187612745565b61280f60c0830186612745565b61281c60e083018561279e565b61282a61010083018461279e565b9a9950505050505050505050565b5f60208201905061284b5f830184612745565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61289382612851565b61289d818561285b565b93506128ad81856020860161286b565b6128b681612879565b840191505092915050565b5f6020820190508181035f8301526128d98184612889565b905092915050565b6128ea81612793565b81146128f4575f80fd5b50565b5f81359050612905816128e1565b92915050565b5f8060408385031215612921576129206126df565b5b5f61292e85828601612706565b925050602061293f858286016128f7565b9150509250929050565b61295281612773565b811461295c575f80fd5b50565b5f8135905061296d81612949565b92915050565b5f60208284031215612988576129876126df565b5b5f6129958482850161295f565b91505092915050565b5f819050919050565b6129b08161299e565b82525050565b5f6020820190506129c95f8301846129a7565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a0181612773565b82525050565b5f612a1283836129f8565b60208301905092915050565b5f602082019050919050565b5f612a34826129cf565b612a3e81856129d9565b9350612a49836129e9565b805f5b83811015612a79578151612a608882612a07565b9750612a6b83612a1e565b925050600181019050612a4c565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ab8816126e7565b82525050565b5f612ac98383612aaf565b60208301905092915050565b5f602082019050919050565b5f612aeb82612a86565b612af58185612a90565b9350612b0083612aa0565b805f5b83811015612b30578151612b178882612abe565b9750612b2283612ad5565b925050600181019050612b03565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f612b8082612851565b612b8a8185612b66565b9350612b9a81856020860161286b565b612ba381612879565b840191505092915050565b5f612bb98383612b76565b905092915050565b5f602082019050919050565b5f612bd782612b3d565b612be18185612b47565b935083602082028501612bf385612b57565b805f5b85811015612c2e5784840389528151612c0f8582612bae565b9450612c1a83612bc1565b925060208a01995050600181019050612bf6565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f612c8d82612c69565b612c978185612c73565b9350612ca781856020860161286b565b612cb081612879565b840191505092915050565b5f612cc68383612c83565b905092915050565b5f602082019050919050565b5f612ce482612c40565b612cee8185612c4a565b935083602082028501612d0085612c5a565b805f5b85811015612d3b5784840389528151612d1c8582612cbb565b9450612d2783612cce565b925060208a01995050600181019050612d03565b50829750879550505050505092915050565b5f6080820190508181035f830152612d658187612a2a565b90508181036020830152612d798186612ae1565b90508181036040830152612d8d8185612bcd565b90508181036060830152612da18184612cda565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60088110612dea57612de9612dac565b5b50565b5f819050612dfa82612dd9565b919050565b5f612e0982612ded565b9050919050565b612e1981612dff565b82525050565b5f602082019050612e325f830184612e10565b92915050565b5f602082019050612e4b5f830184612784565b92915050565b5f60ff82169050919050565b612e6681612e51565b8114612e70575f80fd5b50565b5f81359050612e8181612e5d565b92915050565b612e908161299e565b8114612e9a575f80fd5b50565b5f81359050612eab81612e87565b92915050565b5f805f805f60a08688031215612eca57612ec96126df565b5b5f612ed788828901612706565b9550506020612ee8888289016128f7565b9450506040612ef988828901612e73565b9350506060612f0a88828901612e9d565b9250506080612f1b88828901612e9d565b9150509295509295909350565b5f60a082019050612f3b5f830188612745565b612f486020830187612745565b612f556040830186612745565b612f626060830185612745565b612f6f6080830184612784565b9695505050505050565b5f819050919050565b5f612f9c612f97612f9284612754565b612f79565b612754565b9050919050565b5f612fad82612f82565b9050919050565b5f612fbe82612fa3565b9050919050565b612fce81612fb4565b82525050565b5f602082019050612fe75f830184612fc5565b92915050565b5f612ff782612fa3565b9050919050565b61300781612fed565b82525050565b5f6020820190506130205f830184612ffe565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61306082612879565b810181811067ffffffffffffffff8211171561307f5761307e61302a565b5b80604052505050565b5f6130916126d6565b905061309d8282613057565b919050565b5f67ffffffffffffffff8211156130bc576130bb61302a565b5b602082029050602081019050919050565b5f80fd5b5f6130e36130de846130a2565b613088565b90508083825260208201905060208402830185811115613106576131056130cd565b5b835b8181101561312f578061311b888261295f565b845260208401935050602081019050613108565b5050509392505050565b5f82601f83011261314d5761314c613026565b5b813561315d8482602086016130d1565b91505092915050565b5f67ffffffffffffffff8211156131805761317f61302a565b5b602082029050602081019050919050565b5f6131a361319e84613166565b613088565b905080838252602082019050602084028301858111156131c6576131c56130cd565b5b835b818110156131ef57806131db8882612706565b8452602084019350506020810190506131c8565b5050509392505050565b5f82601f83011261320d5761320c613026565b5b813561321d848260208601613191565b91505092915050565b5f67ffffffffffffffff8211156132405761323f61302a565b5b602082029050602081019050919050565b5f80fd5b5f67ffffffffffffffff82111561326f5761326e61302a565b5b61327882612879565b9050602081019050919050565b828183375f83830152505050565b5f6132a56132a084613255565b613088565b9050828152602081018484840111156132c1576132c0613251565b5b6132cc848285613285565b509392505050565b5f82601f8301126132e8576132e7613026565b5b81356132f8848260208601613293565b91505092915050565b5f61331361330e84613226565b613088565b90508083825260208201905060208402830185811115613336576133356130cd565b5b835b8181101561337d57803567ffffffffffffffff81111561335b5761335a613026565b5b80860161336889826132d4565b85526020850194505050602081019050613338565b5050509392505050565b5f82601f83011261339b5761339a613026565b5b81356133ab848260208601613301565b91505092915050565b5f67ffffffffffffffff8211156133ce576133cd61302a565b5b602082029050602081019050919050565b5f67ffffffffffffffff8211156133f9576133f861302a565b5b61340282612879565b9050602081019050919050565b5f61342161341c846133df565b613088565b90508281526020810184848401111561343d5761343c613251565b5b613448848285613285565b509392505050565b5f82601f83011261346457613463613026565b5b813561347484826020860161340f565b91505092915050565b5f61348f61348a846133b4565b613088565b905080838252602082019050602084028301858111156134b2576134b16130cd565b5b835b818110156134f957803567ffffffffffffffff8111156134d7576134d6613026565b5b8086016134e48982613450565b855260208501945050506020810190506134b4565b5050509392505050565b5f82601f83011261351757613516613026565b5b813561352784826020860161347d565b91505092915050565b5f805f805f60a08688031215613549576135486126df565b5b5f86013567ffffffffffffffff811115613566576135656126e3565b5b61357288828901613139565b955050602086013567ffffffffffffffff811115613593576135926126e3565b5b61359f888289016131f9565b945050604086013567ffffffffffffffff8111156135c0576135bf6126e3565b5b6135cc88828901613387565b935050606086013567ffffffffffffffff8111156135ed576135ec6126e3565b5b6135f988828901613503565b925050608086013567ffffffffffffffff81111561361a576136196126e3565b5b613626888289016132d4565b9150509295509295909350565b5f8060408385031215613649576136486126df565b5b5f61365685828601612706565b92505060206136678582860161295f565b9150509250929050565b61367a81612793565b82525050565b5f6bffffffffffffffffffffffff82169050919050565b6136a081613680565b82525050565b606082015f8201516136ba5f850182613671565b5060208201516136cd6020850182613671565b5060408201516136e06040850182613697565b50505050565b5f6060820190506136f95f8301846136a6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061374357607f821691505b602082108103613756576137556136ff565b5b50919050565b7f48656e6c6f2044414f3a3a73746174653a20696e76616c69642070726f706f735f8201527f616c206964000000000000000000000000000000000000000000000000000000602082015250565b5f6137b660258361285b565b91506137c18261375c565b604082019050919050565b5f6020820190508181035f8301526137e3816137aa565b9050919050565b5f815190506137f8816126f0565b92915050565b5f60208284031215613813576138126126df565b5b5f613820848285016137ea565b91505092915050565b7f48656e6c6f2044414f3a3a63616e63656c3a2063616e6e6f742063616e63656c5f8201527f2065786563757465642070726f706f73616c0000000000000000000000000000602082015250565b5f61388360328361285b565b915061388e82613829565b604082019050919050565b5f6020820190508181035f8301526138b081613877565b9050919050565b7f48656e6c6f2044414f3a3a63616e63656c3a2063616e6e6f742063616e63656c5f8201527f20612070726f706f73616c207468617420616c7265616479206265656e20636160208201527f6e63656c65640000000000000000000000000000000000000000000000000000604082015250565b5f61393760468361285b565b9150613942826138b7565b606082019050919050565b5f6020820190508181035f8301526139648161392b565b9050919050565b5f60408201905061397e5f830185612784565b61398b6020830184612745565b9392505050565b61399b81613680565b81146139a5575f80fd5b50565b5f815190506139b681613992565b92915050565b5f602082840312156139d1576139d06126df565b5b5f6139de848285016139a8565b91505092915050565b7f48656e6c6f2044414f3a3a63616e63656c3a2070726f706f7365722061626f765f8201527f65207468726573686f6c64000000000000000000000000000000000000000000602082015250565b5f613a41602b8361285b565b9150613a4c826139e7565b604082019050919050565b5f6020820190508181035f830152613a6e81613a35565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f8154613ac08161372c565b613aca818661285b565b9450600182165f8114613ae45760018114613afa57613b2c565b60ff198316865281151560200286019350613b2c565b613b0385613aa2565b5f5b83811015613b2457815481890152600182019150602081019050613b05565b808801955050505b50505092915050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f8154613b638161372c565b613b6d8186613b35565b9450600182165f8114613b875760018114613b9d57613bcf565b60ff198316865281151560200286019350613bcf565b613ba685613b45565b5f5b83811015613bc757815481890152600182019150602081019050613ba8565b808801955050505b50505092915050565b5f60a082019050613beb5f830188612784565b613bf86020830187612745565b8181036040830152613c0a8186613ab4565b90508181036060830152613c1e8185613b57565b9050613c2d6080830184612745565b9695505050505050565b5f608082019050613c4a5f8301876129a7565b613c5760208301866129a7565b613c646040830185612745565b613c716060830184612784565b95945050505050565b5f606082019050613c8d5f8301866129a7565b613c9a6020830185612745565b613ca7604083018461279e565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f613ced600283613caf565b9150613cf882613cb9565b600282019050919050565b5f819050919050565b613d1d613d188261299e565b613d03565b82525050565b5f613d2d82613ce1565b9150613d398285613d0c565b602082019150613d498284613d0c565b6020820191508190509392505050565b613d6281612e51565b82525050565b5f608082019050613d7b5f8301876129a7565b613d886020830186613d59565b613d9560408301856129a7565b613da260608301846129a7565b95945050505050565b7f48656e6c6f2044414f3a3a63617374566f746542795369673a20696e76616c695f8201527f64207369676e6174757265000000000000000000000000000000000000000000602082015250565b5f613e05602b8361285b565b9150613e1082613dab565b604082019050919050565b5f6020820190508181035f830152613e3281613df9565b9050919050565b7f48656e6c6f2044414f3a3a5f73657454696d656c6f636b3a2073656e646572205f8201527f6d75737420626520676f7620677561726469616e000000000000000000000000602082015250565b5f613e9360348361285b565b9150613e9e82613e39565b604082019050919050565b5f6020820190508181035f830152613ec081613e87565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a2070726f706f73657220766f745f8201527f65732062656c6f772070726f706f73616c207468726573686f6c640000000000602082015250565b5f613f21603b8361285b565b9150613f2c82613ec7565b604082019050919050565b5f6020820190508181035f830152613f4e81613f15565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a2070726f706f73616c2066756e5f8201527f6374696f6e20696e666f726d6174696f6e206172697479206d69736d61746368602082015250565b5f613faf60408361285b565b9150613fba82613f55565b604082019050919050565b5f6020820190508181035f830152613fdc81613fa3565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a206d7573742070726f766964655f8201527f20616374696f6e73000000000000000000000000000000000000000000000000602082015250565b5f61403d60288361285b565b915061404882613fe3565b604082019050919050565b5f6020820190508181035f83015261406a81614031565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a20746f6f206d616e79206163745f8201527f696f6e7300000000000000000000000000000000000000000000000000000000602082015250565b5f6140cb60248361285b565b91506140d682614071565b604082019050919050565b5f6020820190508181035f8301526140f8816140bf565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a206f6e65206c6976652070726f5f8201527f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c7260208201527f65616479206163746976652070726f706f73616c000000000000000000000000604082015250565b5f61417f60548361285b565b915061418a826140ff565b606082019050919050565b5f6020820190508181035f8301526141ac81614173565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a206f6e65206c6976652070726f5f8201527f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c7260208201527f656164792070656e64696e672070726f706f73616c0000000000000000000000604082015250565b5f61423360558361285b565b915061423e826141b3565b606082019050919050565b5f6020820190508181035f83015261426081614227565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61429e826126e7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142d0576142cf614267565b5b600182019050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a2050726f706f73616c494420635f8201527f6f6c6c73696f6e00000000000000000000000000000000000000000000000000602082015250565b5f61433560278361285b565b9150614340826142db565b604082019050919050565b5f6020820190508181035f83015261436281614329565b9050919050565b5f6101208201905061437d5f83018c612745565b61438a602083018b612784565b818103604083015261439c818a612a2a565b905081810360608301526143b08189612ae1565b905081810360808301526143c48188612bcd565b905081810360a08301526143d88187612cda565b90506143e760c0830186612745565b6143f460e0830185612745565b8181036101008301526144078184612889565b90509a9950505050505050505050565b7f48656e6c6f2044414f3a3a71756575653a2070726f706f73616c2063616e206f5f8201527f6e6c792062652071756575656420696620697420697320737563636565646564602082015250565b5f61447160408361285b565b915061447c82614417565b604082019050919050565b5f6020820190508181035f83015261449e81614465565b9050919050565b5f6040820190506144b85f830185612745565b6144c56020830184612745565b9392505050565b7f48656e6c6f2044414f3a3a657865637574653a2070726f706f73616c2063616e5f8201527f206f6e6c7920626520657865637574656420696620697420697320717565756560208201527f6400000000000000000000000000000000000000000000000000000000000000604082015250565b5f61454c60418361285b565b9150614557826144cc565b606082019050919050565b5f6020820190508181035f83015261457981614540565b9050919050565b5f61459261458d846133df565b613088565b9050828152602081018484840111156145ae576145ad613251565b5b6145b984828561286b565b509392505050565b5f82601f8301126145d5576145d4613026565b5b81516145e5848260208601614580565b91505092915050565b5f60208284031215614603576146026126df565b5b5f82015167ffffffffffffffff8111156146205761461f6126e3565b5b61462c848285016145c1565b91505092915050565b7f48656e6c6f2044414f3a3a5f63617374566f74653a20766f74696e67206973205f8201527f636c6f7365640000000000000000000000000000000000000000000000000000602082015250565b5f61468f60268361285b565b915061469a82614635565b604082019050919050565b5f6020820190508181035f8301526146bc81614683565b9050919050565b7f48656e6c6f2044414f3a3a5f63617374566f74653a20766f74657220616c72655f8201527f61647920766f7465640000000000000000000000000000000000000000000000602082015250565b5f61471d60298361285b565b9150614728826146c3565b604082019050919050565b5f6020820190508181035f83015261474a81614711565b9050919050565b5f61476b61476661476184613680565b612f79565b6126e7565b9050919050565b61477b81614751565b82525050565b5f6080820190506147945f830187612784565b6147a16020830186612745565b6147ae604083018561279e565b6147bb6060830184614772565b95945050505050565b5f6147ce826126e7565b91506147d9836126e7565b92508282019050808211156147f1576147f0614267565b5b92915050565b7f6164646974696f6e206f766572666c6f770000000000000000000000000000005f82015250565b5f61482b60118361285b565b9150614836826147f7565b602082019050919050565b5f6020820190508181035f8301526148588161481f565b9050919050565b7f7375627472616374696f6e20756e646572666c6f7700000000000000000000005f82015250565b5f61489360158361285b565b915061489e8261485f565b602082019050919050565b5f6020820190508181035f8301526148c081614887565b9050919050565b5f6148d1826126e7565b91506148dc836126e7565b92508282039050818111156148f4576148f3614267565b5b92915050565b5f61490482612c69565b61490e8185613b35565b935061491e81856020860161286b565b61492781612879565b840191505092915050565b5f60a0820190506149455f830188612784565b6149526020830187612745565b81810360408301526149648186612889565b9050818103606083015261497881856148fa565b90506149876080830184612745565b9695505050505050565b5f8151905061499f816128e1565b92915050565b5f602082840312156149ba576149b96126df565b5b5f6149c784828501614991565b91505092915050565b7f48656e6c6f2044414f3a3a5f71756575654f725265766572743a2070726f706f5f8201527f73616c20616374696f6e20616c72656164792071756575656420617420657461602082015250565b5f614a2a60408361285b565b9150614a35826149d0565b604082019050919050565b5f6020820190508181035f830152614a5781614a1e565b9050919050565b5f81519050614a6c81612e87565b92915050565b5f60208284031215614a8757614a866126df565b5b5f614a9484828501614a5e565b91505092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614aac565b614af18683614aac565b95508019841693508086168417925050509392505050565b5f614b23614b1e614b19846126e7565b612f79565b6126e7565b9050919050565b5f819050919050565b614b3c83614b09565b614b50614b4882614b2a565b848454614ab8565b825550505050565b5f90565b614b64614b58565b614b6f818484614b33565b505050565b5b81811015614b9257614b875f82614b5c565b600181019050614b75565b5050565b601f821115614bd757614ba881613aa2565b614bb184614a9d565b81016020851015614bc0578190505b614bd4614bcc85614a9d565b830182614b74565b50505b505050565b5f82821c905092915050565b5f614bf75f1984600802614bdc565b1980831691505092915050565b5f614c0f8383614be8565b9150826002028217905092915050565b614c2882612851565b67ffffffffffffffff811115614c4157614c4061302a565b5b614c4b825461372c565b614c56828285614b96565b5f60209050601f831160018114614c87575f8415614c75578287015190505b614c7f8582614c04565b865550614ce6565b601f198416614c9586613aa2565b5f5b82811015614cbc57848901518255600182019150602085019450602081019050614c97565b86831015614cd95784890151614cd5601f891682614be8565b8355505b6001600288020188555050505b505050505050565b601f821115614d2f57614d0081613b45565b614d0984614a9d565b81016020851015614d18578190505b614d2c614d2485614a9d565b830182614b74565b50505b505050565b614d3d82612c69565b67ffffffffffffffff811115614d5657614d5561302a565b5b614d60825461372c565b614d6b828285614cee565b5f60209050601f831160018114614d9c575f8415614d8a578287015190505b614d948582614c04565b865550614dfb565b601f198416614daa86613b45565b5f5b82811015614dd157848901518255600182019150602085019450602081019050614dac565b86831015614dee5784890151614dea601f891682614be8565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220162988a3c8a79b22abf3745cf3c44f244ec34fcc61b06d4d04837acb03fc6aa964736f6c634300081a0033000000000000000000000000960fce8724aa127184b6d13af41a711755236c770000000000000000000000006172f0ab84cd118ea8ea282a37178c34f86bf7e6

Deployed Bytecode

0x608060405260043610610165575f3560e01c80634634c61f116100d0578063d33219b411610089578063ddf0b00911610063578063ddf0b0091461054e578063deaaa7cc14610576578063e23a9a52146105a0578063fe0d94c1146105dc57610165565b8063d33219b4146104be578063da35c664146104e8578063da95691a1461051257610165565b80634634c61f146103b05780637bdbe4d0146103d8578063b58131b014610402578063b93a89f71461042c578063c0ec7fc01461046c578063c4d66de81461049657610165565b806324bc1a641161012257806324bc1a641461028f578063328dd982146102b95780633932abb1146102f85780633e4f49e61461032257806340e58ee51461035e578063452a93201461038657610165565b8063013cf08b1461016957806302a251a3146101ad57806306fdde03146101d757806315373e3d1461020157806317977c611461022957806320606b7014610265575b5f80fd5b348015610174575f80fd5b5061018f600480360381019061018a919061271a565b6105f8565b6040516101a4999897969594939291906127ad565b60405180910390f35b3480156101b8575f80fd5b506101c161067a565b6040516101ce9190612838565b60405180910390f35b3480156101e2575f80fd5b506101eb610683565b6040516101f891906128c1565b60405180910390f35b34801561020c575f80fd5b506102276004803603810190610222919061290b565b6106bc565b005b348015610234575f80fd5b5061024f600480360381019061024a9190612973565b6106cb565b60405161025c9190612838565b60405180910390f35b348015610270575f80fd5b506102796106e0565b60405161028691906129b6565b60405180910390f35b34801561029a575f80fd5b506102a3610704565b6040516102b09190612838565b60405180910390f35b3480156102c4575f80fd5b506102df60048036038101906102da919061271a565b610715565b6040516102ef9493929190612d4d565b60405180910390f35b348015610303575f80fd5b5061030c6109c0565b6040516103199190612838565b60405180910390f35b34801561032d575f80fd5b506103486004803603810190610343919061271a565b6109c8565b6040516103559190612e1f565b60405180910390f35b348015610369575f80fd5b50610384600480360381019061037f919061271a565b610b90565b005b348015610391575f80fd5b5061039a610f38565b6040516103a79190612e38565b60405180910390f35b3480156103bb575f80fd5b506103d660048036038101906103d19190612eb1565b610f5d565b005b3480156103e3575f80fd5b506103ec61113d565b6040516103f99190612838565b60405180910390f35b34801561040d575f80fd5b50610416611145565b6040516104239190612838565b60405180910390f35b348015610437575f80fd5b50610452600480360381019061044d919061271a565b611155565b604051610463959493929190612f28565b60405180910390f35b348015610477575f80fd5b506104806111ba565b60405161048d9190612fd4565b60405180910390f35b3480156104a1575f80fd5b506104bc60048036038101906104b79190612973565b6111df565b005b3480156104c9575f80fd5b506104d26112f0565b6040516104df919061300d565b60405180910390f35b3480156104f3575f80fd5b506104fc611313565b6040516105099190612838565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190613530565b611319565b6040516105459190612838565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f919061271a565b61189a565b005b348015610581575f80fd5b5061058a611bcb565b60405161059791906129b6565b60405180910390f35b3480156105ab575f80fd5b506105c660048036038101906105c19190613633565b611bef565b6040516105d391906136e6565b60405180910390f35b6105f660048036038101906105f1919061271a565b611cc9565b005b6004602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600701549080600801549080600901549080600a01549080600b015f9054906101000a900460ff169080600b0160019054906101000a900460ff16905089565b5f619d80905090565b6040518060400160405280600981526020017f48656e6c6f2044414f000000000000000000000000000000000000000000000081525081565b6106c7338383611f20565b5050565b6005602052805f5260405f205f915090505481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b5f69011c9a62d04ed0c80000905090565b6060806060805f60045f8781526020019081526020015f20905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156107bd57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610774575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561080d57602002820191905f5260205f20905b8154815260200190600101908083116107f9575b5050505050925081805480602002602001604051908101604052809291908181526020015f905b828210156108dc578382905f5260205f200180546108519061372c565b80601f016020809104026020016040519081016040528092919081815260200182805461087d9061372c565b80156108c85780601f1061089f576101008083540402835291602001916108c8565b820191905f5260205f20905b8154815290600101906020018083116108ab57829003601f168201915b505050505081526020019060010190610834565b50505050915080805480602002602001604051908101604052809291908181526020015f905b828210156109aa578382905f5260205f2001805461091f9061372c565b80601f016020809104026020016040519081016040528092919081815260200182805461094b9061372c565b80156109965780601f1061096d57610100808354040283529160200191610996565b820191905f5260205f20905b81548152906001019060200180831161097957829003601f168201915b505050505081526020019060010190610902565b5050505090509450945094509450509193509193565b5f6001905090565b5f81600354101580156109da57505f82115b610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906137cc565b60405180910390fd5b5f60045f8481526020019081526020015f20905080600b015f9054906101000a900460ff1615610a4d576002915050610b8b565b80600701544311610a61575f915050610b8b565b80600801544311610a76576001915050610b8b565b80600a01548160090154111580610a975750610a90610704565b8160090154105b15610aa6576003915050610b8b565b5f816002015403610abb576004915050610b8b565b80600b0160019054906101000a900460ff1615610adc576007915050610b8b565b610b7581600201545f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7091906137fe565b6121dd565b4210610b85576006915050610b8b565b60059150505b919050565b5f610b9a826109c8565b9050600780811115610baf57610bae612dac565b5b816007811115610bc257610bc1612dac565b5b03610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990613899565b60405180910390fd5b60026007811115610c1657610c15612dac565b5b816007811115610c2957610c28612dac565b5b03610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c609061394d565b60405180910390fd5b5f60045f8481526020019081526020015f209050610c85611145565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe1836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cf143600161223a565b6040518363ffffffff1660e01b8152600401610d0e92919061396b565b602060405180830381865afa158015610d29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4d91906139bc565b6bffffffffffffffffffffffff1610610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613a57565b60405180910390fd5b600181600b015f6101000a81548160ff0219169083151502179055505f5b8160030180549050811015610efb575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663591fcdfe836003018381548110610e1957610e18613a75565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018481548110610e5757610e56613a75565b5b905f5260205f200154856005018581548110610e7657610e75613a75565b5b905f5260205f2001866006018681548110610e9457610e93613a75565b5b905f5260205f200187600201546040518663ffffffff1660e01b8152600401610ec1959493929190613bd8565b5f604051808303815f87803b158015610ed8575f80fd5b505af1158015610eea573d5f803e3d5ffd5b505050508080600101915050610db9565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610f2b9190612838565b60405180910390a1505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600981526020017f48656e6c6f2044414f000000000000000000000000000000000000000000000081525080519060200120610fc4612292565b30604051602001610fd89493929190613c37565b6040516020818303038152906040528051906020012090505f7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee878760405160200161102693929190613c7a565b6040516020818303038152906040528051906020012090505f8282604051602001611052929190613d23565b6040516020818303038152906040528051906020012090505f6001828888886040515f815260200160405260405161108d9493929190613d68565b6020604051602081039080840390855afa1580156110ad573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90613e1b565b60405180910390fd5b611132818a8a611f20565b505050505050505050565b5f600a905090565b5f680b6255df5f50080000905090565b5f805f805f8060045f8881526020019081526020015f20905080600701548160080154826009015483600a0154846001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16955095509550955095505091939590929450565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126590613ea9565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b5f611322611145565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe13361136b43600161223a565b6040518363ffffffff1660e01b815260040161138892919061396b565b602060405180830381865afa1580156113a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c791906139bc565b6bffffffffffffffffffffffff1611611415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140c90613f37565b60405180910390fd5b84518651148015611427575083518651145b8015611434575082518651145b611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a90613fc5565b60405180910390fd5b5f8651036114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614053565b60405180910390fd5b6114be61113d565b86511115611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906140e1565b60405180910390fd5b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8114611624575f611553826109c8565b90506001600781111561156957611568612dac565b5b81600781111561157c5761157b612dac565b5b036115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390614195565b60405180910390fd5b5f60078111156115cf576115ce612dac565b5b8160078111156115e2576115e1612dac565b5b03611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614249565b60405180910390fd5b505b5f611636436116316109c0565b6121dd565b90505f61164a8261164561067a565b6121dd565b905060035f81548092919061165e90614294565b91905055505f60035490505f60045f8381526020019081526020015f2090505f815f0154146116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b99061434b565b60405180910390fd5b81815f018190555033816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f81600201819055508a81600301908051906020019061172d92919061244b565b50898160040190805190602001906117469291906124d2565b508881600501908051906020019061175f92919061251d565b5087816006019080519060200190611778929190612574565b508381600701819055508281600801819055505f81600901819055505f81600a01819055505f81600b015f6101000a81548160ff0219169083151502179055505f81600b0160016101000a81548160ff021916908315150217905550805f015460055f836001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0815f0154338d8d8d8d8a8a8f60405161187e99989796959493929190614369565b60405180910390a1805f01549550505050505095945050505050565b600460078111156118ae576118ad612dac565b5b6118b7826109c8565b60078111156118c9576118c8612dac565b5b14611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190090614487565b60405180910390fd5b5f60045f8381526020019081526020015f2090505f6119b3425f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561198a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ae91906137fe565b6121dd565b90505f5b8260030180549050811015611b8357611b768360030182815481106119df576119de613a75565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018381548110611a1d57611a1c613a75565b5b905f5260205f200154856005018481548110611a3c57611a3b613a75565b5b905f5260205f20018054611a4f9061372c565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7b9061372c565b8015611ac65780601f10611a9d57610100808354040283529160200191611ac6565b820191905f5260205f20905b815481529060010190602001808311611aa957829003601f168201915b5050505050866006018581548110611ae157611ae0613a75565b5b905f5260205f20018054611af49061372c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b209061372c565b8015611b6b5780601f10611b4257610100808354040283529160200191611b6b565b820191905f5260205f20905b815481529060010190602001808311611b4e57829003601f168201915b50505050508661229e565b80806001019150506119b7565b508082600201819055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928382604051611bbe9291906144a5565b60405180910390a1505050565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b611bf76125cb565b60045f8481526020019081526020015f20600c015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f82015f9054906101000a900460ff161515151581526020015f820160019054906101000a900460ff161515151581526020015f820160029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905092915050565b60056007811115611cdd57611cdc612dac565b5b611ce6826109c8565b6007811115611cf857611cf7612dac565b5b14611d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2f90614562565b60405180910390fd5b5f60045f8381526020019081526020015f209050600181600b0160016101000a81548160ff0219169083151502179055505f5b8160030180549050811015611ee4575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f836004018381548110611dcb57611dca613a75565b5b905f5260205f200154846003018481548110611dea57611de9613a75565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856004018581548110611e2857611e27613a75565b5b905f5260205f200154866005018681548110611e4757611e46613a75565b5b905f5260205f2001876006018781548110611e6557611e64613a75565b5b905f5260205f200188600201546040518763ffffffff1660e01b8152600401611e92959493929190613bd8565b5f6040518083038185885af1158015611ead573d5f803e3d5ffd5b50505050506040513d5f823e3d601f19601f82011682018060405250810190611ed691906145ee565b508080600101915050611d6b565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611f149190612838565b60405180910390a15050565b60016007811115611f3457611f33612dac565b5b611f3d836109c8565b6007811115611f4f57611f4e612dac565b5b14611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f86906146a5565b60405180910390fd5b5f60045f8481526020019081526020015f2090505f81600c015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f1515815f015f9054906101000a900460ff1615151461203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614733565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18785600701546040518363ffffffff1660e01b815260040161209b92919061396b565b602060405180830381865afa1580156120b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120da91906139bc565b9050831561210b576120fe8360090154826bffffffffffffffffffffffff166121dd565b8360090181905550612130565b61212783600a0154826bffffffffffffffffffffffff166121dd565b83600a01819055505b6001825f015f6101000a81548160ff02191690831515021790555083825f0160016101000a81548160ff02191690831515021790555080825f0160026101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055507f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46868686846040516121cd9493929190614781565b60405180910390a1505050505050565b5f8082846121eb91906147c4565b905083811015612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790614841565b60405180910390fd5b8091505092915050565b5f8282111561227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906148a9565b60405180910390fd5b818361228a91906148c7565b905092915050565b5f804690508091505090565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2b0653786868686866040516020016122f2959493929190614932565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161232491906129b6565b602060405180830381865afa15801561233f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236391906149a5565b156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a90614a40565b60405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90186868686866040518663ffffffff1660e01b8152600401612403959493929190614932565b6020604051808303815f875af115801561241f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124439190614a72565b505050505050565b828054828255905f5260205f209081019282156124c1579160200282015b828111156124c0578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612469565b5b5090506124ce91906125fb565b5090565b828054828255905f5260205f2090810192821561250c579160200282015b8281111561250b5782518255916020019190600101906124f0565b5b50905061251991906125fb565b5090565b828054828255905f5260205f20908101928215612563579160200282015b828111156125625782518290816125529190614c1f565b509160200191906001019061253b565b5b5090506125709190612616565b5090565b828054828255905f5260205f209081019282156125ba579160200282015b828111156125b95782518290816125a99190614d34565b5091602001919060010190612592565b5b5090506125c79190612639565b5090565b60405180606001604052805f151581526020015f151581526020015f6bffffffffffffffffffffffff1681525090565b5b80821115612612575f815f9055506001016125fc565b5090565b5b80821115612635575f818161262c919061265c565b50600101612617565b5090565b5b80821115612658575f818161264f9190612699565b5060010161263a565b5090565b5080546126689061372c565b5f825580601f106126795750612696565b601f0160209004905f5260205f209081019061269591906125fb565b5b50565b5080546126a59061372c565b5f825580601f106126b657506126d3565b601f0160209004905f5260205f20908101906126d291906125fb565b5b50565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6126f9816126e7565b8114612703575f80fd5b50565b5f81359050612714816126f0565b92915050565b5f6020828403121561272f5761272e6126df565b5b5f61273c84828501612706565b91505092915050565b61274e816126e7565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61277d82612754565b9050919050565b61278d81612773565b82525050565b5f8115159050919050565b6127a781612793565b82525050565b5f610120820190506127c15f83018c612745565b6127ce602083018b612784565b6127db604083018a612745565b6127e86060830189612745565b6127f56080830188612745565b61280260a0830187612745565b61280f60c0830186612745565b61281c60e083018561279e565b61282a61010083018461279e565b9a9950505050505050505050565b5f60208201905061284b5f830184612745565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61289382612851565b61289d818561285b565b93506128ad81856020860161286b565b6128b681612879565b840191505092915050565b5f6020820190508181035f8301526128d98184612889565b905092915050565b6128ea81612793565b81146128f4575f80fd5b50565b5f81359050612905816128e1565b92915050565b5f8060408385031215612921576129206126df565b5b5f61292e85828601612706565b925050602061293f858286016128f7565b9150509250929050565b61295281612773565b811461295c575f80fd5b50565b5f8135905061296d81612949565b92915050565b5f60208284031215612988576129876126df565b5b5f6129958482850161295f565b91505092915050565b5f819050919050565b6129b08161299e565b82525050565b5f6020820190506129c95f8301846129a7565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a0181612773565b82525050565b5f612a1283836129f8565b60208301905092915050565b5f602082019050919050565b5f612a34826129cf565b612a3e81856129d9565b9350612a49836129e9565b805f5b83811015612a79578151612a608882612a07565b9750612a6b83612a1e565b925050600181019050612a4c565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ab8816126e7565b82525050565b5f612ac98383612aaf565b60208301905092915050565b5f602082019050919050565b5f612aeb82612a86565b612af58185612a90565b9350612b0083612aa0565b805f5b83811015612b30578151612b178882612abe565b9750612b2283612ad5565b925050600181019050612b03565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f612b8082612851565b612b8a8185612b66565b9350612b9a81856020860161286b565b612ba381612879565b840191505092915050565b5f612bb98383612b76565b905092915050565b5f602082019050919050565b5f612bd782612b3d565b612be18185612b47565b935083602082028501612bf385612b57565b805f5b85811015612c2e5784840389528151612c0f8582612bae565b9450612c1a83612bc1565b925060208a01995050600181019050612bf6565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f612c8d82612c69565b612c978185612c73565b9350612ca781856020860161286b565b612cb081612879565b840191505092915050565b5f612cc68383612c83565b905092915050565b5f602082019050919050565b5f612ce482612c40565b612cee8185612c4a565b935083602082028501612d0085612c5a565b805f5b85811015612d3b5784840389528151612d1c8582612cbb565b9450612d2783612cce565b925060208a01995050600181019050612d03565b50829750879550505050505092915050565b5f6080820190508181035f830152612d658187612a2a565b90508181036020830152612d798186612ae1565b90508181036040830152612d8d8185612bcd565b90508181036060830152612da18184612cda565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60088110612dea57612de9612dac565b5b50565b5f819050612dfa82612dd9565b919050565b5f612e0982612ded565b9050919050565b612e1981612dff565b82525050565b5f602082019050612e325f830184612e10565b92915050565b5f602082019050612e4b5f830184612784565b92915050565b5f60ff82169050919050565b612e6681612e51565b8114612e70575f80fd5b50565b5f81359050612e8181612e5d565b92915050565b612e908161299e565b8114612e9a575f80fd5b50565b5f81359050612eab81612e87565b92915050565b5f805f805f60a08688031215612eca57612ec96126df565b5b5f612ed788828901612706565b9550506020612ee8888289016128f7565b9450506040612ef988828901612e73565b9350506060612f0a88828901612e9d565b9250506080612f1b88828901612e9d565b9150509295509295909350565b5f60a082019050612f3b5f830188612745565b612f486020830187612745565b612f556040830186612745565b612f626060830185612745565b612f6f6080830184612784565b9695505050505050565b5f819050919050565b5f612f9c612f97612f9284612754565b612f79565b612754565b9050919050565b5f612fad82612f82565b9050919050565b5f612fbe82612fa3565b9050919050565b612fce81612fb4565b82525050565b5f602082019050612fe75f830184612fc5565b92915050565b5f612ff782612fa3565b9050919050565b61300781612fed565b82525050565b5f6020820190506130205f830184612ffe565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61306082612879565b810181811067ffffffffffffffff8211171561307f5761307e61302a565b5b80604052505050565b5f6130916126d6565b905061309d8282613057565b919050565b5f67ffffffffffffffff8211156130bc576130bb61302a565b5b602082029050602081019050919050565b5f80fd5b5f6130e36130de846130a2565b613088565b90508083825260208201905060208402830185811115613106576131056130cd565b5b835b8181101561312f578061311b888261295f565b845260208401935050602081019050613108565b5050509392505050565b5f82601f83011261314d5761314c613026565b5b813561315d8482602086016130d1565b91505092915050565b5f67ffffffffffffffff8211156131805761317f61302a565b5b602082029050602081019050919050565b5f6131a361319e84613166565b613088565b905080838252602082019050602084028301858111156131c6576131c56130cd565b5b835b818110156131ef57806131db8882612706565b8452602084019350506020810190506131c8565b5050509392505050565b5f82601f83011261320d5761320c613026565b5b813561321d848260208601613191565b91505092915050565b5f67ffffffffffffffff8211156132405761323f61302a565b5b602082029050602081019050919050565b5f80fd5b5f67ffffffffffffffff82111561326f5761326e61302a565b5b61327882612879565b9050602081019050919050565b828183375f83830152505050565b5f6132a56132a084613255565b613088565b9050828152602081018484840111156132c1576132c0613251565b5b6132cc848285613285565b509392505050565b5f82601f8301126132e8576132e7613026565b5b81356132f8848260208601613293565b91505092915050565b5f61331361330e84613226565b613088565b90508083825260208201905060208402830185811115613336576133356130cd565b5b835b8181101561337d57803567ffffffffffffffff81111561335b5761335a613026565b5b80860161336889826132d4565b85526020850194505050602081019050613338565b5050509392505050565b5f82601f83011261339b5761339a613026565b5b81356133ab848260208601613301565b91505092915050565b5f67ffffffffffffffff8211156133ce576133cd61302a565b5b602082029050602081019050919050565b5f67ffffffffffffffff8211156133f9576133f861302a565b5b61340282612879565b9050602081019050919050565b5f61342161341c846133df565b613088565b90508281526020810184848401111561343d5761343c613251565b5b613448848285613285565b509392505050565b5f82601f83011261346457613463613026565b5b813561347484826020860161340f565b91505092915050565b5f61348f61348a846133b4565b613088565b905080838252602082019050602084028301858111156134b2576134b16130cd565b5b835b818110156134f957803567ffffffffffffffff8111156134d7576134d6613026565b5b8086016134e48982613450565b855260208501945050506020810190506134b4565b5050509392505050565b5f82601f83011261351757613516613026565b5b813561352784826020860161347d565b91505092915050565b5f805f805f60a08688031215613549576135486126df565b5b5f86013567ffffffffffffffff811115613566576135656126e3565b5b61357288828901613139565b955050602086013567ffffffffffffffff811115613593576135926126e3565b5b61359f888289016131f9565b945050604086013567ffffffffffffffff8111156135c0576135bf6126e3565b5b6135cc88828901613387565b935050606086013567ffffffffffffffff8111156135ed576135ec6126e3565b5b6135f988828901613503565b925050608086013567ffffffffffffffff81111561361a576136196126e3565b5b613626888289016132d4565b9150509295509295909350565b5f8060408385031215613649576136486126df565b5b5f61365685828601612706565b92505060206136678582860161295f565b9150509250929050565b61367a81612793565b82525050565b5f6bffffffffffffffffffffffff82169050919050565b6136a081613680565b82525050565b606082015f8201516136ba5f850182613671565b5060208201516136cd6020850182613671565b5060408201516136e06040850182613697565b50505050565b5f6060820190506136f95f8301846136a6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061374357607f821691505b602082108103613756576137556136ff565b5b50919050565b7f48656e6c6f2044414f3a3a73746174653a20696e76616c69642070726f706f735f8201527f616c206964000000000000000000000000000000000000000000000000000000602082015250565b5f6137b660258361285b565b91506137c18261375c565b604082019050919050565b5f6020820190508181035f8301526137e3816137aa565b9050919050565b5f815190506137f8816126f0565b92915050565b5f60208284031215613813576138126126df565b5b5f613820848285016137ea565b91505092915050565b7f48656e6c6f2044414f3a3a63616e63656c3a2063616e6e6f742063616e63656c5f8201527f2065786563757465642070726f706f73616c0000000000000000000000000000602082015250565b5f61388360328361285b565b915061388e82613829565b604082019050919050565b5f6020820190508181035f8301526138b081613877565b9050919050565b7f48656e6c6f2044414f3a3a63616e63656c3a2063616e6e6f742063616e63656c5f8201527f20612070726f706f73616c207468617420616c7265616479206265656e20636160208201527f6e63656c65640000000000000000000000000000000000000000000000000000604082015250565b5f61393760468361285b565b9150613942826138b7565b606082019050919050565b5f6020820190508181035f8301526139648161392b565b9050919050565b5f60408201905061397e5f830185612784565b61398b6020830184612745565b9392505050565b61399b81613680565b81146139a5575f80fd5b50565b5f815190506139b681613992565b92915050565b5f602082840312156139d1576139d06126df565b5b5f6139de848285016139a8565b91505092915050565b7f48656e6c6f2044414f3a3a63616e63656c3a2070726f706f7365722061626f765f8201527f65207468726573686f6c64000000000000000000000000000000000000000000602082015250565b5f613a41602b8361285b565b9150613a4c826139e7565b604082019050919050565b5f6020820190508181035f830152613a6e81613a35565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f8154613ac08161372c565b613aca818661285b565b9450600182165f8114613ae45760018114613afa57613b2c565b60ff198316865281151560200286019350613b2c565b613b0385613aa2565b5f5b83811015613b2457815481890152600182019150602081019050613b05565b808801955050505b50505092915050565b5f82825260208201905092915050565b5f819050815f5260205f209050919050565b5f8154613b638161372c565b613b6d8186613b35565b9450600182165f8114613b875760018114613b9d57613bcf565b60ff198316865281151560200286019350613bcf565b613ba685613b45565b5f5b83811015613bc757815481890152600182019150602081019050613ba8565b808801955050505b50505092915050565b5f60a082019050613beb5f830188612784565b613bf86020830187612745565b8181036040830152613c0a8186613ab4565b90508181036060830152613c1e8185613b57565b9050613c2d6080830184612745565b9695505050505050565b5f608082019050613c4a5f8301876129a7565b613c5760208301866129a7565b613c646040830185612745565b613c716060830184612784565b95945050505050565b5f606082019050613c8d5f8301866129a7565b613c9a6020830185612745565b613ca7604083018461279e565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f613ced600283613caf565b9150613cf882613cb9565b600282019050919050565b5f819050919050565b613d1d613d188261299e565b613d03565b82525050565b5f613d2d82613ce1565b9150613d398285613d0c565b602082019150613d498284613d0c565b6020820191508190509392505050565b613d6281612e51565b82525050565b5f608082019050613d7b5f8301876129a7565b613d886020830186613d59565b613d9560408301856129a7565b613da260608301846129a7565b95945050505050565b7f48656e6c6f2044414f3a3a63617374566f746542795369673a20696e76616c695f8201527f64207369676e6174757265000000000000000000000000000000000000000000602082015250565b5f613e05602b8361285b565b9150613e1082613dab565b604082019050919050565b5f6020820190508181035f830152613e3281613df9565b9050919050565b7f48656e6c6f2044414f3a3a5f73657454696d656c6f636b3a2073656e646572205f8201527f6d75737420626520676f7620677561726469616e000000000000000000000000602082015250565b5f613e9360348361285b565b9150613e9e82613e39565b604082019050919050565b5f6020820190508181035f830152613ec081613e87565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a2070726f706f73657220766f745f8201527f65732062656c6f772070726f706f73616c207468726573686f6c640000000000602082015250565b5f613f21603b8361285b565b9150613f2c82613ec7565b604082019050919050565b5f6020820190508181035f830152613f4e81613f15565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a2070726f706f73616c2066756e5f8201527f6374696f6e20696e666f726d6174696f6e206172697479206d69736d61746368602082015250565b5f613faf60408361285b565b9150613fba82613f55565b604082019050919050565b5f6020820190508181035f830152613fdc81613fa3565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a206d7573742070726f766964655f8201527f20616374696f6e73000000000000000000000000000000000000000000000000602082015250565b5f61403d60288361285b565b915061404882613fe3565b604082019050919050565b5f6020820190508181035f83015261406a81614031565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a20746f6f206d616e79206163745f8201527f696f6e7300000000000000000000000000000000000000000000000000000000602082015250565b5f6140cb60248361285b565b91506140d682614071565b604082019050919050565b5f6020820190508181035f8301526140f8816140bf565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a206f6e65206c6976652070726f5f8201527f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c7260208201527f65616479206163746976652070726f706f73616c000000000000000000000000604082015250565b5f61417f60548361285b565b915061418a826140ff565b606082019050919050565b5f6020820190508181035f8301526141ac81614173565b9050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a206f6e65206c6976652070726f5f8201527f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c7260208201527f656164792070656e64696e672070726f706f73616c0000000000000000000000604082015250565b5f61423360558361285b565b915061423e826141b3565b606082019050919050565b5f6020820190508181035f83015261426081614227565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61429e826126e7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142d0576142cf614267565b5b600182019050919050565b7f48656e6c6f2044414f3a3a70726f706f73653a2050726f706f73616c494420635f8201527f6f6c6c73696f6e00000000000000000000000000000000000000000000000000602082015250565b5f61433560278361285b565b9150614340826142db565b604082019050919050565b5f6020820190508181035f83015261436281614329565b9050919050565b5f6101208201905061437d5f83018c612745565b61438a602083018b612784565b818103604083015261439c818a612a2a565b905081810360608301526143b08189612ae1565b905081810360808301526143c48188612bcd565b905081810360a08301526143d88187612cda565b90506143e760c0830186612745565b6143f460e0830185612745565b8181036101008301526144078184612889565b90509a9950505050505050505050565b7f48656e6c6f2044414f3a3a71756575653a2070726f706f73616c2063616e206f5f8201527f6e6c792062652071756575656420696620697420697320737563636565646564602082015250565b5f61447160408361285b565b915061447c82614417565b604082019050919050565b5f6020820190508181035f83015261449e81614465565b9050919050565b5f6040820190506144b85f830185612745565b6144c56020830184612745565b9392505050565b7f48656e6c6f2044414f3a3a657865637574653a2070726f706f73616c2063616e5f8201527f206f6e6c7920626520657865637574656420696620697420697320717565756560208201527f6400000000000000000000000000000000000000000000000000000000000000604082015250565b5f61454c60418361285b565b9150614557826144cc565b606082019050919050565b5f6020820190508181035f83015261457981614540565b9050919050565b5f61459261458d846133df565b613088565b9050828152602081018484840111156145ae576145ad613251565b5b6145b984828561286b565b509392505050565b5f82601f8301126145d5576145d4613026565b5b81516145e5848260208601614580565b91505092915050565b5f60208284031215614603576146026126df565b5b5f82015167ffffffffffffffff8111156146205761461f6126e3565b5b61462c848285016145c1565b91505092915050565b7f48656e6c6f2044414f3a3a5f63617374566f74653a20766f74696e67206973205f8201527f636c6f7365640000000000000000000000000000000000000000000000000000602082015250565b5f61468f60268361285b565b915061469a82614635565b604082019050919050565b5f6020820190508181035f8301526146bc81614683565b9050919050565b7f48656e6c6f2044414f3a3a5f63617374566f74653a20766f74657220616c72655f8201527f61647920766f7465640000000000000000000000000000000000000000000000602082015250565b5f61471d60298361285b565b9150614728826146c3565b604082019050919050565b5f6020820190508181035f83015261474a81614711565b9050919050565b5f61476b61476661476184613680565b612f79565b6126e7565b9050919050565b61477b81614751565b82525050565b5f6080820190506147945f830187612784565b6147a16020830186612745565b6147ae604083018561279e565b6147bb6060830184614772565b95945050505050565b5f6147ce826126e7565b91506147d9836126e7565b92508282019050808211156147f1576147f0614267565b5b92915050565b7f6164646974696f6e206f766572666c6f770000000000000000000000000000005f82015250565b5f61482b60118361285b565b9150614836826147f7565b602082019050919050565b5f6020820190508181035f8301526148588161481f565b9050919050565b7f7375627472616374696f6e20756e646572666c6f7700000000000000000000005f82015250565b5f61489360158361285b565b915061489e8261485f565b602082019050919050565b5f6020820190508181035f8301526148c081614887565b9050919050565b5f6148d1826126e7565b91506148dc836126e7565b92508282039050818111156148f4576148f3614267565b5b92915050565b5f61490482612c69565b61490e8185613b35565b935061491e81856020860161286b565b61492781612879565b840191505092915050565b5f60a0820190506149455f830188612784565b6149526020830187612745565b81810360408301526149648186612889565b9050818103606083015261497881856148fa565b90506149876080830184612745565b9695505050505050565b5f8151905061499f816128e1565b92915050565b5f602082840312156149ba576149b96126df565b5b5f6149c784828501614991565b91505092915050565b7f48656e6c6f2044414f3a3a5f71756575654f725265766572743a2070726f706f5f8201527f73616c20616374696f6e20616c72656164792071756575656420617420657461602082015250565b5f614a2a60408361285b565b9150614a35826149d0565b604082019050919050565b5f6020820190508181035f830152614a5781614a1e565b9050919050565b5f81519050614a6c81612e87565b92915050565b5f60208284031215614a8757614a866126df565b5b5f614a9484828501614a5e565b91505092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614ae77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614aac565b614af18683614aac565b95508019841693508086168417925050509392505050565b5f614b23614b1e614b19846126e7565b612f79565b6126e7565b9050919050565b5f819050919050565b614b3c83614b09565b614b50614b4882614b2a565b848454614ab8565b825550505050565b5f90565b614b64614b58565b614b6f818484614b33565b505050565b5b81811015614b9257614b875f82614b5c565b600181019050614b75565b5050565b601f821115614bd757614ba881613aa2565b614bb184614a9d565b81016020851015614bc0578190505b614bd4614bcc85614a9d565b830182614b74565b50505b505050565b5f82821c905092915050565b5f614bf75f1984600802614bdc565b1980831691505092915050565b5f614c0f8383614be8565b9150826002028217905092915050565b614c2882612851565b67ffffffffffffffff811115614c4157614c4061302a565b5b614c4b825461372c565b614c56828285614b96565b5f60209050601f831160018114614c87575f8415614c75578287015190505b614c7f8582614c04565b865550614ce6565b601f198416614c9586613aa2565b5f5b82811015614cbc57848901518255600182019150602085019450602081019050614c97565b86831015614cd95784890151614cd5601f891682614be8565b8355505b6001600288020188555050505b505050505050565b601f821115614d2f57614d0081613b45565b614d0984614a9d565b81016020851015614d18578190505b614d2c614d2485614a9d565b830182614b74565b50505b505050565b614d3d82612c69565b67ffffffffffffffff811115614d5657614d5561302a565b5b614d60825461372c565b614d6b828285614cee565b5f60209050601f831160018114614d9c575f8415614d8a578287015190505b614d948582614c04565b865550614dfb565b601f198416614daa86613b45565b5f5b82811015614dd157848901518255600182019150602085019450602081019050614dac565b86831015614dee5784890151614dea601f891682614be8565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220162988a3c8a79b22abf3745cf3c44f244ec34fcc61b06d4d04837acb03fc6aa964736f6c634300081a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000960fce8724aa127184b6d13af41a711755236c770000000000000000000000006172f0ab84cd118ea8ea282a37178c34f86bf7e6

-----Decoded View---------------
Arg [0] : henlo_ (address): 0x960fCE8724aA127184B6d13Af41a711755236c77
Arg [1] : guardian_ (address): 0x6172F0ab84CD118eA8Ea282a37178c34f86bF7e6

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000960fce8724aa127184b6d13af41a711755236c77
Arg [1] : 0000000000000000000000006172f0ab84cd118ea8ea282a37178c34f86bf7e6


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.