Address Details
contract

0x6ED6e43E157CB88D0D028233FDB6ba971E60b48C

Contract Name
BlindAuction
Creator
0x31d97f–1684a0 at 0x9d5d33–1e1be2
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
17513043
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
BlindAuction




Optimization enabled
false
Compiler version
v0.8.18+commit.87f61d96




EVM Version
paris




Verified at
2023-05-01T10:19:51.172237Z

contracts/1_Storage.sol

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
contract BlindAuction {
    struct Bid {
        bytes32 blindedBid;
        uint deposit;
    }
    address payable public beneficiary;
    uint public biddingEnd;
    uint public revealEnd;
    bool public ended;
    mapping(address => Bid[]) public bids;
    address public highestBidder;
    uint public highestBid;
    mapping(address => uint) pendingReturns;
    event AuctionEnded(address winner, uint highestBid);
    error TooEarly(uint time);
    error TooLate(uint time);
    error AuctionEndAlreadyCalled();
    modifier onlyBefore(uint time) {
        if (block.timestamp >= time) revert TooLate(time - block.timestamp);
        _;
    }
    modifier onlyAfter(uint time) {
        if (block.timestamp <= time) revert TooEarly(time - block.timestamp);
        _;
    }
    constructor(
        uint biddingTime,
        uint revealTime,
        address payable beneficiaryAddress
    ) {
        beneficiary = beneficiaryAddress;
        biddingEnd = block.timestamp + biddingTime;
        revealEnd = biddingEnd + revealTime;
    }
    function blind_a_bid(uint value, bool fake, bytes32 secret) 
        public 
        pure 
        returns (bytes32){
        return keccak256(abi.encodePacked(value, fake, secret));
    }
    function bid(bytes32 blindedBid)
        external
        payable
        onlyBefore(biddingEnd)
    {
        bids[msg.sender].push(Bid({
            blindedBid: blindedBid,
            deposit: msg.value
        }));
    }
    function reveal(
        uint[] calldata values,
        bool[] calldata fakes,
        bytes32[] calldata secrets
    )
        external
        onlyAfter(biddingEnd)
        onlyBefore(revealEnd)
    {
        uint length = bids[msg.sender].length;
        require(values.length == length);
        require(fakes.length == length);
        require(secrets.length == length);
        uint refund;
        for (uint i = 0; i < length; i++) {
            Bid storage bidToCheck = bids[msg.sender][i];
            (uint value, bool fake, bytes32 secret) =
                    (values[i], fakes[i], secrets[i]);
            if (bidToCheck.blindedBid != keccak256(abi.encodePacked(value, fake, secret))) {
                continue;
            }
            refund += bidToCheck.deposit;
            if (!fake && bidToCheck.deposit >= value) {
                if (placeBid(msg.sender, value))
                    refund -= value;
            }
            bidToCheck.blindedBid = bytes32(0);
        }
        payable(msg.sender).transfer(refund);
    }
    function withdraw() external {
        uint amount = pendingReturns[msg.sender];
        if (amount > 0) {
            pendingReturns[msg.sender] = 0;
            payable(msg.sender).transfer(amount);
        }
    }
    function auctionEnd()
        external
        onlyAfter(revealEnd)
    {
        if (ended) revert AuctionEndAlreadyCalled();
        emit AuctionEnded(highestBidder, highestBid);
        ended = true;
        beneficiary.transfer(highestBid);
    }
    function placeBid(address bidder, uint value) internal
            returns (bool success)
    {
        if (value <= highestBid) {
            return false;
        }
        if (highestBidder != address(0)) {
            pendingReturns[highestBidder] += highestBid;
        }
        highestBid = value;
        highestBidder = bidder;
        return true;
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"uint256","name":"biddingTime","internalType":"uint256"},{"type":"uint256","name":"revealTime","internalType":"uint256"},{"type":"address","name":"beneficiaryAddress","internalType":"address payable"}]},{"type":"error","name":"AuctionEndAlreadyCalled","inputs":[]},{"type":"error","name":"TooEarly","inputs":[{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"error","name":"TooLate","inputs":[{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"event","name":"AuctionEnded","inputs":[{"type":"address","name":"winner","internalType":"address","indexed":false},{"type":"uint256","name":"highestBid","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"auctionEnd","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"beneficiary","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"bid","inputs":[{"type":"bytes32","name":"blindedBid","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"biddingEnd","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"blindedBid","internalType":"bytes32"},{"type":"uint256","name":"deposit","internalType":"uint256"}],"name":"bids","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"blind_a_bid","inputs":[{"type":"uint256","name":"value","internalType":"uint256"},{"type":"bool","name":"fake","internalType":"bool"},{"type":"bytes32","name":"secret","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"ended","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"highestBid","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"highestBidder","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reveal","inputs":[{"type":"uint256[]","name":"values","internalType":"uint256[]"},{"type":"bool[]","name":"fakes","internalType":"bool[]"},{"type":"bytes32[]","name":"secrets","internalType":"bytes32[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"revealEnd","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[]}]
              

Contract Creation Code

0x60806040523480156200001157600080fd5b50604051620014113803806200141183398181016040528101906200003791906200014f565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508242620000859190620001da565b600181905550816001546200009b9190620001da565b60028190555050505062000215565b600080fd5b6000819050919050565b620000c481620000af565b8114620000d057600080fd5b50565b600081519050620000e481620000b9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200011782620000ea565b9050919050565b62000129816200010a565b81146200013557600080fd5b50565b60008151905062000149816200011e565b92915050565b6000806000606084860312156200016b576200016a620000aa565b5b60006200017b86828701620000d3565b93505060206200018e86828701620000d3565b9250506040620001a18682870162000138565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620001e782620000af565b9150620001f483620000af565b92508282019050808211156200020f576200020e620001ab565b5b92915050565b6111ec80620002256000396000f3fe6080604052600436106100a75760003560e01c8063423b217f11610064578063423b217f146101ab578063900f080a146101d657806391f90157146101ff578063957bb1e01461022a578063a6e6647714610246578063d57bde7914610271576100a7565b806301495c1c146100ac578063085e3a43146100ea57806312fa6feb146101275780632a24f46c1461015257806338af3eed146101695780633ccfd60b14610194575b600080fd5b3480156100b857600080fd5b506100d360048036038101906100ce9190610b8b565b61029c565b6040516100e1929190610bf3565b60405180910390f35b3480156100f657600080fd5b50610111600480360381019061010c9190610c80565b6102dd565b60405161011e9190610cd3565b60405180910390f35b34801561013357600080fd5b5061013c610313565b6040516101499190610cfd565b60405180910390f35b34801561015e57600080fd5b50610167610326565b005b34801561017557600080fd5b5061017e6104a3565b60405161018b9190610d39565b60405180910390f35b3480156101a057600080fd5b506101a96104c7565b005b3480156101b757600080fd5b506101c06105a4565b6040516101cd9190610d54565b60405180910390f35b3480156101e257600080fd5b506101fd60048036038101906101f89190610e80565b6105aa565b005b34801561020b57600080fd5b5061021461089a565b6040516102219190610f43565b60405180910390f35b610244600480360381019061023f9190610f5e565b6108c0565b005b34801561025257600080fd5b5061025b6109a9565b6040516102689190610d54565b60405180910390f35b34801561027d57600080fd5b506102866109af565b6040516102939190610d54565b60405180910390f35b600460205281600052604060002081815481106102b857600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b60008383836040516020016102f493929190611015565b6040516020818303038152906040528051906020012090509392505050565b600360009054906101000a900460ff1681565b60025480421161037857428161033c9190611081565b6040517f2a35a32400000000000000000000000000000000000000000000000000000000815260040161036f9190610d54565b60405180910390fd5b600360009054906101000a900460ff16156103bf576040517f61cfdcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fdaec4582d5d9595688c8c98545fdd1c696d41c6aeaeb636737e84ed2f5c00eda600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006546040516104149291906110b5565b60405180910390a16001600360006101000a81548160ff02191690831515021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6006549081150290604051600060405180830381858888f1935050505015801561049f573d6000803e3d6000fd5b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156105a1576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561059f573d6000803e3d6000fd5b505b50565b60015481565b6001548042116105fc5742816105c09190611081565b6040517f2a35a3240000000000000000000000000000000000000000000000000000000081526004016105f39190610d54565b60405180910390fd5b60025480421061064e5742816106129190611081565b6040517f691e56820000000000000000000000000000000000000000000000000000000081526004016106459190610d54565b60405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090508089899050146106a457600080fd5b8087879050146106b357600080fd5b8085859050146106c257600080fd5b600080600090505b82811015610846576000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610725576107246110de565b5b9060005260206000209060020201905060008060008e8e8681811061074d5761074c6110de565b5b905060200201358d8d87818110610767576107666110de565b5b905060200201602081019061077c919061110d565b8c8c8881811061078f5761078e6110de565b5b905060200201359250925092508282826040516020016107b193929190611015565b604051602081830303815290604052805190602001208460000154146107da5750505050610833565b8360010154866107ea919061113a565b9550811580156107fe575082846001015410155b156108225761080d33846109b5565b1561082157828661081e9190611081565b95505b5b6000801b8460000181905550505050505b808061083e9061116e565b9150506106ca565b503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561088d573d6000803e3d6000fd5b5050505050505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001548042106109125742816108d69190611081565b6040517f691e56820000000000000000000000000000000000000000000000000000000081526004016109099190610d54565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280848152602001348152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550505050565b60025481565b60065481565b600060065482116109c95760009050610ae7565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a9a5760065460076000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a92919061113a565b925050819055505b8160068190555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600190505b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b2282610af7565b9050919050565b610b3281610b17565b8114610b3d57600080fd5b50565b600081359050610b4f81610b29565b92915050565b6000819050919050565b610b6881610b55565b8114610b7357600080fd5b50565b600081359050610b8581610b5f565b92915050565b60008060408385031215610ba257610ba1610aed565b5b6000610bb085828601610b40565b9250506020610bc185828601610b76565b9150509250929050565b6000819050919050565b610bde81610bcb565b82525050565b610bed81610b55565b82525050565b6000604082019050610c086000830185610bd5565b610c156020830184610be4565b9392505050565b60008115159050919050565b610c3181610c1c565b8114610c3c57600080fd5b50565b600081359050610c4e81610c28565b92915050565b610c5d81610bcb565b8114610c6857600080fd5b50565b600081359050610c7a81610c54565b92915050565b600080600060608486031215610c9957610c98610aed565b5b6000610ca786828701610b76565b9350506020610cb886828701610c3f565b9250506040610cc986828701610c6b565b9150509250925092565b6000602082019050610ce86000830184610bd5565b92915050565b610cf781610c1c565b82525050565b6000602082019050610d126000830184610cee565b92915050565b6000610d2382610af7565b9050919050565b610d3381610d18565b82525050565b6000602082019050610d4e6000830184610d2a565b92915050565b6000602082019050610d696000830184610be4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610d9457610d93610d6f565b5b8235905067ffffffffffffffff811115610db157610db0610d74565b5b602083019150836020820283011115610dcd57610dcc610d79565b5b9250929050565b60008083601f840112610dea57610de9610d6f565b5b8235905067ffffffffffffffff811115610e0757610e06610d74565b5b602083019150836020820283011115610e2357610e22610d79565b5b9250929050565b60008083601f840112610e4057610e3f610d6f565b5b8235905067ffffffffffffffff811115610e5d57610e5c610d74565b5b602083019150836020820283011115610e7957610e78610d79565b5b9250929050565b60008060008060008060608789031215610e9d57610e9c610aed565b5b600087013567ffffffffffffffff811115610ebb57610eba610af2565b5b610ec789828a01610d7e565b9650965050602087013567ffffffffffffffff811115610eea57610ee9610af2565b5b610ef689828a01610dd4565b9450945050604087013567ffffffffffffffff811115610f1957610f18610af2565b5b610f2589828a01610e2a565b92509250509295509295509295565b610f3d81610b17565b82525050565b6000602082019050610f586000830184610f34565b92915050565b600060208284031215610f7457610f73610aed565b5b6000610f8284828501610c6b565b91505092915050565b6000819050919050565b610fa6610fa182610b55565b610f8b565b82525050565b60008160f81b9050919050565b6000610fc482610fac565b9050919050565b6000610fd682610fb9565b9050919050565b610fee610fe982610c1c565b610fcb565b82525050565b6000819050919050565b61100f61100a82610bcb565b610ff4565b82525050565b60006110218286610f95565b6020820191506110318285610fdd565b6001820191506110418284610ffe565b602082019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061108c82610b55565b915061109783610b55565b92508282039050818111156110af576110ae611052565b5b92915050565b60006040820190506110ca6000830185610f34565b6110d76020830184610be4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561112357611122610aed565b5b600061113184828501610c3f565b91505092915050565b600061114582610b55565b915061115083610b55565b925082820190508082111561116857611167611052565b5b92915050565b600061117982610b55565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111ab576111aa611052565b5b60018201905091905056fea2646970667358221220207bb37af2fd4cc16cdc4e36f5a6ca655b8e60cd8b48146b112a071744dabc7264736f6c634300081200330000000000000000000000000000000000000000000000000000000000008ca000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000031d97fdb6e31955ad79899eb0d28f2d0431684a0

Deployed ByteCode

0x6080604052600436106100a75760003560e01c8063423b217f11610064578063423b217f146101ab578063900f080a146101d657806391f90157146101ff578063957bb1e01461022a578063a6e6647714610246578063d57bde7914610271576100a7565b806301495c1c146100ac578063085e3a43146100ea57806312fa6feb146101275780632a24f46c1461015257806338af3eed146101695780633ccfd60b14610194575b600080fd5b3480156100b857600080fd5b506100d360048036038101906100ce9190610b8b565b61029c565b6040516100e1929190610bf3565b60405180910390f35b3480156100f657600080fd5b50610111600480360381019061010c9190610c80565b6102dd565b60405161011e9190610cd3565b60405180910390f35b34801561013357600080fd5b5061013c610313565b6040516101499190610cfd565b60405180910390f35b34801561015e57600080fd5b50610167610326565b005b34801561017557600080fd5b5061017e6104a3565b60405161018b9190610d39565b60405180910390f35b3480156101a057600080fd5b506101a96104c7565b005b3480156101b757600080fd5b506101c06105a4565b6040516101cd9190610d54565b60405180910390f35b3480156101e257600080fd5b506101fd60048036038101906101f89190610e80565b6105aa565b005b34801561020b57600080fd5b5061021461089a565b6040516102219190610f43565b60405180910390f35b610244600480360381019061023f9190610f5e565b6108c0565b005b34801561025257600080fd5b5061025b6109a9565b6040516102689190610d54565b60405180910390f35b34801561027d57600080fd5b506102866109af565b6040516102939190610d54565b60405180910390f35b600460205281600052604060002081815481106102b857600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b60008383836040516020016102f493929190611015565b6040516020818303038152906040528051906020012090509392505050565b600360009054906101000a900460ff1681565b60025480421161037857428161033c9190611081565b6040517f2a35a32400000000000000000000000000000000000000000000000000000000815260040161036f9190610d54565b60405180910390fd5b600360009054906101000a900460ff16156103bf576040517f61cfdcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fdaec4582d5d9595688c8c98545fdd1c696d41c6aeaeb636737e84ed2f5c00eda600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006546040516104149291906110b5565b60405180910390a16001600360006101000a81548160ff02191690831515021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6006549081150290604051600060405180830381858888f1935050505015801561049f573d6000803e3d6000fd5b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156105a1576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561059f573d6000803e3d6000fd5b505b50565b60015481565b6001548042116105fc5742816105c09190611081565b6040517f2a35a3240000000000000000000000000000000000000000000000000000000081526004016105f39190610d54565b60405180910390fd5b60025480421061064e5742816106129190611081565b6040517f691e56820000000000000000000000000000000000000000000000000000000081526004016106459190610d54565b60405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090508089899050146106a457600080fd5b8087879050146106b357600080fd5b8085859050146106c257600080fd5b600080600090505b82811015610846576000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610725576107246110de565b5b9060005260206000209060020201905060008060008e8e8681811061074d5761074c6110de565b5b905060200201358d8d87818110610767576107666110de565b5b905060200201602081019061077c919061110d565b8c8c8881811061078f5761078e6110de565b5b905060200201359250925092508282826040516020016107b193929190611015565b604051602081830303815290604052805190602001208460000154146107da5750505050610833565b8360010154866107ea919061113a565b9550811580156107fe575082846001015410155b156108225761080d33846109b5565b1561082157828661081e9190611081565b95505b5b6000801b8460000181905550505050505b808061083e9061116e565b9150506106ca565b503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561088d573d6000803e3d6000fd5b5050505050505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001548042106109125742816108d69190611081565b6040517f691e56820000000000000000000000000000000000000000000000000000000081526004016109099190610d54565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280848152602001348152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550505050565b60025481565b60065481565b600060065482116109c95760009050610ae7565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a9a5760065460076000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a92919061113a565b925050819055505b8160068190555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600190505b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b2282610af7565b9050919050565b610b3281610b17565b8114610b3d57600080fd5b50565b600081359050610b4f81610b29565b92915050565b6000819050919050565b610b6881610b55565b8114610b7357600080fd5b50565b600081359050610b8581610b5f565b92915050565b60008060408385031215610ba257610ba1610aed565b5b6000610bb085828601610b40565b9250506020610bc185828601610b76565b9150509250929050565b6000819050919050565b610bde81610bcb565b82525050565b610bed81610b55565b82525050565b6000604082019050610c086000830185610bd5565b610c156020830184610be4565b9392505050565b60008115159050919050565b610c3181610c1c565b8114610c3c57600080fd5b50565b600081359050610c4e81610c28565b92915050565b610c5d81610bcb565b8114610c6857600080fd5b50565b600081359050610c7a81610c54565b92915050565b600080600060608486031215610c9957610c98610aed565b5b6000610ca786828701610b76565b9350506020610cb886828701610c3f565b9250506040610cc986828701610c6b565b9150509250925092565b6000602082019050610ce86000830184610bd5565b92915050565b610cf781610c1c565b82525050565b6000602082019050610d126000830184610cee565b92915050565b6000610d2382610af7565b9050919050565b610d3381610d18565b82525050565b6000602082019050610d4e6000830184610d2a565b92915050565b6000602082019050610d696000830184610be4565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610d9457610d93610d6f565b5b8235905067ffffffffffffffff811115610db157610db0610d74565b5b602083019150836020820283011115610dcd57610dcc610d79565b5b9250929050565b60008083601f840112610dea57610de9610d6f565b5b8235905067ffffffffffffffff811115610e0757610e06610d74565b5b602083019150836020820283011115610e2357610e22610d79565b5b9250929050565b60008083601f840112610e4057610e3f610d6f565b5b8235905067ffffffffffffffff811115610e5d57610e5c610d74565b5b602083019150836020820283011115610e7957610e78610d79565b5b9250929050565b60008060008060008060608789031215610e9d57610e9c610aed565b5b600087013567ffffffffffffffff811115610ebb57610eba610af2565b5b610ec789828a01610d7e565b9650965050602087013567ffffffffffffffff811115610eea57610ee9610af2565b5b610ef689828a01610dd4565b9450945050604087013567ffffffffffffffff811115610f1957610f18610af2565b5b610f2589828a01610e2a565b92509250509295509295509295565b610f3d81610b17565b82525050565b6000602082019050610f586000830184610f34565b92915050565b600060208284031215610f7457610f73610aed565b5b6000610f8284828501610c6b565b91505092915050565b6000819050919050565b610fa6610fa182610b55565b610f8b565b82525050565b60008160f81b9050919050565b6000610fc482610fac565b9050919050565b6000610fd682610fb9565b9050919050565b610fee610fe982610c1c565b610fcb565b82525050565b6000819050919050565b61100f61100a82610bcb565b610ff4565b82525050565b60006110218286610f95565b6020820191506110318285610fdd565b6001820191506110418284610ffe565b602082019150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061108c82610b55565b915061109783610b55565b92508282039050818111156110af576110ae611052565b5b92915050565b60006040820190506110ca6000830185610f34565b6110d76020830184610be4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561112357611122610aed565b5b600061113184828501610c3f565b91505092915050565b600061114582610b55565b915061115083610b55565b925082820190508082111561116857611167611052565b5b92915050565b600061117982610b55565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111ab576111aa611052565b5b60018201905091905056fea2646970667358221220207bb37af2fd4cc16cdc4e36f5a6ca655b8e60cd8b48146b112a071744dabc7264736f6c63430008120033