Address Details
contract

0xd94B99d4666920dfFa1dF3d89F4B34024003FE4e

Contract Name
RedEnvelope
Creator
0x9b17c9–b41233 at 0x729c33–ff9b12
Balance
0.010943846264650622 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
6 Transactions
Transfers
6 Transfers
Gas Used
1,652,402
Last Balance Update
12750332
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
RedEnvelope




Optimization enabled
false
Compiler version
v0.8.9+commit.e5eed63a




EVM Version
london




Verified at
2022-08-23T20:42:15.737994Z

project:/src/contracts/RedEnvelope.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract RedEnvelope {
  struct Envelopes{
    bytes envelopeId;
    address creator;
    string creatorNickname;
    uint totalTokenAmount;
    uint tokenAmount;
    uint participantsLimit;
    address[] participants;
    uint[] participantsPrize;
    string message;
    uint creationTime;
  }
  mapping(bytes => Envelopes) envelope;
  mapping(address => bytes []) public receiverToEnvelope;
  mapping(address => bytes []) public creatorToEnvelope;

  event EnvelopCreated(bytes envelopeId);
  event Claimed(bool claimed);
  event CreatorWithdrawn(bool withdrawn);
	constructor () 
	{
	}

	/********************************************************
	*                                                       *
	*                     MAIN FUNCTIONS                    *
	*                                                       *
	********************************************************/

  /// @notice create an envelope and share money with your people
  /// @param _message welcome message of the envelope
  /// @dev creates envelope and stores crypto in this contract to later on distribute with participants
	function createEnvelope(uint _participantsLimit, string memory _message, string memory _creatorNickName) external payable returns(bytes memory _envelopeId) {
    require(msg.value > 0, "Insufficient funds");
    _envelopeId =  abi.encode(msg.sender, block.timestamp);
    envelope[_envelopeId].envelopeId = _envelopeId;
    envelope[_envelopeId].creator = msg.sender;
    envelope[_envelopeId].creatorNickname = _creatorNickName;
    envelope[_envelopeId].totalTokenAmount = msg.value;
    envelope[_envelopeId].tokenAmount = msg.value;
    envelope[_envelopeId].participantsLimit = _participantsLimit;
    envelope[_envelopeId].message = _message;
    envelope[_envelopeId].creationTime = block.timestamp;
    creatorToEnvelope[msg.sender].push(_envelopeId);
    emit EnvelopCreated(_envelopeId);
	}

  /// @notice Open envelope before others and get crypto gift!
  /// @param _envelopeId id of envelope in bytes256
  /// @dev contract distributes crypto to msg.sender
  function claim(bytes memory _envelopeId) external {
    Envelopes storage _envelope = envelope[_envelopeId];
    uint _currentParticipant = _envelope.participants.length;
    require(_envelope.participantsLimit >  _currentParticipant, "max participants exceeded");
    require(_envelope.tokenAmount > 0, "tokens already distributed");
    _envelope.participants.push() = msg.sender;
    uint _amountToDeliver;
    // If it is the last possible participant it shares the remaining crypto. Otherwise it shares a random amount of crypto
    if(_envelope.participantsLimit != _currentParticipant) {
      _amountToDeliver = _getAmountToDeliver(_currentParticipant, _envelope.tokenAmount);
    } else {
      _amountToDeliver = _envelope.tokenAmount;
    }
    _envelope.tokenAmount -= _amountToDeliver;
    (bool sent, ) = payable(msg.sender).call{value: _amountToDeliver}("");
    require(sent, "Failed to send Ether");
    receiverToEnvelope[msg.sender].push(_envelopeId);
    _envelope.participantsPrize.push(_amountToDeliver);
    emit Claimed(true);
  }

  /// @notice Claim your crypto locked in contract
  /// @param _envelopeId id of envelope in bytes256
  /** @dev In case it's been more than 24 hours and participants have not claimed all possible crypto,
           the envelope creator can claim crypto locked in this contract**/
  function creatorWithdraw(bytes memory _envelopeId) external {
    Envelopes storage _envelope = envelope[_envelopeId];
    require(_envelope.creationTime + 86400 >= block.timestamp, "Too soon");
    require(_envelope.tokenAmount > 0, "Empty envelope");
    require(_envelope.creator == msg.sender, "Not creator");
    _envelope.tokenAmount = 0;
    (bool sent, ) = payable(msg.sender).call{value: _envelope.tokenAmount}("");
    require(sent, "Failed to send Ether");
    emit  CreatorWithdrawn(true);
  }

	/********************************************************
  *                                                       *
  *                INTERNAL FUNCTIONS                     *
  *                                                       *
  ********************************************************/

  /// @dev used in claim function
  /// @param _participantsCounter current number of participants for the envelope
  /// @param _tokenAmount amount of crypto left in the envelope
  /// @return _amountToDeliver amount of crypto to be deliver to claimer. It is random number between 1 and _tokenAmount
  function _getAmountToDeliver(uint _participantsCounter, uint _tokenAmount) internal view returns (uint _amountToDeliver) {
    _amountToDeliver = (uint(keccak256(abi.encodePacked(_participantsCounter,block.timestamp))) % _tokenAmount) + 1;
  }

	/********************************************************
  *                                                       *
  *                     GET FUNCTIONS                     *
  *                                                       *
  ********************************************************/

  function getEnvelope(bytes memory _envelopeId) external view returns(Envelopes memory) {
    return envelope[_envelopeId];
  }

  /// @dev used in front-end to display creator envelope data
  /// @param _creatorAddress address of envelope creator
  /// @return _envelopes All envelopes created by user
  function getCreatorEnvelopes(address _creatorAddress) external view returns (Envelopes[] memory) {
    bytes[] memory _creatorToEnvelope = creatorToEnvelope[_creatorAddress];
    Envelopes[] memory _envelopes = new Envelopes[](_creatorToEnvelope.length);

    for(uint i = 0; i < _creatorToEnvelope.length; i++) {
      _envelopes[i] = envelope[_creatorToEnvelope[i]];
    }
    return _envelopes;
  }

  /// @dev used in front-end to display receiver envelope data
  /// @param _receiverAddress address of envelope creator
  /// @return _envelopes All envelopes a user has opened
  function getReceiverEnvelopes(address _receiverAddress) external view returns (Envelopes[] memory) {
    bytes[] memory _receiverToEnvelope = receiverToEnvelope[_receiverAddress];
    Envelopes[] memory _envelopes = new Envelopes[](_receiverToEnvelope.length);
    for(uint i = 0; i < _receiverToEnvelope.length; i++) {
      _envelopes[i] = envelope[_receiverToEnvelope[i]];
    }
    return _envelopes;
  }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Claimed","inputs":[{"type":"bool","name":"claimed","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"CreatorWithdrawn","inputs":[{"type":"bool","name":"withdrawn","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"EnvelopCreated","inputs":[{"type":"bytes","name":"envelopeId","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claim","inputs":[{"type":"bytes","name":"_envelopeId","internalType":"bytes"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes","name":"_envelopeId","internalType":"bytes"}],"name":"createEnvelope","inputs":[{"type":"uint256","name":"_participantsLimit","internalType":"uint256"},{"type":"string","name":"_message","internalType":"string"},{"type":"string","name":"_creatorNickName","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes","name":"","internalType":"bytes"}],"name":"creatorToEnvelope","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"creatorWithdraw","inputs":[{"type":"bytes","name":"_envelopeId","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct RedEnvelope.Envelopes[]","components":[{"type":"bytes","name":"envelopeId","internalType":"bytes"},{"type":"address","name":"creator","internalType":"address"},{"type":"string","name":"creatorNickname","internalType":"string"},{"type":"uint256","name":"totalTokenAmount","internalType":"uint256"},{"type":"uint256","name":"tokenAmount","internalType":"uint256"},{"type":"uint256","name":"participantsLimit","internalType":"uint256"},{"type":"address[]","name":"participants","internalType":"address[]"},{"type":"uint256[]","name":"participantsPrize","internalType":"uint256[]"},{"type":"string","name":"message","internalType":"string"},{"type":"uint256","name":"creationTime","internalType":"uint256"}]}],"name":"getCreatorEnvelopes","inputs":[{"type":"address","name":"_creatorAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct RedEnvelope.Envelopes","components":[{"type":"bytes","name":"envelopeId","internalType":"bytes"},{"type":"address","name":"creator","internalType":"address"},{"type":"string","name":"creatorNickname","internalType":"string"},{"type":"uint256","name":"totalTokenAmount","internalType":"uint256"},{"type":"uint256","name":"tokenAmount","internalType":"uint256"},{"type":"uint256","name":"participantsLimit","internalType":"uint256"},{"type":"address[]","name":"participants","internalType":"address[]"},{"type":"uint256[]","name":"participantsPrize","internalType":"uint256[]"},{"type":"string","name":"message","internalType":"string"},{"type":"uint256","name":"creationTime","internalType":"uint256"}]}],"name":"getEnvelope","inputs":[{"type":"bytes","name":"_envelopeId","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct RedEnvelope.Envelopes[]","components":[{"type":"bytes","name":"envelopeId","internalType":"bytes"},{"type":"address","name":"creator","internalType":"address"},{"type":"string","name":"creatorNickname","internalType":"string"},{"type":"uint256","name":"totalTokenAmount","internalType":"uint256"},{"type":"uint256","name":"tokenAmount","internalType":"uint256"},{"type":"uint256","name":"participantsLimit","internalType":"uint256"},{"type":"address[]","name":"participants","internalType":"address[]"},{"type":"uint256[]","name":"participantsPrize","internalType":"uint256[]"},{"type":"string","name":"message","internalType":"string"},{"type":"uint256","name":"creationTime","internalType":"uint256"}]}],"name":"getReceiverEnvelopes","inputs":[{"type":"address","name":"_receiverAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes","name":"","internalType":"bytes"}],"name":"receiverToEnvelope","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50612af6806100206000396000f3fe60806040526004361061007b5760003560e01c806372ff6a5b1161004e57806372ff6a5b14610160578063c228af791461019d578063c63ff8dd146101cd578063ea4a03ff146101f65761007b565b8063097362a7146100805780630f697db1146100bd5780631bb97917146100fa5780635587df3214610137575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b92565b610233565b6040516100b49190611c6b565b60405180910390f35b3480156100c957600080fd5b506100e460048036038101906100df9190611dc2565b6102ec565b6040516100f1919061211c565b60405180910390f35b34801561010657600080fd5b50610121600480360381019061011c9190611b92565b61063f565b60405161012e9190611c6b565b60405180910390f35b34801561014357600080fd5b5061015e60048036038101906101599190611dc2565b6106f8565b005b34801561016c57600080fd5b506101876004803603810190610182919061213e565b61093e565b6040516101949190612323565b60405180910390f35b6101b760048036038101906101b291906123e6565b610e52565b6040516101c49190611c6b565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190611dc2565b61110c565b005b34801561020257600080fd5b5061021d6004803603810190610218919061213e565b6113f7565b60405161022a9190612323565b60405180910390f35b6001602052816000526040600020818154811061024f57600080fd5b9060005260206000200160009150915050805461026b906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610297906124a0565b80156102e45780601f106102b9576101008083540402835291602001916102e4565b820191906000526020600020905b8154815290600101906020018083116102c757829003601f168201915b505050505081565b6102f4611958565b600082604051610304919061250e565b90815260200160405180910390206040518061014001604052908160008201805461032e906124a0565b80601f016020809104026020016040519081016040528092919081815260200182805461035a906124a0565b80156103a75780601f1061037c576101008083540402835291602001916103a7565b820191906000526020600020905b81548152906001019060200180831161038a57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610416906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610442906124a0565b801561048f5780601f106104645761010080835404028352916020019161048f565b820191906000526020600020905b81548152906001019060200180831161047257829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561053b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116104f1575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561059357602002820191906000526020600020905b81548152602001906001019080831161057f575b505050505081526020016008820180546105ac906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546105d8906124a0565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b505050505081526020016009820154815250509050919050565b6002602052816000526040600020818154811061065b57600080fd5b90600052602060002001600091509150508054610677906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546106a3906124a0565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b505050505081565b60008082604051610709919061250e565b908152602001604051809103902090504262015180826009015461072d9190612554565b101561076e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076590612607565b60405180910390fd5b60008160040154116107b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ac90612673565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e906126df565b60405180910390fd5b6000816004018190555060003373ffffffffffffffffffffffffffffffffffffffff16826004015460405161087b90612725565b60006040518083038185875af1925050503d80600081146108b8576040519150601f19603f3d011682016040523d82523d6000602084013e6108bd565b606091505b5050905080610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612786565b60405180910390fd5b7ff20fa2c3ffcf196667bdf2bca7a88a69d22300769a98c86ee91ca7c6cd53be6a600160405161093191906127c1565b60405180910390a1505050565b60606000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a4d5783829060005260206000200180546109c0906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546109ec906124a0565b8015610a395780601f10610a0e57610100808354040283529160200191610a39565b820191906000526020600020905b815481529060010190602001808311610a1c57829003601f168201915b5050505050815260200190600101906109a1565b5050505090506000815167ffffffffffffffff811115610a7057610a6f611c97565b5b604051908082528060200260200182016040528015610aa957816020015b610a96611958565b815260200190600190039081610a8e5790505b50905060005b8251811015610e47576000838281518110610acd57610acc6127dc565b5b6020026020010151604051610ae2919061250e565b908152602001604051809103902060405180610140016040529081600082018054610b0c906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906124a0565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610bf4906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c20906124a0565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015610d1957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610ccf575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610d7157602002820191906000526020600020905b815481526020019060010190808311610d5d575b50505050508152602001600882018054610d8a906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610db6906124a0565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b50505050508152602001600982015481525050828281518110610e2957610e286127dc565b5b60200260200101819052508080610e3f9061280b565b915050610aaf565b508092505050919050565b606060003411610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e906128a0565b60405180910390fd5b3342604051602001610eaa9291906128de565b604051602081830303815290604052905080600082604051610ecc919061250e565b90815260200160405180910390206000019080519060200190610ef09291906119c1565b5033600082604051610f02919061250e565b908152602001604051809103902060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600082604051610f62919061250e565b90815260200160405180910390206002019080519060200190610f86929190611a47565b5034600082604051610f98919061250e565b90815260200160405180910390206003018190555034600082604051610fbe919061250e565b90815260200160405180910390206004018190555083600082604051610fe4919061250e565b9081526020016040518091039020600501819055508260008260405161100a919061250e565b9081526020016040518091039020600801908051906020019061102e929190611a47565b5042600082604051611040919061250e565b908152602001604051809103902060090181905550600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915090805190602001906110cd9291906119c1565b507f04ed59b1950be882c876bb0f615bbbaa7941c4f35cf8dde65d0814585a6ccdd6816040516110fd9190611c6b565b60405180910390a19392505050565b6000808260405161111d919061250e565b908152602001604051809103902090506000816006018054905090508082600501541161117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690612953565b60405180910390fd5b60008260040154116111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd906129bf565b60405180910390fd5b3382600601600181600181540180825580915050039060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000818360050154146112455761123e82846004015461190b565b905061124d565b826004015490505b8083600401600082825461126191906129df565b9250508190555060003373ffffffffffffffffffffffffffffffffffffffff168260405161128e90612725565b60006040518083038185875af1925050503d80600081146112cb576040519150601f19603f3d011682016040523d82523d6000602084013e6112d0565b606091505b5050905080611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612786565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208590806001815401808255809150506001900390600052602060002001600090919091909150908051906020019061138c9291906119c1565b50836007018290806001815401808255809150506001900390600052602060002001600090919091909150557f5e540da4d7c1b62cc394357318d97c58afa8d4121adf901800766bec5c6c037a60016040516113e891906127c1565b60405180910390a15050505050565b60606000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611506578382906000526020600020018054611479906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546114a5906124a0565b80156114f25780601f106114c7576101008083540402835291602001916114f2565b820191906000526020600020905b8154815290600101906020018083116114d557829003601f168201915b50505050508152602001906001019061145a565b5050505090506000815167ffffffffffffffff81111561152957611528611c97565b5b60405190808252806020026020018201604052801561156257816020015b61154f611958565b8152602001906001900390816115475790505b50905060005b8251811015611900576000838281518110611586576115856127dc565b5b602002602001015160405161159b919061250e565b9081526020016040518091039020604051806101400160405290816000820180546115c5906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546115f1906124a0565b801561163e5780601f106116135761010080835404028352916020019161163e565b820191906000526020600020905b81548152906001019060200180831161162157829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820180546116ad906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546116d9906124a0565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682018054806020026020016040519081016040528092919081815260200182805480156117d257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611788575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561182a57602002820191906000526020600020905b815481526020019060010190808311611816575b50505050508152602001600882018054611843906124a0565b80601f016020809104026020016040519081016040528092919081815260200182805461186f906124a0565b80156118bc5780601f10611891576101008083540402835291602001916118bc565b820191906000526020600020905b81548152906001019060200180831161189f57829003601f168201915b505050505081526020016009820154815250508282815181106118e2576118e16127dc565b5b602002602001018190525080806118f89061280b565b915050611568565b508092505050919050565b60006001828442604051602001611923929190612a34565b6040516020818303038152906040528051906020012060001c6119469190612a8f565b6119509190612554565b905092915050565b60405180610140016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081525090565b8280546119cd906124a0565b90600052602060002090601f0160209004810192826119ef5760008555611a36565b82601f10611a0857805160ff1916838001178555611a36565b82800160010185558215611a36579182015b82811115611a35578251825591602001919060010190611a1a565b5b509050611a439190611acd565b5090565b828054611a53906124a0565b90600052602060002090601f016020900481019282611a755760008555611abc565b82601f10611a8e57805160ff1916838001178555611abc565b82800160010185558215611abc579182015b82811115611abb578251825591602001919060010190611aa0565b5b509050611ac99190611acd565b5090565b5b80821115611ae6576000816000905550600101611ace565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b2982611afe565b9050919050565b611b3981611b1e565b8114611b4457600080fd5b50565b600081359050611b5681611b30565b92915050565b6000819050919050565b611b6f81611b5c565b8114611b7a57600080fd5b50565b600081359050611b8c81611b66565b92915050565b60008060408385031215611ba957611ba8611af4565b5b6000611bb785828601611b47565b9250506020611bc885828601611b7d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c0c578082015181840152602081019050611bf1565b83811115611c1b576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c3d82611bd2565b611c478185611bdd565b9350611c57818560208601611bee565b611c6081611c21565b840191505092915050565b60006020820190508181036000830152611c858184611c32565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccf82611c21565b810181811067ffffffffffffffff82111715611cee57611ced611c97565b5b80604052505050565b6000611d01611aea565b9050611d0d8282611cc6565b919050565b600067ffffffffffffffff821115611d2d57611d2c611c97565b5b611d3682611c21565b9050602081019050919050565b82818337600083830152505050565b6000611d65611d6084611d12565b611cf7565b905082815260208101848484011115611d8157611d80611c92565b5b611d8c848285611d43565b509392505050565b600082601f830112611da957611da8611c8d565b5b8135611db9848260208601611d52565b91505092915050565b600060208284031215611dd857611dd7611af4565b5b600082013567ffffffffffffffff811115611df657611df5611af9565b5b611e0284828501611d94565b91505092915050565b600082825260208201905092915050565b6000611e2782611bd2565b611e318185611e0b565b9350611e41818560208601611bee565b611e4a81611c21565b840191505092915050565b611e5e81611b1e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611e8b82611e64565b611e958185611e6f565b9350611ea5818560208601611bee565b611eae81611c21565b840191505092915050565b611ec281611b5c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611f008383611e55565b60208301905092915050565b6000602082019050919050565b6000611f2482611ec8565b611f2e8185611ed3565b9350611f3983611ee4565b8060005b83811015611f6a578151611f518882611ef4565b9750611f5c83611f0c565b925050600181019050611f3d565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611faf8383611eb9565b60208301905092915050565b6000602082019050919050565b6000611fd382611f77565b611fdd8185611f82565b9350611fe883611f93565b8060005b838110156120195781516120008882611fa3565b975061200b83611fbb565b925050600181019050611fec565b5085935050505092915050565b60006101408301600083015184820360008601526120448282611e1c565b91505060208301516120596020860182611e55565b50604083015184820360408601526120718282611e80565b91505060608301516120866060860182611eb9565b5060808301516120996080860182611eb9565b5060a08301516120ac60a0860182611eb9565b5060c083015184820360c08601526120c48282611f19565b91505060e083015184820360e08601526120de8282611fc8565b9150506101008301518482036101008601526120fa8282611e80565b915050610120830151612111610120860182611eb9565b508091505092915050565b600060208201905081810360008301526121368184612026565b905092915050565b60006020828403121561215457612153611af4565b5b600061216284828501611b47565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006101408301600083015184820360008601526121b58282611e1c565b91505060208301516121ca6020860182611e55565b50604083015184820360408601526121e28282611e80565b91505060608301516121f76060860182611eb9565b50608083015161220a6080860182611eb9565b5060a083015161221d60a0860182611eb9565b5060c083015184820360c08601526122358282611f19565b91505060e083015184820360e086015261224f8282611fc8565b91505061010083015184820361010086015261226b8282611e80565b915050610120830151612282610120860182611eb9565b508091505092915050565b60006122998383612197565b905092915050565b6000602082019050919050565b60006122b98261216b565b6122c38185612176565b9350836020820285016122d585612187565b8060005b8581101561231157848403895281516122f2858261228d565b94506122fd836122a1565b925060208a019950506001810190506122d9565b50829750879550505050505092915050565b6000602082019050818103600083015261233d81846122ae565b905092915050565b600067ffffffffffffffff8211156123605761235f611c97565b5b61236982611c21565b9050602081019050919050565b600061238961238484612345565b611cf7565b9050828152602081018484840111156123a5576123a4611c92565b5b6123b0848285611d43565b509392505050565b600082601f8301126123cd576123cc611c8d565b5b81356123dd848260208601612376565b91505092915050565b6000806000606084860312156123ff576123fe611af4565b5b600061240d86828701611b7d565b935050602084013567ffffffffffffffff81111561242e5761242d611af9565b5b61243a868287016123b8565b925050604084013567ffffffffffffffff81111561245b5761245a611af9565b5b612467868287016123b8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124b857607f821691505b602082108114156124cc576124cb612471565b5b50919050565b600081905092915050565b60006124e882611bd2565b6124f281856124d2565b9350612502818560208601611bee565b80840191505092915050565b600061251a82846124dd565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061255f82611b5c565b915061256a83611b5c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561259f5761259e612525565b5b828201905092915050565b600082825260208201905092915050565b7f546f6f20736f6f6e000000000000000000000000000000000000000000000000600082015250565b60006125f16008836125aa565b91506125fc826125bb565b602082019050919050565b60006020820190508181036000830152612620816125e4565b9050919050565b7f456d70747920656e76656c6f7065000000000000000000000000000000000000600082015250565b600061265d600e836125aa565b915061266882612627565b602082019050919050565b6000602082019050818103600083015261268c81612650565b9050919050565b7f4e6f742063726561746f72000000000000000000000000000000000000000000600082015250565b60006126c9600b836125aa565b91506126d482612693565b602082019050919050565b600060208201905081810360008301526126f8816126bc565b9050919050565b50565b600061270f6000836124d2565b915061271a826126ff565b600082019050919050565b600061273082612702565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006127706014836125aa565b915061277b8261273a565b602082019050919050565b6000602082019050818103600083015261279f81612763565b9050919050565b60008115159050919050565b6127bb816127a6565b82525050565b60006020820190506127d660008301846127b2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061281682611b5c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561284957612848612525565b5b600182019050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061288a6012836125aa565b915061289582612854565b602082019050919050565b600060208201905081810360008301526128b98161287d565b9050919050565b6128c981611b1e565b82525050565b6128d881611b5c565b82525050565b60006040820190506128f360008301856128c0565b61290060208301846128cf565b9392505050565b7f6d6178207061727469636970616e747320657863656564656400000000000000600082015250565b600061293d6019836125aa565b915061294882612907565b602082019050919050565b6000602082019050818103600083015261296c81612930565b9050919050565b7f746f6b656e7320616c7265616479206469737472696275746564000000000000600082015250565b60006129a9601a836125aa565b91506129b482612973565b602082019050919050565b600060208201905081810360008301526129d88161299c565b9050919050565b60006129ea82611b5c565b91506129f583611b5c565b925082821015612a0857612a07612525565b5b828203905092915050565b6000819050919050565b612a2e612a2982611b5c565b612a13565b82525050565b6000612a408285612a1d565b602082019150612a508284612a1d565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a9a82611b5c565b9150612aa583611b5c565b925082612ab557612ab4612a60565b5b82820690509291505056fea264697066735822122036307b798b9f3a6c508e256734060c76a0087952f676f2c97518c1400b9d63d464736f6c63430008090033

Deployed ByteCode

0x60806040526004361061007b5760003560e01c806372ff6a5b1161004e57806372ff6a5b14610160578063c228af791461019d578063c63ff8dd146101cd578063ea4a03ff146101f65761007b565b8063097362a7146100805780630f697db1146100bd5780631bb97917146100fa5780635587df3214610137575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b92565b610233565b6040516100b49190611c6b565b60405180910390f35b3480156100c957600080fd5b506100e460048036038101906100df9190611dc2565b6102ec565b6040516100f1919061211c565b60405180910390f35b34801561010657600080fd5b50610121600480360381019061011c9190611b92565b61063f565b60405161012e9190611c6b565b60405180910390f35b34801561014357600080fd5b5061015e60048036038101906101599190611dc2565b6106f8565b005b34801561016c57600080fd5b506101876004803603810190610182919061213e565b61093e565b6040516101949190612323565b60405180910390f35b6101b760048036038101906101b291906123e6565b610e52565b6040516101c49190611c6b565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190611dc2565b61110c565b005b34801561020257600080fd5b5061021d6004803603810190610218919061213e565b6113f7565b60405161022a9190612323565b60405180910390f35b6001602052816000526040600020818154811061024f57600080fd5b9060005260206000200160009150915050805461026b906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610297906124a0565b80156102e45780601f106102b9576101008083540402835291602001916102e4565b820191906000526020600020905b8154815290600101906020018083116102c757829003601f168201915b505050505081565b6102f4611958565b600082604051610304919061250e565b90815260200160405180910390206040518061014001604052908160008201805461032e906124a0565b80601f016020809104026020016040519081016040528092919081815260200182805461035a906124a0565b80156103a75780601f1061037c576101008083540402835291602001916103a7565b820191906000526020600020905b81548152906001019060200180831161038a57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610416906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610442906124a0565b801561048f5780601f106104645761010080835404028352916020019161048f565b820191906000526020600020905b81548152906001019060200180831161047257829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820180548060200260200160405190810160405280929190818152602001828054801561053b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116104f1575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561059357602002820191906000526020600020905b81548152602001906001019080831161057f575b505050505081526020016008820180546105ac906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546105d8906124a0565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b505050505081526020016009820154815250509050919050565b6002602052816000526040600020818154811061065b57600080fd5b90600052602060002001600091509150508054610677906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546106a3906124a0565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b505050505081565b60008082604051610709919061250e565b908152602001604051809103902090504262015180826009015461072d9190612554565b101561076e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076590612607565b60405180910390fd5b60008160040154116107b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ac90612673565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083e906126df565b60405180910390fd5b6000816004018190555060003373ffffffffffffffffffffffffffffffffffffffff16826004015460405161087b90612725565b60006040518083038185875af1925050503d80600081146108b8576040519150601f19603f3d011682016040523d82523d6000602084013e6108bd565b606091505b5050905080610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612786565b60405180910390fd5b7ff20fa2c3ffcf196667bdf2bca7a88a69d22300769a98c86ee91ca7c6cd53be6a600160405161093191906127c1565b60405180910390a1505050565b60606000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a4d5783829060005260206000200180546109c0906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546109ec906124a0565b8015610a395780601f10610a0e57610100808354040283529160200191610a39565b820191906000526020600020905b815481529060010190602001808311610a1c57829003601f168201915b5050505050815260200190600101906109a1565b5050505090506000815167ffffffffffffffff811115610a7057610a6f611c97565b5b604051908082528060200260200182016040528015610aa957816020015b610a96611958565b815260200190600190039081610a8e5790505b50905060005b8251811015610e47576000838281518110610acd57610acc6127dc565b5b6020026020010151604051610ae2919061250e565b908152602001604051809103902060405180610140016040529081600082018054610b0c906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b38906124a0565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610bf4906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c20906124a0565b8015610c6d5780601f10610c4257610100808354040283529160200191610c6d565b820191906000526020600020905b815481529060010190602001808311610c5057829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201805480602002602001604051908101604052809291908181526020018280548015610d1957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610ccf575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015610d7157602002820191906000526020600020905b815481526020019060010190808311610d5d575b50505050508152602001600882018054610d8a906124a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610db6906124a0565b8015610e035780601f10610dd857610100808354040283529160200191610e03565b820191906000526020600020905b815481529060010190602001808311610de657829003601f168201915b50505050508152602001600982015481525050828281518110610e2957610e286127dc565b5b60200260200101819052508080610e3f9061280b565b915050610aaf565b508092505050919050565b606060003411610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e906128a0565b60405180910390fd5b3342604051602001610eaa9291906128de565b604051602081830303815290604052905080600082604051610ecc919061250e565b90815260200160405180910390206000019080519060200190610ef09291906119c1565b5033600082604051610f02919061250e565b908152602001604051809103902060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600082604051610f62919061250e565b90815260200160405180910390206002019080519060200190610f86929190611a47565b5034600082604051610f98919061250e565b90815260200160405180910390206003018190555034600082604051610fbe919061250e565b90815260200160405180910390206004018190555083600082604051610fe4919061250e565b9081526020016040518091039020600501819055508260008260405161100a919061250e565b9081526020016040518091039020600801908051906020019061102e929190611a47565b5042600082604051611040919061250e565b908152602001604051809103902060090181905550600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915090805190602001906110cd9291906119c1565b507f04ed59b1950be882c876bb0f615bbbaa7941c4f35cf8dde65d0814585a6ccdd6816040516110fd9190611c6b565b60405180910390a19392505050565b6000808260405161111d919061250e565b908152602001604051809103902090506000816006018054905090508082600501541161117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690612953565b60405180910390fd5b60008260040154116111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd906129bf565b60405180910390fd5b3382600601600181600181540180825580915050039060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000818360050154146112455761123e82846004015461190b565b905061124d565b826004015490505b8083600401600082825461126191906129df565b9250508190555060003373ffffffffffffffffffffffffffffffffffffffff168260405161128e90612725565b60006040518083038185875af1925050503d80600081146112cb576040519150601f19603f3d011682016040523d82523d6000602084013e6112d0565b606091505b5050905080611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90612786565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208590806001815401808255809150506001900390600052602060002001600090919091909150908051906020019061138c9291906119c1565b50836007018290806001815401808255809150506001900390600052602060002001600090919091909150557f5e540da4d7c1b62cc394357318d97c58afa8d4121adf901800766bec5c6c037a60016040516113e891906127c1565b60405180910390a15050505050565b60606000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611506578382906000526020600020018054611479906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546114a5906124a0565b80156114f25780601f106114c7576101008083540402835291602001916114f2565b820191906000526020600020905b8154815290600101906020018083116114d557829003601f168201915b50505050508152602001906001019061145a565b5050505090506000815167ffffffffffffffff81111561152957611528611c97565b5b60405190808252806020026020018201604052801561156257816020015b61154f611958565b8152602001906001900390816115475790505b50905060005b8251811015611900576000838281518110611586576115856127dc565b5b602002602001015160405161159b919061250e565b9081526020016040518091039020604051806101400160405290816000820180546115c5906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546115f1906124a0565b801561163e5780601f106116135761010080835404028352916020019161163e565b820191906000526020600020905b81548152906001019060200180831161162157829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820180546116ad906124a0565b80601f01602080910402602001604051908101604052809291908181526020018280546116d9906124a0565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682018054806020026020016040519081016040528092919081815260200182805480156117d257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611788575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561182a57602002820191906000526020600020905b815481526020019060010190808311611816575b50505050508152602001600882018054611843906124a0565b80601f016020809104026020016040519081016040528092919081815260200182805461186f906124a0565b80156118bc5780601f10611891576101008083540402835291602001916118bc565b820191906000526020600020905b81548152906001019060200180831161189f57829003601f168201915b505050505081526020016009820154815250508282815181106118e2576118e16127dc565b5b602002602001018190525080806118f89061280b565b915050611568565b508092505050919050565b60006001828442604051602001611923929190612a34565b6040516020818303038152906040528051906020012060001c6119469190612a8f565b6119509190612554565b905092915050565b60405180610140016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081525090565b8280546119cd906124a0565b90600052602060002090601f0160209004810192826119ef5760008555611a36565b82601f10611a0857805160ff1916838001178555611a36565b82800160010185558215611a36579182015b82811115611a35578251825591602001919060010190611a1a565b5b509050611a439190611acd565b5090565b828054611a53906124a0565b90600052602060002090601f016020900481019282611a755760008555611abc565b82601f10611a8e57805160ff1916838001178555611abc565b82800160010185558215611abc579182015b82811115611abb578251825591602001919060010190611aa0565b5b509050611ac99190611acd565b5090565b5b80821115611ae6576000816000905550600101611ace565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b2982611afe565b9050919050565b611b3981611b1e565b8114611b4457600080fd5b50565b600081359050611b5681611b30565b92915050565b6000819050919050565b611b6f81611b5c565b8114611b7a57600080fd5b50565b600081359050611b8c81611b66565b92915050565b60008060408385031215611ba957611ba8611af4565b5b6000611bb785828601611b47565b9250506020611bc885828601611b7d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c0c578082015181840152602081019050611bf1565b83811115611c1b576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c3d82611bd2565b611c478185611bdd565b9350611c57818560208601611bee565b611c6081611c21565b840191505092915050565b60006020820190508181036000830152611c858184611c32565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ccf82611c21565b810181811067ffffffffffffffff82111715611cee57611ced611c97565b5b80604052505050565b6000611d01611aea565b9050611d0d8282611cc6565b919050565b600067ffffffffffffffff821115611d2d57611d2c611c97565b5b611d3682611c21565b9050602081019050919050565b82818337600083830152505050565b6000611d65611d6084611d12565b611cf7565b905082815260208101848484011115611d8157611d80611c92565b5b611d8c848285611d43565b509392505050565b600082601f830112611da957611da8611c8d565b5b8135611db9848260208601611d52565b91505092915050565b600060208284031215611dd857611dd7611af4565b5b600082013567ffffffffffffffff811115611df657611df5611af9565b5b611e0284828501611d94565b91505092915050565b600082825260208201905092915050565b6000611e2782611bd2565b611e318185611e0b565b9350611e41818560208601611bee565b611e4a81611c21565b840191505092915050565b611e5e81611b1e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611e8b82611e64565b611e958185611e6f565b9350611ea5818560208601611bee565b611eae81611c21565b840191505092915050565b611ec281611b5c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611f008383611e55565b60208301905092915050565b6000602082019050919050565b6000611f2482611ec8565b611f2e8185611ed3565b9350611f3983611ee4565b8060005b83811015611f6a578151611f518882611ef4565b9750611f5c83611f0c565b925050600181019050611f3d565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611faf8383611eb9565b60208301905092915050565b6000602082019050919050565b6000611fd382611f77565b611fdd8185611f82565b9350611fe883611f93565b8060005b838110156120195781516120008882611fa3565b975061200b83611fbb565b925050600181019050611fec565b5085935050505092915050565b60006101408301600083015184820360008601526120448282611e1c565b91505060208301516120596020860182611e55565b50604083015184820360408601526120718282611e80565b91505060608301516120866060860182611eb9565b5060808301516120996080860182611eb9565b5060a08301516120ac60a0860182611eb9565b5060c083015184820360c08601526120c48282611f19565b91505060e083015184820360e08601526120de8282611fc8565b9150506101008301518482036101008601526120fa8282611e80565b915050610120830151612111610120860182611eb9565b508091505092915050565b600060208201905081810360008301526121368184612026565b905092915050565b60006020828403121561215457612153611af4565b5b600061216284828501611b47565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006101408301600083015184820360008601526121b58282611e1c565b91505060208301516121ca6020860182611e55565b50604083015184820360408601526121e28282611e80565b91505060608301516121f76060860182611eb9565b50608083015161220a6080860182611eb9565b5060a083015161221d60a0860182611eb9565b5060c083015184820360c08601526122358282611f19565b91505060e083015184820360e086015261224f8282611fc8565b91505061010083015184820361010086015261226b8282611e80565b915050610120830151612282610120860182611eb9565b508091505092915050565b60006122998383612197565b905092915050565b6000602082019050919050565b60006122b98261216b565b6122c38185612176565b9350836020820285016122d585612187565b8060005b8581101561231157848403895281516122f2858261228d565b94506122fd836122a1565b925060208a019950506001810190506122d9565b50829750879550505050505092915050565b6000602082019050818103600083015261233d81846122ae565b905092915050565b600067ffffffffffffffff8211156123605761235f611c97565b5b61236982611c21565b9050602081019050919050565b600061238961238484612345565b611cf7565b9050828152602081018484840111156123a5576123a4611c92565b5b6123b0848285611d43565b509392505050565b600082601f8301126123cd576123cc611c8d565b5b81356123dd848260208601612376565b91505092915050565b6000806000606084860312156123ff576123fe611af4565b5b600061240d86828701611b7d565b935050602084013567ffffffffffffffff81111561242e5761242d611af9565b5b61243a868287016123b8565b925050604084013567ffffffffffffffff81111561245b5761245a611af9565b5b612467868287016123b8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124b857607f821691505b602082108114156124cc576124cb612471565b5b50919050565b600081905092915050565b60006124e882611bd2565b6124f281856124d2565b9350612502818560208601611bee565b80840191505092915050565b600061251a82846124dd565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061255f82611b5c565b915061256a83611b5c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561259f5761259e612525565b5b828201905092915050565b600082825260208201905092915050565b7f546f6f20736f6f6e000000000000000000000000000000000000000000000000600082015250565b60006125f16008836125aa565b91506125fc826125bb565b602082019050919050565b60006020820190508181036000830152612620816125e4565b9050919050565b7f456d70747920656e76656c6f7065000000000000000000000000000000000000600082015250565b600061265d600e836125aa565b915061266882612627565b602082019050919050565b6000602082019050818103600083015261268c81612650565b9050919050565b7f4e6f742063726561746f72000000000000000000000000000000000000000000600082015250565b60006126c9600b836125aa565b91506126d482612693565b602082019050919050565b600060208201905081810360008301526126f8816126bc565b9050919050565b50565b600061270f6000836124d2565b915061271a826126ff565b600082019050919050565b600061273082612702565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006127706014836125aa565b915061277b8261273a565b602082019050919050565b6000602082019050818103600083015261279f81612763565b9050919050565b60008115159050919050565b6127bb816127a6565b82525050565b60006020820190506127d660008301846127b2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061281682611b5c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561284957612848612525565b5b600182019050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061288a6012836125aa565b915061289582612854565b602082019050919050565b600060208201905081810360008301526128b98161287d565b9050919050565b6128c981611b1e565b82525050565b6128d881611b5c565b82525050565b60006040820190506128f360008301856128c0565b61290060208301846128cf565b9392505050565b7f6d6178207061727469636970616e747320657863656564656400000000000000600082015250565b600061293d6019836125aa565b915061294882612907565b602082019050919050565b6000602082019050818103600083015261296c81612930565b9050919050565b7f746f6b656e7320616c7265616479206469737472696275746564000000000000600082015250565b60006129a9601a836125aa565b91506129b482612973565b602082019050919050565b600060208201905081810360008301526129d88161299c565b9050919050565b60006129ea82611b5c565b91506129f583611b5c565b925082821015612a0857612a07612525565b5b828203905092915050565b6000819050919050565b612a2e612a2982611b5c565b612a13565b82525050565b6000612a408285612a1d565b602082019150612a508284612a1d565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a9a82611b5c565b9150612aa583611b5c565b925082612ab557612ab4612a60565b5b82820690509291505056fea264697066735822122036307b798b9f3a6c508e256734060c76a0087952f676f2c97518c1400b9d63d464736f6c63430008090033