Address Details
contract

0x80D2a1Efe9A9C0CB25b3e5ae51c693FE0A69228E

Contract Name
NFTKToken
Creator
0x0ca82c–81b919 at 0x37c8cc–5476a5
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
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
15157646
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
NFTKToken




Optimization enabled
false
Compiler version
v0.8.2+commit.661d1103




EVM Version
istanbul




Verified at
2022-09-17T22:22:31.644657Z

BIP20.sol

pragma solidity 0.8.2;

interface BIP20 {
  function totalSupply() external view returns (uint24);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint24);
  function transfer(address recipient, uint24 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint24);
  function approve(address spender, uint24 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint24 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint24 value);
  event Approval(address indexed owner, address indexed spender, uint24 value);
} 

contract Context {
  constructor ()  { }

  function _msgSender() internal view returns (address ) {
    return msg.sender;
  }

  function _msgData() internal view returns (bytes memory) {
    this; 
    return msg.data;
  }
}

library SafeMath {
  function add(uint24 a, uint24 b) internal pure returns (uint24) {
    uint24 c = a + b;
    require(c >= a, "SafeMath: addition overflow");
    return c;
  }
  function sub(uint24 a, uint24 b) internal pure returns (uint24) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  function sub(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) {
    require(b <= a, errorMessage);
    uint24 c = a - b;

    return c;
  }
  function mul(uint24 a, uint24 b) internal pure returns (uint24) {
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

    uint24 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  function div(uint24 a, uint24 b) internal pure returns (uint24) {
    return div(a, b, "SafeMath: division by zero");
  }

  function div(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, errorMessage);
    uint24 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  function mod(uint24 a, uint24 b) internal pure returns (uint24) {
    return mod(a, b, "SafeMath: modulo by zero");
  }

  function mod(uint24 a, uint24 b, string memory errorMessage) internal pure returns (uint24) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

contract Ownable is Context {
  address private _owner;

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

  constructor ()  {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

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

  modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  function renounceOwnership() public onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

contract NFTKToken is Context, BIP20, Ownable {
  using SafeMath for uint24;

  mapping (address => uint24) private _balances;

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

  uint24 private _totalSupply;
  uint8 private _decimals;
  string private _symbol;
  string private _name;
  string private _ico;
  string private _baseURI;
 
  constructor() public {
    _name = "NFTicket Pay Token";
    _symbol = "NFTK";
    _decimals = 0;
    _ico = "QmPNAJEacA9FRnkirZxqm1xav4QizRhrNPNuSiX9yS3Vp2";
    _totalSupply = 400000;
    _balances[msg.sender] = _totalSupply;
    _baseURI="https://ipfs.io/ipfs/";
    emit Transfer(address(0), msg.sender, _totalSupply);
  }

  function setBaseURI(string calldata _uri) external  returns (bool) {
    _baseURI = _uri;
    return true;
  }

  function getOwner() override external view returns (address) {
    return owner();
  }

  function getIconCID() external view returns (string memory) {
    return _ico;
  }
  function getBaseURI() external view returns (string memory) {
    return _baseURI;
  }

  function decimals() override external view returns (uint8) {
    return _decimals;
  }
  function symbol() override external view returns (string memory) {
    return _symbol;
  }
  function ico() external view returns (string memory) {
    return string(abi.encodePacked(_baseURI, _ico));
  }
  function icon() external view returns (string memory) {
    return string(abi.encodePacked(_baseURI, _ico));
  }

  /**
  * @dev Returns the token name.
  */
  function name() override external view returns (string memory) {
    return _name;
  }

  function totalSupply() override external view returns (uint24) {
    return _totalSupply;
  }

  function balanceOf(address account) override external view returns (uint24) {
    return _balances[account];
  }

  function transfer(address recipient, uint24 amount) override external returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  function allowance(address owner, address spender) override external view returns (uint24) {
    return _allowances[owner][spender];
  }
  function approve(address spender, uint24 amount) override external returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(address sender, address recipient, uint24 amount) override external returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "NFTicket: transfer amount exceeds allowance"));
    return true;
  }

  function increaseAllowance(address spender, uint24 addedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  function decreaseAllowance(address spender, uint24 subtractedValue) public returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "NFTicket: decreased allowance below zero"));
    return true;
  }

  function mint(uint24 amount) public onlyOwner returns (bool) {
    _mint(_msgSender(), amount);
    return true;
  }

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

    _balances[sender] = _balances[sender].sub(amount, "NFTicket: transfer amount exceeds balance");
    _balances[recipient] = _balances[recipient].add(amount);
    emit Transfer(sender, recipient, amount);
  }

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

    _totalSupply = _totalSupply.add(amount);
    _balances[account] = _balances[account].add(amount);
    emit Transfer(address(0), account, amount);
  }

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

    _balances[account] = _balances[account].sub(amount, "NFTicket: burn amount exceeds balance");
    _totalSupply = _totalSupply.sub(amount);
    emit Transfer(account, address(0), amount);
  }

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

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

  function _burnFrom(address account, uint24 amount) internal {
    _burn(account, amount);
    _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "NFTicket: burn amount exceeds allowance"));
  }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint24","name":"value","internalType":"uint24","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":"uint24","name":"value","internalType":"uint24","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"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":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"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":"uint24","name":"subtractedValue","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getBaseURI","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getIconCID","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"ico","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"icon","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint24","name":"addedValue","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"uint24","name":"amount","internalType":"uint24"}]},{"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":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setBaseURI","inputs":[{"type":"string","name":"_uri","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint24","name":"amount","internalType":"uint24"}]},{"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":"uint24","name":"amount","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
            

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b857806395d89b411161007c57806395d89b4114610356578063c557b98514610374578063dd62ed3e14610392578063eaef4d8f146103c2578063f2fde38b146103f2578063f4de1e971461040e57610137565b806370a08231146102c2578063714c5398146102f2578063715018a614610310578063893d20e81461031a5780638da5cb5b1461033857610137565b80634f61fd2a116100ff5780634f61fd2a146101e457806355f804b3146102145780635b195c86146102445780635d45220114610274578063601b79211461029257610137565b806306fdde031461013c578063176cd7101461015a57806318160ddd1461018a578063188743a8146101a8578063313ce567146101c6575b600080fd5b61014461043e565b6040516101519190611b55565b60405180910390f35b610174600480360381019061016f91906117f6565b6104d0565b6040516101819190611b3a565b60405180910390f35b6101926105bd565b60405161019f9190611c77565b60405180910390f35b6101b06105d6565b6040516101bd9190611b55565b60405180910390f35b6101ce610668565b6040516101db9190611c92565b60405180910390f35b6101fe60048036038101906101f99190611845565b61067d565b60405161020b9190611b3a565b60405180910390f35b61022e60048036038101906102299190611881565b61075e565b60405161023b9190611b3a565b60405180910390f35b61025e60048036038101906102599190611845565b61077c565b60405161026b9190611b3a565b60405180910390f35b61027c61079a565b6040516102899190611b55565b60405180910390f35b6102ac60048036038101906102a79190611845565b6107c5565b6040516102b99190611b3a565b60405180910390f35b6102dc60048036038101906102d79190611791565b6107e3565b6040516102e99190611c77565b60405180910390f35b6102fa61083b565b6040516103079190611b55565b60405180910390f35b6103186108cd565b005b610322610a20565b60405161032f9190611b1f565b60405180910390f35b610340610a2f565b60405161034d9190611b1f565b60405180910390f35b61035e610a58565b60405161036b9190611b55565b60405180910390f35b61037c610aea565b6040516103899190611b55565b60405180910390f35b6103ac60048036038101906103a791906117ba565b610b15565b6040516103b99190611c77565b60405180910390f35b6103dc60048036038101906103d791906118c6565b610bab565b6040516103e99190611b3a565b60405180910390f35b61040c60048036038101906104079190611791565b610c5c565b005b61042860048036038101906104239190611845565b610cfd565b6040516104359190611b3a565b60405180910390f35b60606005805461044d90611de3565b80601f016020809104026020016040519081016040528092919081815260200182805461047990611de3565b80156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b5050505050905090565b60006104dd848484610dc4565b6105b2846104e96110aa565b6105ad856040518060600160405280602b8152602001612107602b9139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061054f6110aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166110b29092919063ffffffff16565b611120565b600190509392505050565b6000600360009054906101000a900462ffffff16905090565b6060600680546105e590611de3565b80601f016020809104026020016040519081016040528092919081815260200182805461061190611de3565b801561065e5780601f106106335761010080835404028352916020019161065e565b820191906000526020600020905b81548152906001019060200180831161064157829003601f168201915b5050505050905090565b600060038054906101000a900460ff16905090565b600061075461068a6110aa565b8461074f856040518060600160405280602881526020016120df60289139600260006106b46110aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166110b29092919063ffffffff16565b611120565b6001905092915050565b600082826007919061077192919061167a565b506001905092915050565b60006107906107896110aa565b8484610dc4565b6001905092915050565b6060600760066040516020016107b1929190611afb565b604051602081830303815290604052905090565b60006107d96107d26110aa565b8484611120565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff169050919050565b60606007805461084a90611de3565b80601f016020809104026020016040519081016040528092919081815260200182805461087690611de3565b80156108c35780601f10610898576101008083540402835291602001916108c3565b820191906000526020600020905b8154815290600101906020018083116108a657829003601f168201915b5050505050905090565b6108d56110aa565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990611c37565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610a2a610a2f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a6790611de3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9390611de3565b8015610ae05780601f10610ab557610100808354040283529160200191610ae0565b820191906000526020600020905b815481529060010190602001808311610ac357829003601f168201915b5050505050905090565b606060076006604051602001610b01929190611afb565b604051602081830303815290604052905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff16905092915050565b6000610bb56110aa565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990611c37565b60405180910390fd5b610c53610c4d6110aa565b83611303565b60019050919050565b610c646110aa565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890611c37565b60405180910390fd5b610cfa816114e5565b50565b6000610dba610d0a6110aa565b84610db58560026000610d1b6110aa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b611120565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90611bf7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90611c57565b60405180910390fd5b610f248160405180606001604052806029815260200161213260299139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff166110b29092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff160217905550610fe581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf8677938360405161109d9190611c77565b60405180910390a3505050565b600033905090565b60008362ffffff168362ffffff1611158290611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb9190611b55565b60405180910390fd5b50600083856111139190611d22565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790611bb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790611bd7565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3ba96ffca58a5c0843f7fa57ac208298b3b86e7feed3d33a9f706270c2626e9836040516112f69190611c77565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a90611c17565b60405180910390fd5b61139c81600360009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b600360006101000a81548162ffffff021916908362ffffff16021790555061142081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900462ffffff1662ffffff1661161290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548162ffffff021916908362ffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f4c3f23e06500a14887485511327c0d579fbccac302d5839c043bcc62bf867793836040516114d99190611c77565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90611b77565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846116219190611ce9565b90508362ffffff168162ffffff161015611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790611b97565b60405180910390fd5b8091505092915050565b82805461168690611de3565b90600052602060002090601f0160209004810192826116a857600085556116ef565b82601f106116c157803560ff19168380011785556116ef565b828001600101855582156116ef579182015b828111156116ee5782358255916020019190600101906116d3565b5b5090506116fc9190611700565b5090565b5b80821115611719576000816000905550600101611701565b5090565b60008135905061172c816120b0565b92915050565b60008083601f84011261174457600080fd5b8235905067ffffffffffffffff81111561175d57600080fd5b60208301915083600182028301111561177557600080fd5b9250929050565b60008135905061178b816120c7565b92915050565b6000602082840312156117a357600080fd5b60006117b18482850161171d565b91505092915050565b600080604083850312156117cd57600080fd5b60006117db8582860161171d565b92505060206117ec8582860161171d565b9150509250929050565b60008060006060848603121561180b57600080fd5b60006118198682870161171d565b935050602061182a8682870161171d565b925050604061183b8682870161177c565b9150509250925092565b6000806040838503121561185857600080fd5b60006118668582860161171d565b92505060206118778582860161177c565b9150509250929050565b6000806020838503121561189457600080fd5b600083013567ffffffffffffffff8111156118ae57600080fd5b6118ba85828601611732565b92509250509250929050565b6000602082840312156118d857600080fd5b60006118e68482850161177c565b91505092915050565b6118f881611d56565b82525050565b61190781611d68565b82525050565b600061191882611cc2565b6119228185611ccd565b9350611932818560208601611db0565b61193b81611e73565b840191505092915050565b6000815461195381611de3565b61195d8186611cde565b945060018216600081146119785760018114611989576119bc565b60ff198316865281860193506119bc565b61199285611cad565b60005b838110156119b457815481890152600182019150602081019050611995565b838801955050505b50505092915050565b60006119d2602683611ccd565b91506119dd82611e84565b604082019050919050565b60006119f5601b83611ccd565b9150611a0082611ed3565b602082019050919050565b6000611a18602783611ccd565b9150611a2382611efc565b604082019050919050565b6000611a3b602583611ccd565b9150611a4682611f4b565b604082019050919050565b6000611a5e602883611ccd565b9150611a6982611f9a565b604082019050919050565b6000611a81602283611ccd565b9150611a8c82611fe9565b604082019050919050565b6000611aa4602083611ccd565b9150611aaf82612038565b602082019050919050565b6000611ac7602683611ccd565b9150611ad282612061565b604082019050919050565b611ae681611d94565b82525050565b611af581611da3565b82525050565b6000611b078285611946565b9150611b138284611946565b91508190509392505050565b6000602082019050611b3460008301846118ef565b92915050565b6000602082019050611b4f60008301846118fe565b92915050565b60006020820190508181036000830152611b6f818461190d565b905092915050565b60006020820190508181036000830152611b90816119c5565b9050919050565b60006020820190508181036000830152611bb0816119e8565b9050919050565b60006020820190508181036000830152611bd081611a0b565b9050919050565b60006020820190508181036000830152611bf081611a2e565b9050919050565b60006020820190508181036000830152611c1081611a51565b9050919050565b60006020820190508181036000830152611c3081611a74565b9050919050565b60006020820190508181036000830152611c5081611a97565b9050919050565b60006020820190508181036000830152611c7081611aba565b9050919050565b6000602082019050611c8c6000830184611add565b92915050565b6000602082019050611ca76000830184611aec565b92915050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611cf482611d94565b9150611cff83611d94565b92508262ffffff03821115611d1757611d16611e15565b5b828201905092915050565b6000611d2d82611d94565b9150611d3883611d94565b925082821015611d4b57611d4a611e15565b5b828203905092915050565b6000611d6182611d74565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b600060ff82169050919050565b60005b83811015611dce578082015181840152602081019050611db3565b83811115611ddd576000848401525b50505050565b60006002820490506001821680611dfb57607f821691505b60208210811415611e0f57611e0e611e44565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4e465469636b65743a20617070726f76652066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a20617070726f766520746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a207472616e736665722066726f6d20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4e465469636b65743a206d696e7420746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e465469636b65743a207472616e7366657220746f20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6120b981611d56565b81146120c457600080fd5b50565b6120d081611d94565b81146120db57600080fd5b5056fe4e465469636b65743a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4e465469636b65743a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654e465469636b65743a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212204a37c4361e97ade24846a6a1bf3e7f0e7bb64fce94c9d6b1aabf6fc31a6378db64736f6c63430008020033