false
true
0

Contract Address Details

0x5ba19d656B65f1684cFea4Af428C23B9f3628F97

Token
AAG (AAG)
Creator
0x82fa94–ad0cd4 at 0x1a0384–1039c8
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
2,738 Transactions
Transfers
6 Transfers
Gas Used
174,926,807
Last Balance Update
25963233
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
AAGToken




Optimization enabled
false
Compiler version
v0.8.7+commit.e28d00a7




EVM Version
london




Verified at
2026-03-07T11:41:35.401763Z

Constructor Arguments

000000000000000000000000f536ab9e042d414c8e54bff40147f34f0926e2440000000000000000000000009accdb69d8757dd9ceb7f69e985cbca879c0ddf60000000000000000000000000000000000000000000000000000000000015180000000000000000000000000e91d7cebce484070fc70777cb04f7e2efae31db40000000000000000000000000000000000000000000000000000000000000001

Arg [0] (address) : 0xf536ab9e042d414c8e54bff40147f34f0926e244
Arg [1] (address) : 0x9accdb69d8757dd9ceb7f69e985cbca879c0ddf6
Arg [2] (uint256) : 86400
Arg [3] (address) : 0xe91d7cebce484070fc70777cb04f7e2efae31db4
Arg [4] (bool) : true

              

AAGToken.sol

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

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

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


interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

interface ILosslessController {
  function beforeTransfer(
    address sender,
    address recipient,
    uint256 amount
  ) external;

  function beforeTransferFrom(
    address msgSender,
    address sender,
    address recipient,
    uint256 amount
  ) external;

  function beforeApprove(
    address sender,
    address spender,
    uint256 amount
  ) external;

  function beforeIncreaseAllowance(
    address msgSender,
    address spender,
    uint256 addedValue
  ) external;

  function beforeDecreaseAllowance(
    address msgSender,
    address spender,
    uint256 subtractedValue
  ) external;

  function afterApprove(
    address sender,
    address spender,
    uint256 amount
  ) external;

  function afterTransfer(
    address sender,
    address recipient,
    uint256 amount
  ) external;

  function afterTransferFrom(
    address msgSender,
    address sender,
    address recipient,
    uint256 amount
  ) external;

  function afterIncreaseAllowance(
    address sender,
    address spender,
    uint256 addedValue
  ) external;

  function afterDecreaseAllowance(
    address sender,
    address spender,
    uint256 subtractedValue
  ) external;
}

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

  uint256 private _totalSupply;
  string private constant NAME = "AAG";
  string private constant SYMBOL = "AAG";

  address public recoveryAdmin;
  address private recoveryAdminCanditate;
  bytes32 private recoveryAdminKeyHash;
  address public admin;
  uint256 public timelockPeriod;
  uint256 public losslessTurnOffTimestamp;
  bool public isLosslessTurnOffProposed;
  bool public isLosslessOn = true;
  ILosslessController private lossless;

  event AdminChanged(address indexed previousAdmin, address indexed newAdmin);
  event RecoveryAdminChangeProposed(address indexed candidate);
  event RecoveryAdminChanged(address indexed previousAdmin, address indexed newAdmin);
  event LosslessTurnOffProposed(uint256 turnOffDate);
  event LosslessTurnedOff();
  event LosslessTurnedOn();

  uint256 private constant _TOTAL_SUPPLY = 1000000000e18; // Initial supply 1 000 000 000
  bool private initialPoolClaimed = false;

  constructor(
    address admin_,
    address recoveryAdmin_,
    uint256 timelockPeriod_,
    address lossless_,
    bool losslessOn
  ) {
    _mint(address(this), _TOTAL_SUPPLY);
    admin = admin_;
    recoveryAdmin = recoveryAdmin_;
    timelockPeriod = timelockPeriod_;
    isLosslessOn = losslessOn;
    lossless = ILosslessController(lossless_);
  }

  // AAG unlocked tokens claiming

  function claimTokens() public onlyRecoveryAdmin {
    require(initialPoolClaimed == false, "Already claimed");
    initialPoolClaimed = true;
    _transfer(address(this), admin, _TOTAL_SUPPLY);
  }

  // --- LOSSLESS modifiers ---

  modifier lssAprove(address spender, uint256 amount) {
    if (isLosslessOn) {
      lossless.beforeApprove(_msgSender(), spender, amount);
      _;
      lossless.afterApprove(_msgSender(), spender, amount);
    } else {
      _;
    }
  }

  modifier lssTransfer(address recipient, uint256 amount) {
    if (isLosslessOn) {
      lossless.beforeTransfer(_msgSender(), recipient, amount);
      _;
      lossless.afterTransfer(_msgSender(), recipient, amount);
    } else {
      _;
    }
  }

  modifier lssTransferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) {
    if (isLosslessOn) {
      lossless.beforeTransferFrom(_msgSender(), sender, recipient, amount);
      _;
      lossless.afterTransferFrom(_msgSender(), sender, recipient, amount);
    } else {
      _;
    }
  }

  modifier lssIncreaseAllowance(address spender, uint256 addedValue) {
    if (isLosslessOn) {
      lossless.beforeIncreaseAllowance(_msgSender(), spender, addedValue);
      _;
      lossless.afterIncreaseAllowance(_msgSender(), spender, addedValue);
    } else {
      _;
    }
  }

  modifier lssDecreaseAllowance(address spender, uint256 subtractedValue) {
    if (isLosslessOn) {
      lossless.beforeDecreaseAllowance(_msgSender(), spender, subtractedValue);
      _;
      lossless.afterDecreaseAllowance(_msgSender(), spender, subtractedValue);
    } else {
      _;
    }
  }

  modifier onlyRecoveryAdmin() {
    require(_msgSender() == recoveryAdmin, "ERC20: Must be recovery admin");
    _;
  }

  // --- LOSSLESS management ---

  function getAdmin() external view returns (address) {
    return admin;
  }

  function transferOutBlacklistedFunds(address[] calldata from) external {
    require(_msgSender() == address(lossless), "ERC20: Only lossless contract");
    for (uint256 i = 0; i < from.length; i++) {
      _transfer(from[i], address(lossless), balanceOf(from[i]));
    }
  }

  function setLosslessAdmin(address newAdmin) public onlyRecoveryAdmin {
    emit AdminChanged(admin, newAdmin);
    admin = newAdmin;
  }

  function transferRecoveryAdminOwnership(address candidate, bytes32 keyHash) public onlyRecoveryAdmin {
    recoveryAdminCanditate = candidate;
    recoveryAdminKeyHash = keyHash;
    emit RecoveryAdminChangeProposed(candidate);
  }

  function acceptRecoveryAdminOwnership(bytes memory key) external {
    require(_msgSender() == recoveryAdminCanditate, "ERC20: Must be canditate");
    require(keccak256(key) == recoveryAdminKeyHash, "ERC20: Invalid key");
    emit RecoveryAdminChanged(recoveryAdmin, recoveryAdminCanditate);
    recoveryAdmin = recoveryAdminCanditate;
  }

  function proposeLosslessTurnOff() public onlyRecoveryAdmin {
    losslessTurnOffTimestamp = block.timestamp + timelockPeriod;
    isLosslessTurnOffProposed = true;
    emit LosslessTurnOffProposed(losslessTurnOffTimestamp);
  }

  function executeLosslessTurnOff() public onlyRecoveryAdmin {
    require(isLosslessTurnOffProposed, "ERC20: TurnOff not proposed");
    require(losslessTurnOffTimestamp <= block.timestamp, "ERC20: Time lock in progress");
    isLosslessOn = false;
    isLosslessTurnOffProposed = false;
    emit LosslessTurnedOff();
  }

  function executeLosslessTurnOn() public onlyRecoveryAdmin {
    isLosslessTurnOffProposed = false;
    isLosslessOn = true;
    emit LosslessTurnedOn();
  }

  // --- ERC20 methods ---

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

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

  function decimals() public view virtual 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 recipient, uint256 amount) public virtual override lssTransfer(recipient, amount) returns (bool) {
    _transfer(_msgSender(), recipient, 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 lssAprove(spender, amount) returns (bool) {
    require((amount == 0) || (_allowances[_msgSender()][spender] == 0), "ERC20: Cannot change non zero allowance");
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) public virtual override lssTransferFrom(sender, recipient, amount) returns (bool) {
    _transfer(sender, recipient, amount);

    uint256 currentAllowance = _allowances[sender][_msgSender()];
    require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
    _approve(sender, _msgSender(), currentAllowance - amount);

    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) public virtual lssIncreaseAllowance(spender, addedValue) returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
    return true;
  }

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

    return true;
  }

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

    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
    _balances[sender] = senderBalance - amount;
    _balances[recipient] += amount;

    emit Transfer(sender, recipient, amount);
  }

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

    _totalSupply += amount;
    _balances[account] += amount;
    emit Transfer(address(0), account, 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);
  }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"london","compilationTarget":{"AAGToken.sol":"AAGToken"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"admin_","internalType":"address"},{"type":"address","name":"recoveryAdmin_","internalType":"address"},{"type":"uint256","name":"timelockPeriod_","internalType":"uint256"},{"type":"address","name":"lossless_","internalType":"address"},{"type":"bool","name":"losslessOn","internalType":"bool"}]},{"type":"event","name":"AdminChanged","inputs":[{"type":"address","name":"previousAdmin","internalType":"address","indexed":true},{"type":"address","name":"newAdmin","internalType":"address","indexed":true}],"anonymous":false},{"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":"LosslessTurnOffProposed","inputs":[{"type":"uint256","name":"turnOffDate","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"LosslessTurnedOff","inputs":[],"anonymous":false},{"type":"event","name":"LosslessTurnedOn","inputs":[],"anonymous":false},{"type":"event","name":"RecoveryAdminChangeProposed","inputs":[{"type":"address","name":"candidate","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RecoveryAdminChanged","inputs":[{"type":"address","name":"previousAdmin","internalType":"address","indexed":true},{"type":"address","name":"newAdmin","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":"function","stateMutability":"nonpayable","outputs":[],"name":"acceptRecoveryAdminOwnership","inputs":[{"type":"bytes","name":"key","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"admin","inputs":[]},{"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":"nonpayable","outputs":[],"name":"claimTokens","inputs":[]},{"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":"nonpayable","outputs":[],"name":"executeLosslessTurnOff","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"executeLosslessTurnOn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getAdmin","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":"isLosslessOn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isLosslessTurnOffProposed","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"losslessTurnOffTimestamp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"proposeLosslessTurnOff","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"recoveryAdmin","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setLosslessAdmin","inputs":[{"type":"address","name":"newAdmin","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"timelockPeriod","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":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOutBlacklistedFunds","inputs":[{"type":"address[]","name":"from","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferRecoveryAdminOwnership","inputs":[{"type":"address","name":"candidate","internalType":"address"},{"type":"bytes32","name":"keyHash","internalType":"bytes32"}]}]
              

Contract Creation Code

Verify & Publish
0x60806040526001600960016101000a81548160ff0219169083151502179055506000600960166101000a81548160ff0219169083151502179055503480156200004757600080fd5b50604051620037f5380380620037f583398181016040528101906200006d919062000310565b6200008b306b033b2e3c9fd0803ce80000006200017a60201b60201c565b84600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260078190555080600960016101000a81548160ff02191690831515021790555081600960026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505062000572565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e490620003d0565b60405180910390fd5b806002600082825462000201919062000420565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000258919062000420565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002bf9190620003f2565b60405180910390a35050565b600081519050620002dc8162000524565b92915050565b600081519050620002f3816200053e565b92915050565b6000815190506200030a8162000558565b92915050565b600080600080600060a086880312156200032f576200032e620004f6565b5b60006200033f88828901620002cb565b95505060206200035288828901620002cb565b94505060406200036588828901620002f9565b93505060606200037888828901620002cb565b92505060806200038b88828901620002e2565b9150509295509295909350565b6000620003a7601f836200040f565b9150620003b482620004fb565b602082019050919050565b620003ca81620004bd565b82525050565b60006020820190508181036000830152620003eb8162000398565b9050919050565b6000602082019050620004096000830184620003bf565b92915050565b600082825260208201905092915050565b60006200042d82620004bd565b91506200043a83620004bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004725762000471620004c7565b5b828201905092915050565b60006200048a826200049d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6200052f816200047d565b81146200053b57600080fd5b50565b620005498162000491565b81146200055557600080fd5b50565b6200056381620004bd565b81146200056f57600080fd5b50565b61327380620005826000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063b38fe95711610097578063d6e242b811610071578063d6e242b81461044f578063dd62ed3e14610459578063efab831c14610489578063f851a440146104a75761018e565b8063b38fe9571461040b578063b5c2287714610415578063ccfa214f146104315761018e565b806370a082311461032557806393310ffe14610355578063936af9111461037157806395d89b411461038d578063a457c2d7146103ab578063a9059cbb146103db5761018e565b8063313ce5671161014b5780635b8a194a116101255780635b8a194a146102c15780635f6529a3146102cb57806361086b00146102e95780636e9960c3146103075761018e565b8063313ce56714610269578063395093511461028757806348c54b9d146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff5780632baa3c9e1461022f5780632ecaf6751461024b575b600080fd5b61019b6104c5565b6040516101a89190612956565b60405180910390f35b6101cb60048036038101906101c6919061254c565b610502565b6040516101d8919061293b565b60405180910390f35b6101e9610827565b6040516101f69190612b58565b60405180910390f35b610219600480360381019061021491906124b9565b610831565b604051610226919061293b565b60405180910390f35b6102496004803603810190610244919061244c565b610b7f565b005b610253610cd6565b6040516102609190612b58565b60405180910390f35b610271610cdc565b60405161027e9190612b73565b60405180910390f35b6102a1600480360381019061029c919061254c565b610ce5565b6040516102ae919061293b565b60405180910390f35b6102bf610f84565b005b6102c96110c7565b005b6102d36111c2565b6040516102e091906128a4565b60405180910390f35b6102f16111e8565b6040516102fe9190612b58565b60405180910390f35b61030f6111ee565b60405161031c91906128a4565b60405180910390f35b61033f600480360381019061033a919061244c565b611218565b60405161034c9190612b58565b60405180910390f35b61036f600480360381019061036a919061250c565b611260565b005b61038b6004803603810190610386919061258c565b611386565b005b6103956114c6565b6040516103a29190612956565b60405180910390f35b6103c560048036038101906103c0919061254c565b611503565b6040516103d2919061293b565b60405180910390f35b6103f560048036038101906103f0919061254c565b611834565b604051610402919061293b565b60405180910390f35b6104136119b7565b005b61042f600480360381019061042a91906125d9565b611b46565b005b610439611d2c565b604051610446919061293b565b60405180910390f35b610457611d3f565b005b610473600480360381019061046e9190612479565b611e40565b6040516104809190612b58565b60405180910390f35b610491611ec7565b60405161049e919061293b565b60405180910390f35b6104af611eda565b6040516104bc91906128a4565b60405180910390f35b60606040518060400160405280600381526020017f4141470000000000000000000000000000000000000000000000000000000000815250905090565b60008282600960019054906101000a900460ff161561073757600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347abf3be610561611f00565b84846040518463ffffffff1660e01b815260040161058193929190612904565b600060405180830381600087803b15801561059b57600080fd5b505af11580156105af573d6000803e3d6000fd5b50505050600084148061064557506000600160006105cb611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067b90612a18565b60405180910390fd5b61069661068f611f00565b8686611f08565b60019250600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663900f66ef6106e0611f00565b84846040518463ffffffff1660e01b815260040161070093929190612904565b600060405180830381600087803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b5050505061081f565b60008414806107c9575060006001600061074f611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ff90612a18565b60405180910390fd5b61081a610813611f00565b8686611f08565b600192505b505092915050565b6000600254905090565b6000838383600960019054906101000a900460ff1615610a7c57600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379f5c69610891611f00565b8585856040518563ffffffff1660e01b81526004016108b394939291906128bf565b600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b505050506108f08787876120d3565b6000600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061093b611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290612a58565b60405180910390fd5b6109d8886109c7611f00565b88846109d39190612c56565b611f08565b6001945050600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a56e8adf610a23611f00565b8585856040518563ffffffff1660e01b8152600401610a4594939291906128bf565b600060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50505050610b75565b610a878787876120d3565b6000600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ad2611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990612a58565b60405180910390fd5b610b6f88610b5e611f00565b8884610b6a9190612c56565b611f08565b60019450505b5050509392505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bc0611f00565b73ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90612ad8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60006012905090565b60008282600960019054906101000a900460ff1615610ed757600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf5961bb610d44611f00565b84846040518463ffffffff1660e01b8152600401610d6493929190612904565b600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50505050610e36610da1611f00565b868660016000610daf611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e319190612c00565b611f08565b60019250600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334d01aa8610e80611f00565b84846040518463ffffffff1660e01b8152600401610ea093929190612904565b600060405180830381600087803b158015610eba57600080fd5b505af1158015610ece573d6000803e3d6000fd5b50505050610f7c565b610f77610ee2611f00565b868660016000610ef0611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f729190612c00565b611f08565b600192505b505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610fc5611f00565b73ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290612ad8565b60405180910390fd5b60001515600960169054906101000a900460ff16151514611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890612a38565b60405180910390fd5b6001600960166101000a81548160ff0219169083151502179055506110c530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce80000006120d3565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611108611f00565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590612ad8565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506001600960016101000a81548160ff0219169083151502179055507fa4a40bdd0a809720a61b44f1b3497ce7dad87741a0ba3b961c2e65e645060e7060405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112a1611f00565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90612ad8565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806005819055508173ffffffffffffffffffffffffffffffffffffffff167fc5666bfdfb79a4b0b4abdbc565d6e9937a263233b2b378c55132d34dc5784a3660405160405180910390a25050565b600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113c7611f00565b73ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490612978565b60405180910390fd5b60005b828290508110156114c1576114ae83838381811061144157611440612dd4565b5b9050602002016020810190611456919061244c565b600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114a986868681811061148f5761148e612dd4565b5b90506020020160208101906114a4919061244c565b611218565b6120d3565b80806114b990612d5c565b915050611420565b505050565b60606040518060400160405280600381526020017f4141470000000000000000000000000000000000000000000000000000000000815250905090565b60008282600960019054906101000a900460ff161561173e57600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568c75a9611562611f00565b84846040518463ffffffff1660e01b815260040161158293929190612904565b600060405180830381600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050506000600160006115c2611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690612b38565b60405180910390fd5b61169c61168a611f00565b8787846116979190612c56565b611f08565b6001935050600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ded1f4d06116e7611f00565b84846040518463ffffffff1660e01b815260040161170793929190612904565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505061182c565b60006001600061174c611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090612b38565b60405180910390fd5b611826611814611f00565b8787846118219190612c56565b611f08565b60019350505b505092915050565b60008282600960019054906101000a900460ff161561199857600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ffb811f611893611f00565b84846040518463ffffffff1660e01b81526004016118b393929190612904565b600060405180830381600087803b1580156118cd57600080fd5b505af11580156118e1573d6000803e3d6000fd5b505050506118f76118f0611f00565b86866120d3565b60019250600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f49062ca611941611f00565b84846040518463ffffffff1660e01b815260040161196193929190612904565b600060405180830381600087803b15801561197b57600080fd5b505af115801561198f573d6000803e3d6000fd5b505050506119af565b6119aa6119a3611f00565b86866120d3565b600192505b505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119f8611f00565b73ffffffffffffffffffffffffffffffffffffffff1614611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4590612ad8565b60405180910390fd5b600960009054906101000a900460ff16611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490612b18565b60405180910390fd5b426008541115611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad9906129d8565b60405180910390fd5b6000600960016101000a81548160ff0219169083151502179055506000600960006101000a81548160ff0219169083151502179055507f5b534e2716e5ad68b9f67521378f8199a7ceb9d3f6f354275dad33fe42cf710a60405160405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b87611f00565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490612af8565b60405180910390fd5b600554818051906020012014611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90612a78565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c7f382531621f02aefb4212478bba8871ffad078202bdbba87f3e21d639aebb60405160405180910390a3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960019054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d80611f00565b73ffffffffffffffffffffffffffffffffffffffff1614611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90612ad8565b60405180910390fd5b60075442611de49190612c00565b6008819055506001600960006101000a81548160ff0219169083151502179055507f88e0be0448355c71674462d3cb36342f0d085f7b43a1deab03052c95eb158709600854604051611e369190612b58565b60405180910390a1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90612ab8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf906129b8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c69190612b58565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213a90612a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90612998565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612230906129f8565b60405180910390fd5b81816122459190612c56565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d59190612c00565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123399190612b58565b60405180910390a350505050565b600061235a61235584612bb3565b612b8e565b90508281526020810184848401111561237657612375612e41565b5b612381848285612ce9565b509392505050565b600081359050612398816131f8565b92915050565b60008083601f8401126123b4576123b3612e37565b5b8235905067ffffffffffffffff8111156123d1576123d0612e32565b5b6020830191508360208202830111156123ed576123ec612e3c565b5b9250929050565b6000813590506124038161320f565b92915050565b600082601f83011261241e5761241d612e37565b5b813561242e848260208601612347565b91505092915050565b60008135905061244681613226565b92915050565b60006020828403121561246257612461612e4b565b5b600061247084828501612389565b91505092915050565b600080604083850312156124905761248f612e4b565b5b600061249e85828601612389565b92505060206124af85828601612389565b9150509250929050565b6000806000606084860312156124d2576124d1612e4b565b5b60006124e086828701612389565b93505060206124f186828701612389565b925050604061250286828701612437565b9150509250925092565b6000806040838503121561252357612522612e4b565b5b600061253185828601612389565b9250506020612542858286016123f4565b9150509250929050565b6000806040838503121561256357612562612e4b565b5b600061257185828601612389565b925050602061258285828601612437565b9150509250929050565b600080602083850312156125a3576125a2612e4b565b5b600083013567ffffffffffffffff8111156125c1576125c0612e46565b5b6125cd8582860161239e565b92509250509250929050565b6000602082840312156125ef576125ee612e4b565b5b600082013567ffffffffffffffff81111561260d5761260c612e46565b5b61261984828501612409565b91505092915050565b61262b81612c8a565b82525050565b61263a81612c9c565b82525050565b600061264b82612be4565b6126558185612bef565b9350612665818560208601612cf8565b61266e81612e50565b840191505092915050565b6000612686601d83612bef565b915061269182612e61565b602082019050919050565b60006126a9602383612bef565b91506126b482612e8a565b604082019050919050565b60006126cc602283612bef565b91506126d782612ed9565b604082019050919050565b60006126ef601c83612bef565b91506126fa82612f28565b602082019050919050565b6000612712602683612bef565b915061271d82612f51565b604082019050919050565b6000612735602783612bef565b915061274082612fa0565b604082019050919050565b6000612758600f83612bef565b915061276382612fef565b602082019050919050565b600061277b602883612bef565b915061278682613018565b604082019050919050565b600061279e601283612bef565b91506127a982613067565b602082019050919050565b60006127c1602583612bef565b91506127cc82613090565b604082019050919050565b60006127e4602483612bef565b91506127ef826130df565b604082019050919050565b6000612807601d83612bef565b91506128128261312e565b602082019050919050565b600061282a601883612bef565b915061283582613157565b602082019050919050565b600061284d601b83612bef565b915061285882613180565b602082019050919050565b6000612870602583612bef565b915061287b826131a9565b604082019050919050565b61288f81612cd2565b82525050565b61289e81612cdc565b82525050565b60006020820190506128b96000830184612622565b92915050565b60006080820190506128d46000830187612622565b6128e16020830186612622565b6128ee6040830185612622565b6128fb6060830184612886565b95945050505050565b60006060820190506129196000830186612622565b6129266020830185612622565b6129336040830184612886565b949350505050565b60006020820190506129506000830184612631565b92915050565b600060208201905081810360008301526129708184612640565b905092915050565b6000602082019050818103600083015261299181612679565b9050919050565b600060208201905081810360008301526129b18161269c565b9050919050565b600060208201905081810360008301526129d1816126bf565b9050919050565b600060208201905081810360008301526129f1816126e2565b9050919050565b60006020820190508181036000830152612a1181612705565b9050919050565b60006020820190508181036000830152612a3181612728565b9050919050565b60006020820190508181036000830152612a518161274b565b9050919050565b60006020820190508181036000830152612a718161276e565b9050919050565b60006020820190508181036000830152612a9181612791565b9050919050565b60006020820190508181036000830152612ab1816127b4565b9050919050565b60006020820190508181036000830152612ad1816127d7565b9050919050565b60006020820190508181036000830152612af1816127fa565b9050919050565b60006020820190508181036000830152612b118161281d565b9050919050565b60006020820190508181036000830152612b3181612840565b9050919050565b60006020820190508181036000830152612b5181612863565b9050919050565b6000602082019050612b6d6000830184612886565b92915050565b6000602082019050612b886000830184612895565b92915050565b6000612b98612ba9565b9050612ba48282612d2b565b919050565b6000604051905090565b600067ffffffffffffffff821115612bce57612bcd612e03565b5b612bd782612e50565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000612c0b82612cd2565b9150612c1683612cd2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c4b57612c4a612da5565b5b828201905092915050565b6000612c6182612cd2565b9150612c6c83612cd2565b925082821015612c7f57612c7e612da5565b5b828203905092915050565b6000612c9582612cb2565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612d16578082015181840152602081019050612cfb565b83811115612d25576000848401525b50505050565b612d3482612e50565b810181811067ffffffffffffffff82111715612d5357612d52612e03565b5b80604052505050565b6000612d6782612cd2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d9a57612d99612da5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a204f6e6c79206c6f73736c65737320636f6e7472616374000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2054696d65206c6f636b20696e2070726f677265737300000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2043616e6e6f74206368616e6765206e6f6e207a65726f20616c60008201527f6c6f77616e636500000000000000000000000000000000000000000000000000602082015250565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20496e76616c6964206b65790000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a204d757374206265207265636f766572792061646d696e000000600082015250565b7f45524332303a204d7573742062652063616e6469746174650000000000000000600082015250565b7f45524332303a205475726e4f6666206e6f742070726f706f7365640000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61320181612c8a565b811461320c57600080fd5b50565b61321881612ca8565b811461322357600080fd5b50565b61322f81612cd2565b811461323a57600080fd5b5056fea2646970667358221220a9aecefac499d12e94a2baa1a76b8434a502316da619fb32f2e481a0bc5cfb4164736f6c63430008070033000000000000000000000000f536ab9e042d414c8e54bff40147f34f0926e2440000000000000000000000009accdb69d8757dd9ceb7f69e985cbca879c0ddf60000000000000000000000000000000000000000000000000000000000015180000000000000000000000000e91d7cebce484070fc70777cb04f7e2efae31db40000000000000000000000000000000000000000000000000000000000000001

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063b38fe95711610097578063d6e242b811610071578063d6e242b81461044f578063dd62ed3e14610459578063efab831c14610489578063f851a440146104a75761018e565b8063b38fe9571461040b578063b5c2287714610415578063ccfa214f146104315761018e565b806370a082311461032557806393310ffe14610355578063936af9111461037157806395d89b411461038d578063a457c2d7146103ab578063a9059cbb146103db5761018e565b8063313ce5671161014b5780635b8a194a116101255780635b8a194a146102c15780635f6529a3146102cb57806361086b00146102e95780636e9960c3146103075761018e565b8063313ce56714610269578063395093511461028757806348c54b9d146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff5780632baa3c9e1461022f5780632ecaf6751461024b575b600080fd5b61019b6104c5565b6040516101a89190612956565b60405180910390f35b6101cb60048036038101906101c6919061254c565b610502565b6040516101d8919061293b565b60405180910390f35b6101e9610827565b6040516101f69190612b58565b60405180910390f35b610219600480360381019061021491906124b9565b610831565b604051610226919061293b565b60405180910390f35b6102496004803603810190610244919061244c565b610b7f565b005b610253610cd6565b6040516102609190612b58565b60405180910390f35b610271610cdc565b60405161027e9190612b73565b60405180910390f35b6102a1600480360381019061029c919061254c565b610ce5565b6040516102ae919061293b565b60405180910390f35b6102bf610f84565b005b6102c96110c7565b005b6102d36111c2565b6040516102e091906128a4565b60405180910390f35b6102f16111e8565b6040516102fe9190612b58565b60405180910390f35b61030f6111ee565b60405161031c91906128a4565b60405180910390f35b61033f600480360381019061033a919061244c565b611218565b60405161034c9190612b58565b60405180910390f35b61036f600480360381019061036a919061250c565b611260565b005b61038b6004803603810190610386919061258c565b611386565b005b6103956114c6565b6040516103a29190612956565b60405180910390f35b6103c560048036038101906103c0919061254c565b611503565b6040516103d2919061293b565b60405180910390f35b6103f560048036038101906103f0919061254c565b611834565b604051610402919061293b565b60405180910390f35b6104136119b7565b005b61042f600480360381019061042a91906125d9565b611b46565b005b610439611d2c565b604051610446919061293b565b60405180910390f35b610457611d3f565b005b610473600480360381019061046e9190612479565b611e40565b6040516104809190612b58565b60405180910390f35b610491611ec7565b60405161049e919061293b565b60405180910390f35b6104af611eda565b6040516104bc91906128a4565b60405180910390f35b60606040518060400160405280600381526020017f4141470000000000000000000000000000000000000000000000000000000000815250905090565b60008282600960019054906101000a900460ff161561073757600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347abf3be610561611f00565b84846040518463ffffffff1660e01b815260040161058193929190612904565b600060405180830381600087803b15801561059b57600080fd5b505af11580156105af573d6000803e3d6000fd5b50505050600084148061064557506000600160006105cb611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067b90612a18565b60405180910390fd5b61069661068f611f00565b8686611f08565b60019250600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663900f66ef6106e0611f00565b84846040518463ffffffff1660e01b815260040161070093929190612904565b600060405180830381600087803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b5050505061081f565b60008414806107c9575060006001600061074f611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ff90612a18565b60405180910390fd5b61081a610813611f00565b8686611f08565b600192505b505092915050565b6000600254905090565b6000838383600960019054906101000a900460ff1615610a7c57600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379f5c69610891611f00565b8585856040518563ffffffff1660e01b81526004016108b394939291906128bf565b600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b505050506108f08787876120d3565b6000600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061093b611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290612a58565b60405180910390fd5b6109d8886109c7611f00565b88846109d39190612c56565b611f08565b6001945050600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a56e8adf610a23611f00565b8585856040518563ffffffff1660e01b8152600401610a4594939291906128bf565b600060405180830381600087803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50505050610b75565b610a878787876120d3565b6000600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ad2611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990612a58565b60405180910390fd5b610b6f88610b5e611f00565b8884610b6a9190612c56565b611f08565b60019450505b5050509392505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bc0611f00565b73ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90612ad8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60006012905090565b60008282600960019054906101000a900460ff1615610ed757600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf5961bb610d44611f00565b84846040518463ffffffff1660e01b8152600401610d6493929190612904565b600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50505050610e36610da1611f00565b868660016000610daf611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e319190612c00565b611f08565b60019250600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334d01aa8610e80611f00565b84846040518463ffffffff1660e01b8152600401610ea093929190612904565b600060405180830381600087803b158015610eba57600080fd5b505af1158015610ece573d6000803e3d6000fd5b50505050610f7c565b610f77610ee2611f00565b868660016000610ef0611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f729190612c00565b611f08565b600192505b505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610fc5611f00565b73ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101290612ad8565b60405180910390fd5b60001515600960169054906101000a900460ff16151514611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890612a38565b60405180910390fd5b6001600960166101000a81548160ff0219169083151502179055506110c530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce80000006120d3565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611108611f00565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590612ad8565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506001600960016101000a81548160ff0219169083151502179055507fa4a40bdd0a809720a61b44f1b3497ce7dad87741a0ba3b961c2e65e645060e7060405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112a1611f00565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90612ad8565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806005819055508173ffffffffffffffffffffffffffffffffffffffff167fc5666bfdfb79a4b0b4abdbc565d6e9937a263233b2b378c55132d34dc5784a3660405160405180910390a25050565b600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113c7611f00565b73ffffffffffffffffffffffffffffffffffffffff161461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490612978565b60405180910390fd5b60005b828290508110156114c1576114ae83838381811061144157611440612dd4565b5b9050602002016020810190611456919061244c565b600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114a986868681811061148f5761148e612dd4565b5b90506020020160208101906114a4919061244c565b611218565b6120d3565b80806114b990612d5c565b915050611420565b505050565b60606040518060400160405280600381526020017f4141470000000000000000000000000000000000000000000000000000000000815250905090565b60008282600960019054906101000a900460ff161561173e57600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568c75a9611562611f00565b84846040518463ffffffff1660e01b815260040161158293929190612904565b600060405180830381600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050506000600160006115c2611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690612b38565b60405180910390fd5b61169c61168a611f00565b8787846116979190612c56565b611f08565b6001935050600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ded1f4d06116e7611f00565b84846040518463ffffffff1660e01b815260040161170793929190612904565b600060405180830381600087803b15801561172157600080fd5b505af1158015611735573d6000803e3d6000fd5b5050505061182c565b60006001600061174c611f00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090612b38565b60405180910390fd5b611826611814611f00565b8787846118219190612c56565b611f08565b60019350505b505092915050565b60008282600960019054906101000a900460ff161561199857600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ffb811f611893611f00565b84846040518463ffffffff1660e01b81526004016118b393929190612904565b600060405180830381600087803b1580156118cd57600080fd5b505af11580156118e1573d6000803e3d6000fd5b505050506118f76118f0611f00565b86866120d3565b60019250600960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f49062ca611941611f00565b84846040518463ffffffff1660e01b815260040161196193929190612904565b600060405180830381600087803b15801561197b57600080fd5b505af115801561198f573d6000803e3d6000fd5b505050506119af565b6119aa6119a3611f00565b86866120d3565b600192505b505092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119f8611f00565b73ffffffffffffffffffffffffffffffffffffffff1614611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4590612ad8565b60405180910390fd5b600960009054906101000a900460ff16611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490612b18565b60405180910390fd5b426008541115611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad9906129d8565b60405180910390fd5b6000600960016101000a81548160ff0219169083151502179055506000600960006101000a81548160ff0219169083151502179055507f5b534e2716e5ad68b9f67521378f8199a7ceb9d3f6f354275dad33fe42cf710a60405160405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b87611f00565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490612af8565b60405180910390fd5b600554818051906020012014611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90612a78565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c7f382531621f02aefb4212478bba8871ffad078202bdbba87f3e21d639aebb60405160405180910390a3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960019054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d80611f00565b73ffffffffffffffffffffffffffffffffffffffff1614611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd90612ad8565b60405180910390fd5b60075442611de49190612c00565b6008819055506001600960006101000a81548160ff0219169083151502179055507f88e0be0448355c71674462d3cb36342f0d085f7b43a1deab03052c95eb158709600854604051611e369190612b58565b60405180910390a1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600960009054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90612ab8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf906129b8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c69190612b58565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213a90612a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90612998565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612230906129f8565b60405180910390fd5b81816122459190612c56565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d59190612c00565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123399190612b58565b60405180910390a350505050565b600061235a61235584612bb3565b612b8e565b90508281526020810184848401111561237657612375612e41565b5b612381848285612ce9565b509392505050565b600081359050612398816131f8565b92915050565b60008083601f8401126123b4576123b3612e37565b5b8235905067ffffffffffffffff8111156123d1576123d0612e32565b5b6020830191508360208202830111156123ed576123ec612e3c565b5b9250929050565b6000813590506124038161320f565b92915050565b600082601f83011261241e5761241d612e37565b5b813561242e848260208601612347565b91505092915050565b60008135905061244681613226565b92915050565b60006020828403121561246257612461612e4b565b5b600061247084828501612389565b91505092915050565b600080604083850312156124905761248f612e4b565b5b600061249e85828601612389565b92505060206124af85828601612389565b9150509250929050565b6000806000606084860312156124d2576124d1612e4b565b5b60006124e086828701612389565b93505060206124f186828701612389565b925050604061250286828701612437565b9150509250925092565b6000806040838503121561252357612522612e4b565b5b600061253185828601612389565b9250506020612542858286016123f4565b9150509250929050565b6000806040838503121561256357612562612e4b565b5b600061257185828601612389565b925050602061258285828601612437565b9150509250929050565b600080602083850312156125a3576125a2612e4b565b5b600083013567ffffffffffffffff8111156125c1576125c0612e46565b5b6125cd8582860161239e565b92509250509250929050565b6000602082840312156125ef576125ee612e4b565b5b600082013567ffffffffffffffff81111561260d5761260c612e46565b5b61261984828501612409565b91505092915050565b61262b81612c8a565b82525050565b61263a81612c9c565b82525050565b600061264b82612be4565b6126558185612bef565b9350612665818560208601612cf8565b61266e81612e50565b840191505092915050565b6000612686601d83612bef565b915061269182612e61565b602082019050919050565b60006126a9602383612bef565b91506126b482612e8a565b604082019050919050565b60006126cc602283612bef565b91506126d782612ed9565b604082019050919050565b60006126ef601c83612bef565b91506126fa82612f28565b602082019050919050565b6000612712602683612bef565b915061271d82612f51565b604082019050919050565b6000612735602783612bef565b915061274082612fa0565b604082019050919050565b6000612758600f83612bef565b915061276382612fef565b602082019050919050565b600061277b602883612bef565b915061278682613018565b604082019050919050565b600061279e601283612bef565b91506127a982613067565b602082019050919050565b60006127c1602583612bef565b91506127cc82613090565b604082019050919050565b60006127e4602483612bef565b91506127ef826130df565b604082019050919050565b6000612807601d83612bef565b91506128128261312e565b602082019050919050565b600061282a601883612bef565b915061283582613157565b602082019050919050565b600061284d601b83612bef565b915061285882613180565b602082019050919050565b6000612870602583612bef565b915061287b826131a9565b604082019050919050565b61288f81612cd2565b82525050565b61289e81612cdc565b82525050565b60006020820190506128b96000830184612622565b92915050565b60006080820190506128d46000830187612622565b6128e16020830186612622565b6128ee6040830185612622565b6128fb6060830184612886565b95945050505050565b60006060820190506129196000830186612622565b6129266020830185612622565b6129336040830184612886565b949350505050565b60006020820190506129506000830184612631565b92915050565b600060208201905081810360008301526129708184612640565b905092915050565b6000602082019050818103600083015261299181612679565b9050919050565b600060208201905081810360008301526129b18161269c565b9050919050565b600060208201905081810360008301526129d1816126bf565b9050919050565b600060208201905081810360008301526129f1816126e2565b9050919050565b60006020820190508181036000830152612a1181612705565b9050919050565b60006020820190508181036000830152612a3181612728565b9050919050565b60006020820190508181036000830152612a518161274b565b9050919050565b60006020820190508181036000830152612a718161276e565b9050919050565b60006020820190508181036000830152612a9181612791565b9050919050565b60006020820190508181036000830152612ab1816127b4565b9050919050565b60006020820190508181036000830152612ad1816127d7565b9050919050565b60006020820190508181036000830152612af1816127fa565b9050919050565b60006020820190508181036000830152612b118161281d565b9050919050565b60006020820190508181036000830152612b3181612840565b9050919050565b60006020820190508181036000830152612b5181612863565b9050919050565b6000602082019050612b6d6000830184612886565b92915050565b6000602082019050612b886000830184612895565b92915050565b6000612b98612ba9565b9050612ba48282612d2b565b919050565b6000604051905090565b600067ffffffffffffffff821115612bce57612bcd612e03565b5b612bd782612e50565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000612c0b82612cd2565b9150612c1683612cd2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c4b57612c4a612da5565b5b828201905092915050565b6000612c6182612cd2565b9150612c6c83612cd2565b925082821015612c7f57612c7e612da5565b5b828203905092915050565b6000612c9582612cb2565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612d16578082015181840152602081019050612cfb565b83811115612d25576000848401525b50505050565b612d3482612e50565b810181811067ffffffffffffffff82111715612d5357612d52612e03565b5b80604052505050565b6000612d6782612cd2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d9a57612d99612da5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a204f6e6c79206c6f73736c65737320636f6e7472616374000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2054696d65206c6f636b20696e2070726f677265737300000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2043616e6e6f74206368616e6765206e6f6e207a65726f20616c60008201527f6c6f77616e636500000000000000000000000000000000000000000000000000602082015250565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20496e76616c6964206b65790000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a204d757374206265207265636f766572792061646d696e000000600082015250565b7f45524332303a204d7573742062652063616e6469746174650000000000000000600082015250565b7f45524332303a205475726e4f6666206e6f742070726f706f7365640000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61320181612c8a565b811461320c57600080fd5b50565b61321881612ca8565b811461322357600080fd5b50565b61322f81612cd2565b811461323a57600080fd5b5056fea2646970667358221220a9aecefac499d12e94a2baa1a76b8434a502316da619fb32f2e481a0bc5cfb4164736f6c63430008070033