Address Details
contract

0x854e66eF22805060563E2cE54eA19B672c27dE60

Contract Name
LiquidCryptoBridge_v1
Creator
0x179d5d–f68df5 at 0x25dd73–000cf0
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
14848817
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
LiquidCryptoBridge_v1




Optimization enabled
false
Compiler version
v0.8.11+commit.d7f03943




EVM Version
london




Verified at
2023-01-22T09:28:10.026583Z

project:/contracts/LiquidCryptoBridge_v1.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.9 <0.9.0;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IWETH is IERC20 {
  function deposit() external payable;
  function withdraw(uint256 wad) external;
}

contract LiquidCryptoBridge_v1 is ERC20, Ownable {
  uint256 public swapFee = 50;
  uint256 public feeBase = 1000;
  address public feeCollector;
  address public weth;

  struct SwapVoucher {
    address account;
    bool isContract;
    uint256 inChain;
    uint256 inAmount;
    uint256 outChain;
    uint256 outAmount;
  }
  mapping (uint256 => SwapVoucher) public voucherLists;
  mapping (address => bool) public managers;

  event tokenDeposit(uint256 inAmount,  uint256 fee, uint256 gas);
  event tokenWithdraw(address account, uint256 amount, uint256 out, uint256 fee, uint256 gas);
  event tokenRefund(address account, uint256 out);

  constructor(address _weth, address _feeCollector)
    ERC20("LiquidCryptoBridgeLP_v1", "LCBLPv1")
  {
    weth = _weth;
    feeCollector = _feeCollector;
    managers[msg.sender] = true;
  }

  modifier onlyManager() {
    require(managers[msg.sender], "!manager");
    _;
  }

  function depositForUser(uint256 fee) public payable {
    uint256 totalAmount = msg.value;
    uint256 feeAmount = (totalAmount - fee) * swapFee / feeBase;
    if (feeAmount > 0) {
      _mint(feeCollector, feeAmount);
    }

    emit tokenDeposit(totalAmount, feeAmount, fee);

    if (fee > 0) {
      (bool success1, ) = tx.origin.call{value: fee}("");
      require(success1, "Failed to refund fee");
    }
  }
  
  function withdrawForUser(address account, bool isContract, uint256 outAmount, uint256 fee) public onlyManager {
    uint256 feeAmount = (outAmount - fee) * swapFee / feeBase;
    uint256 withdrawAmount = outAmount - feeAmount - fee;
    require(withdrawAmount <= address(this).balance, "Not enough balance");
    if (feeAmount > 0) {
      _mint(feeCollector, feeAmount);
    }

    if (isContract) {
      IWETH(weth).deposit{value: withdrawAmount}();
      ERC20(weth).transfer(account, withdrawAmount);
    }
    else {
      (bool success1, ) = account.call{value: withdrawAmount}("");
      require(success1, "Failed to withdraw");
    }

    if (fee > 0) {
      (bool success2, ) = tx.origin.call{value: fee}("");
      require(success2, "Failed to refund fee");
    }
    
    emit tokenWithdraw(account, outAmount, withdrawAmount, feeAmount, fee);
  }

  function refundFaildVoucher(address account, bool isContract, uint256 amount, uint256 fee) public onlyManager {
    if (isContract) {
      IWETH(weth).deposit{value: amount}();
      ERC20(weth).transfer(account, amount);
    }
    else {
      (bool success1, ) = account.call{value: amount}("");
      require(success1, "Failed to refund");
    }
    
    if (fee > 0) {
      (bool success2, ) = tx.origin.call{value: fee}("");
      require(success2, "Failed to refund fee");
    }

    emit tokenRefund(account, amount);
  }

  function setFee(uint256 fee) public onlyOwner {
    swapFee = fee;
  }

  function setManager(address account, bool access) public onlyOwner {
    managers[account] = access;
  }

  function deposit() public payable onlyOwner {
    if (totalSupply() > address(this).balance) {
      uint256 needAmount = totalSupply() - address(this).balance;
      if (msg.value > needAmount) {
        uint256 refund = msg.value - needAmount;
        (bool success1, ) = msg.sender.call{value: refund}("");
        require(success1, "Failed to refund unnecessary balance");
      }
    }
  }

  function withdraw() public onlyOwner {
    if (totalSupply() < address(this).balance) {
      uint256 availableAmount = address(this).balance - totalSupply();
      (bool success1, ) = msg.sender.call{value: availableAmount}("");
      require(success1, "Failed to refund unnecessary balance");
    }
  }

  function stake() public payable {
    _mint(msg.sender, msg.value);
  }

  function unstake(uint256 amount) public {
    uint256 totalReward = balanceOf(feeCollector);
    uint256 reward = amount * totalReward / totalSupply();
    uint256 unstakeAmount = amount + reward;
    require(unstakeAmount <= address(this).balance, "Not enough balance");
    (bool success1, ) = msg.sender.call{value: unstakeAmount}("");
    require(success1, "Failed to unstake");
    _burn(msg.sender, amount);
    _burn(feeCollector, reward);
  }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_weth","internalType":"address"},{"type":"address","name":"_feeCollector","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"tokenDeposit","inputs":[{"type":"uint256","name":"inAmount","internalType":"uint256","indexed":false},{"type":"uint256","name":"fee","internalType":"uint256","indexed":false},{"type":"uint256","name":"gas","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"tokenRefund","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false},{"type":"uint256","name":"out","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"tokenWithdraw","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"uint256","name":"out","internalType":"uint256","indexed":false},{"type":"uint256","name":"fee","internalType":"uint256","indexed":false},{"type":"uint256","name":"gas","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"deposit","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"depositForUser","inputs":[{"type":"uint256","name":"fee","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeBase","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"feeCollector","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"managers","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"refundFaildVoucher","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"isContract","internalType":"bool"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"fee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFee","inputs":[{"type":"uint256","name":"fee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setManager","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"access","internalType":"bool"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"stake","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unstake","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"isContract","internalType":"bool"},{"type":"uint256","name":"inChain","internalType":"uint256"},{"type":"uint256","name":"inAmount","internalType":"uint256"},{"type":"uint256","name":"outChain","internalType":"uint256"},{"type":"uint256","name":"outAmount","internalType":"uint256"}],"name":"voucherLists","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"weth","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawForUser","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"isContract","internalType":"bool"},{"type":"uint256","name":"outAmount","internalType":"uint256"},{"type":"uint256","name":"fee","internalType":"uint256"}]}]
              

Contract Creation Code

0x608060405260326006556103e86007553480156200001c57600080fd5b5060405162003782380380620037828339818101604052810190620000429190620003cc565b6040518060400160405280601781526020017f4c697175696443727970746f4272696467654c505f76310000000000000000008152506040518060400160405280600781526020017f4c43424c507631000000000000000000000000000000000000000000000000008152508160039080519060200190620000c6929190620002b2565b508060049080519060200190620000df929190620002b2565b50505062000102620000f6620001e460201b60201c565b620001ec60201b60201c565b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000478565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c09062000442565b90600052602060002090601f016020900481019282620002e4576000855562000330565b82601f10620002ff57805160ff191683800117855562000330565b8280016001018555821562000330579182015b828111156200032f57825182559160200191906001019062000312565b5b5090506200033f919062000343565b5090565b5b808211156200035e57600081600090555060010162000344565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003948262000367565b9050919050565b620003a68162000387565b8114620003b257600080fd5b50565b600081519050620003c6816200039b565b92915050565b60008060408385031215620003e657620003e562000362565b5b6000620003f685828601620003b5565b92505060206200040985828601620003b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045b57607f821691505b6020821081141562000472576200047162000413565b5b50919050565b6132fa80620004886000396000f3fe6080604052600436106101c25760003560e01c806370a08231116100f7578063a9059cbb11610095578063d53eccf411610064578063d53eccf4146105fc578063dd62ed3e14610625578063f2fde38b14610662578063fdff9b4d1461068b576101c2565b8063a9059cbb14610548578063c0e3410514610585578063c415b95c146105c7578063d0e30db0146105f2576101c2565b806395d89b41116100d157806395d89b411461048c57806395e911a8146104b7578063a457c2d7146104e2578063a5e90eee1461051f576101c2565b806370a082311461040d578063715018a61461044a5780638da5cb5b14610461576101c2565b80633a4b66f1116101645780634cad64f11161013e5780634cad64f11461037457806354cf2aeb1461039057806369fe0e2d146103bb5780636c33ed8c146103e4576101c2565b80633a4b66f1146103285780633ccfd60b146103325780633fc8cef314610349576101c2565b806323b872dd116101a057806323b872dd1461025a5780632e17de7814610297578063313ce567146102c057806339509351146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd1461022f575b600080fd5b3480156101d357600080fd5b506101dc6106c8565b6040516101e99190612258565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612313565b61075a565b604051610226919061236e565b60405180910390f35b34801561023b57600080fd5b5061024461077d565b6040516102519190612398565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c91906123b3565b610787565b60405161028e919061236e565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612406565b6107b6565b005b3480156102cc57600080fd5b506102d5610943565b6040516102e2919061244f565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612313565b61094c565b60405161031f919061236e565b60405180910390f35b610330610983565b005b34801561033e57600080fd5b5061034761098f565b005b34801561035557600080fd5b5061035e610a6e565b60405161036b9190612479565b60405180910390f35b61038e60048036038101906103899190612406565b610a94565b005b34801561039c57600080fd5b506103a5610bf0565b6040516103b29190612398565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd9190612406565b610bf6565b005b3480156103f057600080fd5b5061040b600480360381019061040691906124c0565b610c08565b005b34801561041957600080fd5b50610434600480360381019061042f9190612527565b61102d565b6040516104419190612398565b60405180910390f35b34801561045657600080fd5b5061045f611075565b005b34801561046d57600080fd5b50610476611089565b6040516104839190612479565b60405180910390f35b34801561049857600080fd5b506104a16110b3565b6040516104ae9190612258565b60405180910390f35b3480156104c357600080fd5b506104cc611145565b6040516104d99190612398565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612313565b61114b565b604051610516919061236e565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190612554565b6111c2565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612313565b611225565b60405161057c919061236e565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190612406565b611248565b6040516105be96959493929190612594565b60405180910390f35b3480156105d357600080fd5b506105dc6112b1565b6040516105e99190612479565b60405180910390f35b6105fa6112d7565b005b34801561060857600080fd5b50610623600480360381019061061e91906124c0565b6113d0565b005b34801561063157600080fd5b5061064c600480360381019061064791906125f5565b61172f565b6040516106599190612398565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190612527565b6117b6565b005b34801561069757600080fd5b506106b260048036038101906106ad9190612527565b61183a565b6040516106bf919061236e565b60405180910390f35b6060600380546106d790612664565b80601f016020809104026020016040519081016040528092919081815260200182805461070390612664565b80156107505780601f1061072557610100808354040283529160200191610750565b820191906000526020600020905b81548152906001019060200180831161073357829003601f168201915b5050505050905090565b60008061076561185a565b9050610772818585611862565b600191505092915050565b6000600254905090565b60008061079261185a565b905061079f858285611a2d565b6107aa858585611ab9565b60019150509392505050565b60006107e3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661102d565b905060006107ef61077d565b82846107fb91906126c5565b610805919061274e565b905060008184610815919061277f565b90504781111561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085190612821565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161088090612872565b60006040518083038185875af1925050503d80600081146108bd576040519150601f19603f3d011682016040523d82523d6000602084013e6108c2565b606091505b5050905080610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd906128d3565b60405180910390fd5b6109103386611d3a565b61093c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d3a565b5050505050565b60006012905090565b60008061095761185a565b9050610978818585610969858961172f565b610973919061277f565b611862565b600191505092915050565b61098d3334611f11565b565b610997612071565b476109a061077d565b1015610a6c5760006109b061077d565b476109bb91906128f3565b905060003373ffffffffffffffffffffffffffffffffffffffff16826040516109e390612872565b60006040518083038185875af1925050503d8060008114610a20576040519150601f19603f3d011682016040523d82523d6000602084013e610a25565b606091505b5050905080610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090612999565b60405180910390fd5b50505b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600034905060006007546006548484610aad91906128f3565b610ab791906126c5565b610ac1919061274e565b90506000811115610af957610af8600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611f11565b5b7f052d30813a65f3273f4cea94635ebdfd627b56e8557f2d8cc75f3acdbdc40347828285604051610b2c939291906129b9565b60405180910390a16000831115610beb5760003273ffffffffffffffffffffffffffffffffffffffff1684604051610b6390612872565b60006040518083038185875af1925050503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5050905080610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be090612a3c565b60405180910390fd5b505b505050565b60065481565b610bfe612071565b8060068190555050565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90612aa8565b60405180910390fd5b60006007546006548385610ca891906128f3565b610cb291906126c5565b610cbc919061274e565b90506000828285610ccd91906128f3565b610cd791906128f3565b905047811115610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390612821565b60405180910390fd5b6000821115610d5257610d51600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f11565b5b8415610e8157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610dc257600080fd5b505af1158015610dd6573d6000803e3d6000fd5b5050505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87836040518363ffffffff1660e01b8152600401610e38929190612ac8565b6020604051808303816000875af1158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b9190612b06565b50610f2f565b60008673ffffffffffffffffffffffffffffffffffffffff1682604051610ea790612872565b60006040518083038185875af1925050503d8060008114610ee4576040519150601f19603f3d011682016040523d82523d6000602084013e610ee9565b606091505b5050905080610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490612b7f565b60405180910390fd5b505b6000831115610fe65760003273ffffffffffffffffffffffffffffffffffffffff1684604051610f5e90612872565b60006040518083038185875af1925050503d8060008114610f9b576040519150601f19603f3d011682016040523d82523d6000602084013e610fa0565b606091505b5050905080610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90612a3c565b60405180910390fd5b505b7fcbe5a8897f52aa2c1becf33171c906f4ee5ea7c9df02350210ff9fcdad49546a868583858760405161101d959493929190612b9f565b60405180910390a1505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61107d612071565b61108760006120ef565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110c290612664565b80601f01602080910402602001604051908101604052809291908181526020018280546110ee90612664565b801561113b5780601f106111105761010080835404028352916020019161113b565b820191906000526020600020905b81548152906001019060200180831161111e57829003601f168201915b5050505050905090565b60075481565b60008061115661185a565b90506000611164828661172f565b9050838110156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090612c64565b60405180910390fd5b6111b68286868403611862565b60019250505092915050565b6111ca612071565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008061123061185a565b905061123d818585611ab9565b600191505092915050565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060010154908060020154908060030154908060040154905086565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112df612071565b476112e861077d565b11156113ce576000476112f961077d565b61130391906128f3565b9050803411156113cc576000813461131b91906128f3565b905060003373ffffffffffffffffffffffffffffffffffffffff168260405161134390612872565b60006040518083038185875af1925050503d8060008114611380576040519150601f19603f3d011682016040523d82523d6000602084013e611385565b606091505b50509050806113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090612999565b60405180910390fd5b50505b505b565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390612aa8565b60405180910390fd5b821561158b57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b5050505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401611542929190612ac8565b6020604051808303816000875af1158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190612b06565b50611639565b60008473ffffffffffffffffffffffffffffffffffffffff16836040516115b190612872565b60006040518083038185875af1925050503d80600081146115ee576040519150601f19603f3d011682016040523d82523d6000602084013e6115f3565b606091505b5050905080611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e90612cd0565b60405180910390fd5b505b60008111156116f05760003273ffffffffffffffffffffffffffffffffffffffff168260405161166890612872565b60006040518083038185875af1925050503d80600081146116a5576040519150601f19603f3d011682016040523d82523d6000602084013e6116aa565b606091505b50509050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590612a3c565b60405180910390fd5b505b7f911db51ed2e298250d30776745397b1001763f5bf87e73dddcf540c7142989528483604051611721929190612ac8565b60405180910390a150505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117be612071565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590612d62565b60405180910390fd5b611837816120ef565b50565b600b6020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990612df4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990612e86565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a209190612398565b60405180910390a3505050565b6000611a39848461172f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ab35781811015611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90612ef2565b60405180910390fd5b611ab28484848403611862565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090612f84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613016565b60405180910390fd5b611ba48383836121b5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906130a8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd919061277f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d219190612398565b60405180910390a3611d348484846121ba565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da19061313a565b60405180910390fd5b611db6826000836121b5565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e33906131cc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611e9391906128f3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef89190612398565b60405180910390a3611f0c836000846121ba565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7890613238565b60405180910390fd5b611f8d600083836121b5565b8060026000828254611f9f919061277f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff4919061277f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120599190612398565b60405180910390a361206d600083836121ba565b5050565b61207961185a565b73ffffffffffffffffffffffffffffffffffffffff16612097611089565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e4906132a4565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121f95780820151818401526020810190506121de565b83811115612208576000848401525b50505050565b6000601f19601f8301169050919050565b600061222a826121bf565b61223481856121ca565b93506122448185602086016121db565b61224d8161220e565b840191505092915050565b60006020820190508181036000830152612272818461221f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122aa8261227f565b9050919050565b6122ba8161229f565b81146122c557600080fd5b50565b6000813590506122d7816122b1565b92915050565b6000819050919050565b6122f0816122dd565b81146122fb57600080fd5b50565b60008135905061230d816122e7565b92915050565b6000806040838503121561232a5761232961227a565b5b6000612338858286016122c8565b9250506020612349858286016122fe565b9150509250929050565b60008115159050919050565b61236881612353565b82525050565b6000602082019050612383600083018461235f565b92915050565b612392816122dd565b82525050565b60006020820190506123ad6000830184612389565b92915050565b6000806000606084860312156123cc576123cb61227a565b5b60006123da868287016122c8565b93505060206123eb868287016122c8565b92505060406123fc868287016122fe565b9150509250925092565b60006020828403121561241c5761241b61227a565b5b600061242a848285016122fe565b91505092915050565b600060ff82169050919050565b61244981612433565b82525050565b60006020820190506124646000830184612440565b92915050565b6124738161229f565b82525050565b600060208201905061248e600083018461246a565b92915050565b61249d81612353565b81146124a857600080fd5b50565b6000813590506124ba81612494565b92915050565b600080600080608085870312156124da576124d961227a565b5b60006124e8878288016122c8565b94505060206124f9878288016124ab565b935050604061250a878288016122fe565b925050606061251b878288016122fe565b91505092959194509250565b60006020828403121561253d5761253c61227a565b5b600061254b848285016122c8565b91505092915050565b6000806040838503121561256b5761256a61227a565b5b6000612579858286016122c8565b925050602061258a858286016124ab565b9150509250929050565b600060c0820190506125a9600083018961246a565b6125b6602083018861235f565b6125c36040830187612389565b6125d06060830186612389565b6125dd6080830185612389565b6125ea60a0830184612389565b979650505050505050565b6000806040838503121561260c5761260b61227a565b5b600061261a858286016122c8565b925050602061262b858286016122c8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061267c57607f821691505b602082108114156126905761268f612635565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126d0826122dd565b91506126db836122dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561271457612713612696565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612759826122dd565b9150612764836122dd565b9250826127745761277361271f565b5b828204905092915050565b600061278a826122dd565b9150612795836122dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127ca576127c9612696565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b600061280b6012836121ca565b9150612816826127d5565b602082019050919050565b6000602082019050818103600083015261283a816127fe565b9050919050565b600081905092915050565b50565b600061285c600083612841565b91506128678261284c565b600082019050919050565b600061287d8261284f565b9150819050919050565b7f4661696c656420746f20756e7374616b65000000000000000000000000000000600082015250565b60006128bd6011836121ca565b91506128c882612887565b602082019050919050565b600060208201905081810360008301526128ec816128b0565b9050919050565b60006128fe826122dd565b9150612909836122dd565b92508282101561291c5761291b612696565b5b828203905092915050565b7f4661696c656420746f20726566756e6420756e6e65636573736172792062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006129836024836121ca565b915061298e82612927565b604082019050919050565b600060208201905081810360008301526129b281612976565b9050919050565b60006060820190506129ce6000830186612389565b6129db6020830185612389565b6129e86040830184612389565b949350505050565b7f4661696c656420746f20726566756e6420666565000000000000000000000000600082015250565b6000612a266014836121ca565b9150612a31826129f0565b602082019050919050565b60006020820190508181036000830152612a5581612a19565b9050919050565b7f216d616e61676572000000000000000000000000000000000000000000000000600082015250565b6000612a926008836121ca565b9150612a9d82612a5c565b602082019050919050565b60006020820190508181036000830152612ac181612a85565b9050919050565b6000604082019050612add600083018561246a565b612aea6020830184612389565b9392505050565b600081519050612b0081612494565b92915050565b600060208284031215612b1c57612b1b61227a565b5b6000612b2a84828501612af1565b91505092915050565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000612b696012836121ca565b9150612b7482612b33565b602082019050919050565b60006020820190508181036000830152612b9881612b5c565b9050919050565b600060a082019050612bb4600083018861246a565b612bc16020830187612389565b612bce6040830186612389565b612bdb6060830185612389565b612be86080830184612389565b9695505050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c4e6025836121ca565b9150612c5982612bf2565b604082019050919050565b60006020820190508181036000830152612c7d81612c41565b9050919050565b7f4661696c656420746f20726566756e6400000000000000000000000000000000600082015250565b6000612cba6010836121ca565b9150612cc582612c84565b602082019050919050565b60006020820190508181036000830152612ce981612cad565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d4c6026836121ca565b9150612d5782612cf0565b604082019050919050565b60006020820190508181036000830152612d7b81612d3f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612dde6024836121ca565b9150612de982612d82565b604082019050919050565b60006020820190508181036000830152612e0d81612dd1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e706022836121ca565b9150612e7b82612e14565b604082019050919050565b60006020820190508181036000830152612e9f81612e63565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612edc601d836121ca565b9150612ee782612ea6565b602082019050919050565b60006020820190508181036000830152612f0b81612ecf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f6e6025836121ca565b9150612f7982612f12565b604082019050919050565b60006020820190508181036000830152612f9d81612f61565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006130006023836121ca565b915061300b82612fa4565b604082019050919050565b6000602082019050818103600083015261302f81612ff3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006130926026836121ca565b915061309d82613036565b604082019050919050565b600060208201905081810360008301526130c181613085565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006131246021836121ca565b915061312f826130c8565b604082019050919050565b6000602082019050818103600083015261315381613117565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006131b66022836121ca565b91506131c18261315a565b604082019050919050565b600060208201905081810360008301526131e5816131a9565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613222601f836121ca565b915061322d826131ec565b602082019050919050565b6000602082019050818103600083015261325181613215565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061328e6020836121ca565b915061329982613258565b602082019050919050565b600060208201905081810360008301526132bd81613281565b905091905056fea26469706673582212202256547bfb26aee6a2d714d374dad62eb29e767c3722d9d78d7496f99dee02b164736f6c634300080b0033000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead00000000000000000000000000000b55964bb4f8cc3e31817461eda53f7aa8306598

Deployed ByteCode

0x6080604052600436106101c25760003560e01c806370a08231116100f7578063a9059cbb11610095578063d53eccf411610064578063d53eccf4146105fc578063dd62ed3e14610625578063f2fde38b14610662578063fdff9b4d1461068b576101c2565b8063a9059cbb14610548578063c0e3410514610585578063c415b95c146105c7578063d0e30db0146105f2576101c2565b806395d89b41116100d157806395d89b411461048c57806395e911a8146104b7578063a457c2d7146104e2578063a5e90eee1461051f576101c2565b806370a082311461040d578063715018a61461044a5780638da5cb5b14610461576101c2565b80633a4b66f1116101645780634cad64f11161013e5780634cad64f11461037457806354cf2aeb1461039057806369fe0e2d146103bb5780636c33ed8c146103e4576101c2565b80633a4b66f1146103285780633ccfd60b146103325780633fc8cef314610349576101c2565b806323b872dd116101a057806323b872dd1461025a5780632e17de7814610297578063313ce567146102c057806339509351146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd1461022f575b600080fd5b3480156101d357600080fd5b506101dc6106c8565b6040516101e99190612258565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612313565b61075a565b604051610226919061236e565b60405180910390f35b34801561023b57600080fd5b5061024461077d565b6040516102519190612398565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c91906123b3565b610787565b60405161028e919061236e565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612406565b6107b6565b005b3480156102cc57600080fd5b506102d5610943565b6040516102e2919061244f565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612313565b61094c565b60405161031f919061236e565b60405180910390f35b610330610983565b005b34801561033e57600080fd5b5061034761098f565b005b34801561035557600080fd5b5061035e610a6e565b60405161036b9190612479565b60405180910390f35b61038e60048036038101906103899190612406565b610a94565b005b34801561039c57600080fd5b506103a5610bf0565b6040516103b29190612398565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd9190612406565b610bf6565b005b3480156103f057600080fd5b5061040b600480360381019061040691906124c0565b610c08565b005b34801561041957600080fd5b50610434600480360381019061042f9190612527565b61102d565b6040516104419190612398565b60405180910390f35b34801561045657600080fd5b5061045f611075565b005b34801561046d57600080fd5b50610476611089565b6040516104839190612479565b60405180910390f35b34801561049857600080fd5b506104a16110b3565b6040516104ae9190612258565b60405180910390f35b3480156104c357600080fd5b506104cc611145565b6040516104d99190612398565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190612313565b61114b565b604051610516919061236e565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190612554565b6111c2565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612313565b611225565b60405161057c919061236e565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190612406565b611248565b6040516105be96959493929190612594565b60405180910390f35b3480156105d357600080fd5b506105dc6112b1565b6040516105e99190612479565b60405180910390f35b6105fa6112d7565b005b34801561060857600080fd5b50610623600480360381019061061e91906124c0565b6113d0565b005b34801561063157600080fd5b5061064c600480360381019061064791906125f5565b61172f565b6040516106599190612398565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190612527565b6117b6565b005b34801561069757600080fd5b506106b260048036038101906106ad9190612527565b61183a565b6040516106bf919061236e565b60405180910390f35b6060600380546106d790612664565b80601f016020809104026020016040519081016040528092919081815260200182805461070390612664565b80156107505780601f1061072557610100808354040283529160200191610750565b820191906000526020600020905b81548152906001019060200180831161073357829003601f168201915b5050505050905090565b60008061076561185a565b9050610772818585611862565b600191505092915050565b6000600254905090565b60008061079261185a565b905061079f858285611a2d565b6107aa858585611ab9565b60019150509392505050565b60006107e3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661102d565b905060006107ef61077d565b82846107fb91906126c5565b610805919061274e565b905060008184610815919061277f565b90504781111561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085190612821565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161088090612872565b60006040518083038185875af1925050503d80600081146108bd576040519150601f19603f3d011682016040523d82523d6000602084013e6108c2565b606091505b5050905080610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd906128d3565b60405180910390fd5b6109103386611d3a565b61093c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d3a565b5050505050565b60006012905090565b60008061095761185a565b9050610978818585610969858961172f565b610973919061277f565b611862565b600191505092915050565b61098d3334611f11565b565b610997612071565b476109a061077d565b1015610a6c5760006109b061077d565b476109bb91906128f3565b905060003373ffffffffffffffffffffffffffffffffffffffff16826040516109e390612872565b60006040518083038185875af1925050503d8060008114610a20576040519150601f19603f3d011682016040523d82523d6000602084013e610a25565b606091505b5050905080610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090612999565b60405180910390fd5b50505b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600034905060006007546006548484610aad91906128f3565b610ab791906126c5565b610ac1919061274e565b90506000811115610af957610af8600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611f11565b5b7f052d30813a65f3273f4cea94635ebdfd627b56e8557f2d8cc75f3acdbdc40347828285604051610b2c939291906129b9565b60405180910390a16000831115610beb5760003273ffffffffffffffffffffffffffffffffffffffff1684604051610b6390612872565b60006040518083038185875af1925050503d8060008114610ba0576040519150601f19603f3d011682016040523d82523d6000602084013e610ba5565b606091505b5050905080610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be090612a3c565b60405180910390fd5b505b505050565b60065481565b610bfe612071565b8060068190555050565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90612aa8565b60405180910390fd5b60006007546006548385610ca891906128f3565b610cb291906126c5565b610cbc919061274e565b90506000828285610ccd91906128f3565b610cd791906128f3565b905047811115610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390612821565b60405180910390fd5b6000821115610d5257610d51600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f11565b5b8415610e8157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610dc257600080fd5b505af1158015610dd6573d6000803e3d6000fd5b5050505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87836040518363ffffffff1660e01b8152600401610e38929190612ac8565b6020604051808303816000875af1158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b9190612b06565b50610f2f565b60008673ffffffffffffffffffffffffffffffffffffffff1682604051610ea790612872565b60006040518083038185875af1925050503d8060008114610ee4576040519150601f19603f3d011682016040523d82523d6000602084013e610ee9565b606091505b5050905080610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490612b7f565b60405180910390fd5b505b6000831115610fe65760003273ffffffffffffffffffffffffffffffffffffffff1684604051610f5e90612872565b60006040518083038185875af1925050503d8060008114610f9b576040519150601f19603f3d011682016040523d82523d6000602084013e610fa0565b606091505b5050905080610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90612a3c565b60405180910390fd5b505b7fcbe5a8897f52aa2c1becf33171c906f4ee5ea7c9df02350210ff9fcdad49546a868583858760405161101d959493929190612b9f565b60405180910390a1505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61107d612071565b61108760006120ef565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110c290612664565b80601f01602080910402602001604051908101604052809291908181526020018280546110ee90612664565b801561113b5780601f106111105761010080835404028352916020019161113b565b820191906000526020600020905b81548152906001019060200180831161111e57829003601f168201915b5050505050905090565b60075481565b60008061115661185a565b90506000611164828661172f565b9050838110156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090612c64565b60405180910390fd5b6111b68286868403611862565b60019250505092915050565b6111ca612071565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008061123061185a565b905061123d818585611ab9565b600191505092915050565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060010154908060020154908060030154908060040154905086565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112df612071565b476112e861077d565b11156113ce576000476112f961077d565b61130391906128f3565b9050803411156113cc576000813461131b91906128f3565b905060003373ffffffffffffffffffffffffffffffffffffffff168260405161134390612872565b60006040518083038185875af1925050503d8060008114611380576040519150601f19603f3d011682016040523d82523d6000602084013e611385565b606091505b50509050806113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c090612999565b60405180910390fd5b50505b505b565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390612aa8565b60405180910390fd5b821561158b57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114cc57600080fd5b505af11580156114e0573d6000803e3d6000fd5b5050505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401611542929190612ac8565b6020604051808303816000875af1158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190612b06565b50611639565b60008473ffffffffffffffffffffffffffffffffffffffff16836040516115b190612872565b60006040518083038185875af1925050503d80600081146115ee576040519150601f19603f3d011682016040523d82523d6000602084013e6115f3565b606091505b5050905080611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e90612cd0565b60405180910390fd5b505b60008111156116f05760003273ffffffffffffffffffffffffffffffffffffffff168260405161166890612872565b60006040518083038185875af1925050503d80600081146116a5576040519150601f19603f3d011682016040523d82523d6000602084013e6116aa565b606091505b50509050806116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590612a3c565b60405180910390fd5b505b7f911db51ed2e298250d30776745397b1001763f5bf87e73dddcf540c7142989528483604051611721929190612ac8565b60405180910390a150505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117be612071565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590612d62565b60405180910390fd5b611837816120ef565b50565b600b6020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990612df4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990612e86565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a209190612398565b60405180910390a3505050565b6000611a39848461172f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ab35781811015611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90612ef2565b60405180910390fd5b611ab28484848403611862565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090612f84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613016565b60405180910390fd5b611ba48383836121b5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906130a8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd919061277f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d219190612398565b60405180910390a3611d348484846121ba565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da19061313a565b60405180910390fd5b611db6826000836121b5565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e33906131cc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611e9391906128f3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ef89190612398565b60405180910390a3611f0c836000846121ba565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7890613238565b60405180910390fd5b611f8d600083836121b5565b8060026000828254611f9f919061277f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff4919061277f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120599190612398565b60405180910390a361206d600083836121ba565b5050565b61207961185a565b73ffffffffffffffffffffffffffffffffffffffff16612097611089565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e4906132a4565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121f95780820151818401526020810190506121de565b83811115612208576000848401525b50505050565b6000601f19601f8301169050919050565b600061222a826121bf565b61223481856121ca565b93506122448185602086016121db565b61224d8161220e565b840191505092915050565b60006020820190508181036000830152612272818461221f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122aa8261227f565b9050919050565b6122ba8161229f565b81146122c557600080fd5b50565b6000813590506122d7816122b1565b92915050565b6000819050919050565b6122f0816122dd565b81146122fb57600080fd5b50565b60008135905061230d816122e7565b92915050565b6000806040838503121561232a5761232961227a565b5b6000612338858286016122c8565b9250506020612349858286016122fe565b9150509250929050565b60008115159050919050565b61236881612353565b82525050565b6000602082019050612383600083018461235f565b92915050565b612392816122dd565b82525050565b60006020820190506123ad6000830184612389565b92915050565b6000806000606084860312156123cc576123cb61227a565b5b60006123da868287016122c8565b93505060206123eb868287016122c8565b92505060406123fc868287016122fe565b9150509250925092565b60006020828403121561241c5761241b61227a565b5b600061242a848285016122fe565b91505092915050565b600060ff82169050919050565b61244981612433565b82525050565b60006020820190506124646000830184612440565b92915050565b6124738161229f565b82525050565b600060208201905061248e600083018461246a565b92915050565b61249d81612353565b81146124a857600080fd5b50565b6000813590506124ba81612494565b92915050565b600080600080608085870312156124da576124d961227a565b5b60006124e8878288016122c8565b94505060206124f9878288016124ab565b935050604061250a878288016122fe565b925050606061251b878288016122fe565b91505092959194509250565b60006020828403121561253d5761253c61227a565b5b600061254b848285016122c8565b91505092915050565b6000806040838503121561256b5761256a61227a565b5b6000612579858286016122c8565b925050602061258a858286016124ab565b9150509250929050565b600060c0820190506125a9600083018961246a565b6125b6602083018861235f565b6125c36040830187612389565b6125d06060830186612389565b6125dd6080830185612389565b6125ea60a0830184612389565b979650505050505050565b6000806040838503121561260c5761260b61227a565b5b600061261a858286016122c8565b925050602061262b858286016122c8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061267c57607f821691505b602082108114156126905761268f612635565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126d0826122dd565b91506126db836122dd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561271457612713612696565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612759826122dd565b9150612764836122dd565b9250826127745761277361271f565b5b828204905092915050565b600061278a826122dd565b9150612795836122dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127ca576127c9612696565b5b828201905092915050565b7f4e6f7420656e6f7567682062616c616e63650000000000000000000000000000600082015250565b600061280b6012836121ca565b9150612816826127d5565b602082019050919050565b6000602082019050818103600083015261283a816127fe565b9050919050565b600081905092915050565b50565b600061285c600083612841565b91506128678261284c565b600082019050919050565b600061287d8261284f565b9150819050919050565b7f4661696c656420746f20756e7374616b65000000000000000000000000000000600082015250565b60006128bd6011836121ca565b91506128c882612887565b602082019050919050565b600060208201905081810360008301526128ec816128b0565b9050919050565b60006128fe826122dd565b9150612909836122dd565b92508282101561291c5761291b612696565b5b828203905092915050565b7f4661696c656420746f20726566756e6420756e6e65636573736172792062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006129836024836121ca565b915061298e82612927565b604082019050919050565b600060208201905081810360008301526129b281612976565b9050919050565b60006060820190506129ce6000830186612389565b6129db6020830185612389565b6129e86040830184612389565b949350505050565b7f4661696c656420746f20726566756e6420666565000000000000000000000000600082015250565b6000612a266014836121ca565b9150612a31826129f0565b602082019050919050565b60006020820190508181036000830152612a5581612a19565b9050919050565b7f216d616e61676572000000000000000000000000000000000000000000000000600082015250565b6000612a926008836121ca565b9150612a9d82612a5c565b602082019050919050565b60006020820190508181036000830152612ac181612a85565b9050919050565b6000604082019050612add600083018561246a565b612aea6020830184612389565b9392505050565b600081519050612b0081612494565b92915050565b600060208284031215612b1c57612b1b61227a565b5b6000612b2a84828501612af1565b91505092915050565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000612b696012836121ca565b9150612b7482612b33565b602082019050919050565b60006020820190508181036000830152612b9881612b5c565b9050919050565b600060a082019050612bb4600083018861246a565b612bc16020830187612389565b612bce6040830186612389565b612bdb6060830185612389565b612be86080830184612389565b9695505050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c4e6025836121ca565b9150612c5982612bf2565b604082019050919050565b60006020820190508181036000830152612c7d81612c41565b9050919050565b7f4661696c656420746f20726566756e6400000000000000000000000000000000600082015250565b6000612cba6010836121ca565b9150612cc582612c84565b602082019050919050565b60006020820190508181036000830152612ce981612cad565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d4c6026836121ca565b9150612d5782612cf0565b604082019050919050565b60006020820190508181036000830152612d7b81612d3f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612dde6024836121ca565b9150612de982612d82565b604082019050919050565b60006020820190508181036000830152612e0d81612dd1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e706022836121ca565b9150612e7b82612e14565b604082019050919050565b60006020820190508181036000830152612e9f81612e63565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612edc601d836121ca565b9150612ee782612ea6565b602082019050919050565b60006020820190508181036000830152612f0b81612ecf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f6e6025836121ca565b9150612f7982612f12565b604082019050919050565b60006020820190508181036000830152612f9d81612f61565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006130006023836121ca565b915061300b82612fa4565b604082019050919050565b6000602082019050818103600083015261302f81612ff3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006130926026836121ca565b915061309d82613036565b604082019050919050565b600060208201905081810360008301526130c181613085565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006131246021836121ca565b915061312f826130c8565b604082019050919050565b6000602082019050818103600083015261315381613117565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006131b66022836121ca565b91506131c18261315a565b604082019050919050565b600060208201905081810360008301526131e5816131a9565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613222601f836121ca565b915061322d826131ec565b602082019050919050565b6000602082019050818103600083015261325181613215565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061328e6020836121ca565b915061329982613258565b602082019050919050565b600060208201905081810360008301526132bd81613281565b905091905056fea26469706673582212202256547bfb26aee6a2d714d374dad62eb29e767c3722d9d78d7496f99dee02b164736f6c634300080b0033