Contract 0x3827dc9e48b3691b171bf2f2c6bc3cab8218acf6 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdfb05ab355c61ba7d79fc2e800966d4b67f61b2311fea246a201578edaf94727Publish Verifica...146855222022-05-14 13:07:567 days 18 hrs ago0xa48c718ae6de6599c5a46fd6cabff54def39473a IN  0x3827dc9e48b3691b171bf2f2c6bc3cab8218acf60 AVAX0.002760615 27.5
0x0a19a79753c9b6eb41bd4455d6187dc03632b53d054f84a92e674cf9145e18fa0x60806040146849362022-05-14 12:48:217 days 19 hrs ago0xa48c718ae6de6599c5a46fd6cabff54def39473a IN  Create: Verification0 AVAX0.0485325435
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Verification

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2022-05-14
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

contract Verification {
  address private _owner;
  address private signer;
  IERC20 private feeToken;
  uint private feeAmount;

  struct VerifiedPassport {
    uint expiration;
    bytes32 countryAndDocNumberHash;
  }

  struct PersonalDetails {
    bool over18;
    bool over21;
    uint countryCode;
  }

  mapping(address => VerifiedPassport) private accounts;
  mapping(address => PersonalDetails) private personalData;
  mapping(bytes32 => address) private idHashToAccount;
  mapping(address => uint) private hasPaidFee;

  event FeePaid(address indexed account);
  event VerificationUpdated(address indexed account, uint256 expiration);
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  event FeeTokenChanged(address indexed previousFeeToken, address indexed newFeeToken);
  event FeeAmountChanged(uint previousFeeAmount, uint newFeeAmount);
  event IsOver18(address indexed account);
  event IsOver21(address indexed account);
  event CountryOfOrigin(address indexed account, uint countryCode);

  constructor(address _signer, address _feeToken, uint _feeAmount) {
    require(_signer != address(0), "Signer must not be zero address");
    require(_feeToken != address(0), "Fee token must not be zero address");
    _transferOwnership(msg.sender);
    signer = _signer;
    feeToken = IERC20(_feeToken);
    feeAmount = _feeAmount;
  }

  function getFeeToken() external view returns (address) {
    return address(feeToken);
  }

  function getFeeAmount() external view returns (uint) {
    return feeAmount;
  }

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

  function payFeeFor(address account) public {
    emit FeePaid(account);
    hasPaidFee[account] = block.number;
    bool received = feeToken.transferFrom(msg.sender, address(this), feeAmount);
    require(received, "Fee transfer failed");
  }

  function payFee() external {
    payFeeFor(msg.sender);
  }

  function unsetPaidFee(address account) external onlyOwner {
    delete hasPaidFee[account];
  }

  function feePaidFor(address account) external view returns (uint) {
    return hasPaidFee[account];
  }

  function publishVerification(
    uint256 expiration,
    bytes32 countryAndDocNumberHash,
    bytes calldata signature
  ) external {
    // Signing server will only provide signature if fee has been paid,
    //  not necessary to require it here
    delete hasPaidFee[msg.sender];
    // Recreate hash as built by the client
    bytes32 hash = keccak256(abi.encode(msg.sender, expiration, countryAndDocNumberHash));
    (bytes32 r, bytes32 s, uint8 v) = splitSignature(signature);
    bytes32 ethSignedHash = keccak256(
      abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

    address sigAddr = ecrecover(ethSignedHash, v, r, s);
    require(sigAddr == signer, "Invalid Signature");

    // Revoke verification for any other account that uses
    //  the same document number/country
    //  e.g. for case of stolen keys
    if(idHashToAccount[countryAndDocNumberHash] != address(0x0)) {
      _revokeVerification(idHashToAccount[countryAndDocNumberHash]);
    }
    // Update account state
    idHashToAccount[countryAndDocNumberHash] = msg.sender;
    accounts[msg.sender] = VerifiedPassport(expiration, countryAndDocNumberHash);
    emit VerificationUpdated(msg.sender, expiration);
  }

  function revokeVerification() external {
    require(accounts[msg.sender].expiration > 0, "Account not verified");
    _revokeVerification(msg.sender);
  }

  function revokeVerificationOf(address account) external onlyOwner {
    require(accounts[account].expiration > 0, "Account not verified");
    _revokeVerification(account);
  }

  function _revokeVerification(address account) internal {
    // Do not need to delete from idHashToAccount since that data is
    //  not used for determining account status
    delete accounts[account];
    // Revoking the verification also redacts the personal data
    delete personalData[account];
    emit VerificationUpdated(account, 0);
  }

  function addressActive(address toCheck) public view returns (bool) {
    return accounts[toCheck].expiration > block.timestamp;
  }

  function addressExpiration(address toCheck) external view returns (uint) {
    return accounts[toCheck].expiration;
  }

  function addressIdHash(address toCheck) external view returns(bytes32) {
    return accounts[toCheck].countryAndDocNumberHash;
  }

  function publishPersonalData(
    bool over18,
    bytes calldata over18Signature,
    bool over21,
    bytes calldata over21Signature,
    uint countryCode,
    bytes calldata countrySignature
  ) external {
    require(addressActive(msg.sender), "Account must be active");
    if(over18Signature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, over18 ? "over18" : "notOver18"));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(over18Signature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].over18 = over18;
      if(over18) {
        emit IsOver18(msg.sender);
      }
    }
    if(over21Signature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, over21 ? "over21" : "notOver21"));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(over21Signature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].over21 = over21;
      if(over21) {
        emit IsOver21(msg.sender);
      }
    }
    if(countrySignature.length == 65) {
      bytes32 hash = keccak256(abi.encode(msg.sender, countryCode));
      (bytes32 r, bytes32 s, uint8 v) = splitSignature(countrySignature);
      bytes32 ethSignedHash = keccak256(
        abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));

      address sigAddr = ecrecover(ethSignedHash, v, r, s);
      require(sigAddr == signer, "Invalid Signature");
      personalData[msg.sender].countryCode = countryCode;
      emit CountryOfOrigin(msg.sender, countryCode);
    }
  }

  function redactPersonalData() external {
    delete personalData[msg.sender];
  }

  function isOver18(address toCheck) external view returns (bool) {
    return personalData[toCheck].over18;
  }

  function isOver21(address toCheck) external view returns (bool) {
    return personalData[toCheck].over21;
  }

  function getCountryCode(address toCheck) external view returns (uint) {
    return personalData[toCheck].countryCode;
  }

  function setSigner(address newSigner) external onlyOwner {
    require(newSigner != address(0), "Signer cannot be zero address");
    signer = newSigner;
  }

  function setFeeToken(address newFeeToken) external onlyOwner {
    require(newFeeToken != address(0), "Fee Token cannot be zero address");
    address oldFeeToken = address(feeToken);
    feeToken = IERC20(newFeeToken);
    emit FeeTokenChanged(oldFeeToken, newFeeToken);
  }

  function setFeeAmount(uint newFeeAmount) external onlyOwner {
    uint oldFeeAmount = feeAmount;
    feeAmount = newFeeAmount;
    emit FeeAmountChanged(oldFeeAmount, newFeeAmount);
  }

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

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

  function transferFeeToken(address recipient, uint amount) external onlyOwner {
    bool sent = feeToken.transfer(recipient, amount);
    require(sent, "Fee transfer failed");
  }

  modifier onlyOwner() {
    require(owner() == msg.sender, "Ownable: caller is not the owner");
    _;
  }

  // From https://solidity-by-example.org/signature/
  function splitSignature(bytes memory sig) internal pure
    returns (bytes32 r, bytes32 s, uint8 v)
  {
    require(sig.length == 65, "invalid signature length");
    assembly {
        // first 32 bytes, after the length prefix
        r := mload(add(sig, 32))
        // second 32 bytes
        s := mload(add(sig, 64))
        // final byte (first byte of the next 32 bytes)
        v := byte(0, mload(add(sig, 96)))
    }
  }

}

interface IERC20 {
  function totalSupply() external view returns (uint);
  function balanceOf(address account) external view returns (uint);
  function transfer(address recipient, uint amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint);
  function approve(address spender, uint amount) external returns (bool);
  function transferFrom(
    address sender,
    address recipient,
    uint amount
  ) external returns (bool);

  event Transfer(address indexed from, address indexed to, uint value);
  event Approval(address indexed owner, address indexed spender, uint value);
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_feeToken","type":"address"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"countryCode","type":"uint256"}],"name":"CountryOfOrigin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousFeeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFeeAmount","type":"uint256"}],"name":"FeeAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"FeePaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousFeeToken","type":"address"},{"indexed":true,"internalType":"address","name":"newFeeToken","type":"address"}],"name":"FeeTokenChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IsOver18","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IsOver21","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"VerificationUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressExpiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"addressIdHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feePaidFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"getCountryCode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isOver18","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isOver21","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"payFeeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"over18","type":"bool"},{"internalType":"bytes","name":"over18Signature","type":"bytes"},{"internalType":"bool","name":"over21","type":"bool"},{"internalType":"bytes","name":"over21Signature","type":"bytes"},{"internalType":"uint256","name":"countryCode","type":"uint256"},{"internalType":"bytes","name":"countrySignature","type":"bytes"}],"name":"publishPersonalData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"countryAndDocNumberHash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"publishVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redactPersonalData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeVerificationOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeeAmount","type":"uint256"}],"name":"setFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeToken","type":"address"}],"name":"setFeeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFeeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unsetPaidFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200184b3803806200184b8339810160408190526200003491620001a4565b6001600160a01b038316620000905760405162461bcd60e51b815260206004820152601f60248201527f5369676e6572206d757374206e6f74206265207a65726f20616464726573730060448201526064015b60405180910390fd5b6001600160a01b038216620000f35760405162461bcd60e51b815260206004820152602260248201527f46656520746f6b656e206d757374206e6f74206265207a65726f206164647265604482015261737360f01b606482015260840162000087565b620000fe3362000137565b600180546001600160a01b039485166001600160a01b0319918216179091556002805493909416921691909117909155600355620001e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019f57600080fd5b919050565b600080600060608486031215620001ba57600080fd5b620001c58462000187565b9250620001d56020850162000187565b9150604084015190509250925092565b61165680620001f56000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c80636b392680116100c3578063c33dc9161161007c578063c33dc91614610341578063ca709a2514610349578063d79729301461035a578063f2fde38b1461036d578063fdb3200f14610380578063fe0c346c146103a957600080fd5b80636b392680146102a15780636c19e783146102b457806381ba6ce2146102c75780638691bdf5146102f35780638da5cb5b14610314578063bf5c98221461033957600080fd5b806318b8064f1161011557806318b8064f1461021c578063296102521461022f5780632e7d24d114610237578063447597cc1461024a5780634a529aad1461025d5780635b19acd91461028e57600080fd5b80621b428a146101515780630567763d146101665780630ac07226146101a557806315cce224146101e05780631616129d146101f3575b600080fd5b61016461015f36600461135e565b6103d5565b005b6101926101743660046113cd565b6001600160a01b031660009081526004602052604090206001015490565b6040519081526020015b60405180910390f35b6101d06101b33660046113cd565b6001600160a01b0316600090815260046020526040902054421090565b604051901515815260200161019c565b6101646101ee3660046113cd565b6105f1565b6101926102013660046113cd565b6001600160a01b031660009081526007602052604090205490565b61016461022a3660046113cd565b6106d2565b6101646107e5565b6101646102453660046113cd565b6107f0565b6101646102583660046113ef565b610891565b6101d061026b3660046113cd565b6001600160a01b0316600090815260056020526040902054610100900460ff1690565b61016461029c3660046113cd565b61098c565b6101646102af366004611419565b6109df565b6101646102c23660046113cd565b610a5d565b6101926102d53660046113cd565b6001600160a01b031660009081526005602052604090206001015490565b610164336000908152600560205260408120805461ffff1916815560010155565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161019c565b600354610192565b610164610b0e565b6002546001600160a01b0316610321565b610164610368366004611440565b610b6a565b61016461037b3660046113cd565b61113e565b61019261038e3660046113cd565b6001600160a01b031660009081526004602052604090205490565b6101d06103b73660046113cd565b6001600160a01b031660009081526005602052604090205460ff1690565b3360008181526007602090815260408083208390558051918201939093529182018690526060820185905290608001604051602081830303815290604052805190602001209050600080600061046086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610479919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156104e4573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b0380841691161490506105295760405162461bcd60e51b81526004016105209061153e565b60405180910390fd5b6000898152600660205260409020546001600160a01b03161561056757600089815260066020526040902054610567906001600160a01b0316611259565b600089815260066020908152604080832080546001600160a01b03191633908117909155815180830183528e81528084018e8152828652600485529483902090518155935160019490940193909355518c81527ffe7944a9ab5ccc41963809a0d6bd51d8ba2d8ee3109c8f9876e41d01414b2733910160405180910390a250505050505050505050565b336106046000546001600160a01b031690565b6001600160a01b03161461062a5760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166106805760405162461bcd60e51b815260206004820181905260248201527f46656520546f6b656e2063616e6e6f74206265207a65726f20616464726573736044820152606401610520565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1080b8de45190ac9d8745f3724225c9b50b849890e73595c4403edd52b94937090600090a35050565b6040516001600160a01b038216907fd6eb8f1fd49548df938b7af028bb8422b4f4c5e08343a426a0dbd647d08af5d790600090a26001600160a01b0381811660009081526007602052604080822043905560025460035491516323b872dd60e01b81523360048201523060248201526044810192909252919291909116906323b872dd906064016020604051808303816000875af1158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c919061159e565b9050806107e15760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610520565b5050565b6107ee336106d2565b565b336108036000546001600160a01b031690565b6001600160a01b0316146108295760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166000908152600460205260409020546108855760405162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd081d995c9a599a595960621b6044820152606401610520565b61088e81611259565b50565b336108a46000546001600160a01b031690565b6001600160a01b0316146108ca5760405162461bcd60e51b815260040161052090611569565b60025460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610942919061159e565b9050806109875760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610520565b505050565b3361099f6000546001600160a01b031690565b6001600160a01b0316146109c55760405162461bcd60e51b815260040161052090611569565b6001600160a01b0316600090815260076020526040812055565b336109f26000546001600160a01b031690565b6001600160a01b031614610a185760405162461bcd60e51b815260040161052090611569565b600380549082905560408051828152602081018490527f628999ddb8cc6bb99cec0350ca6e43277be4a15b13e849d3e532cada20effa82910160405180910390a15050565b33610a706000546001600160a01b031690565b6001600160a01b031614610a965760405162461bcd60e51b815260040161052090611569565b6001600160a01b038116610aec5760405162461bcd60e51b815260206004820152601d60248201527f5369676e65722063616e6e6f74206265207a65726f20616464726573730000006044820152606401610520565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b33600090815260046020526040902054610b615760405162461bcd60e51b81526020600482015260146024820152731058d8dbdd5b9d081b9bdd081d995c9a599a595960621b6044820152606401610520565b6107ee33611259565b336000908152600460205260409020544210610bc15760405162461bcd60e51b81526020600482015260166024820152754163636f756e74206d7573742062652061637469766560501b6044820152606401610520565b6041879003610dbf576000338a610bf957604051806040016040528060098152602001680dcdee89eeccae462760bb1b815250610c19565b604051806040016040528060068152602001650deeccae462760d31b8152505b604051602001610c2a9291906115bb565b6040516020818303038152906040528051906020012090506000806000610c868c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610c9f919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610d0a573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b038084169116149050610d465760405162461bcd60e51b81526004016105209061153e565b8e60056000336001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a81548160ff0219169083151502179055508e15610db85760405133907f2aa4cbf8be8bf94e25edcb601f989fa2efb2fd98aa89b5df364b00a6b7de31d790600090a25b5050505050505b6041849003610fa25760003387610df757604051806040016040528060098152602001686e6f744f766572323160b81b815250610e17565b604051806040016040528060068152602001656f766572323160d01b8152505b604051602001610e289291906115bb565b6040516020818303038152906040528051906020012090506000806000610e8489898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001610e9d919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015610f08573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b038084169116149050610f445760405162461bcd60e51b81526004016105209061153e565b33600090815260056020526040902080548d1580156101000261ff001990921691909117909155610f9b5760405133907f3e6e8b4440c2877b4ddd16c21023f8701e5ffdec53a22c19fee7778ac47fb82390600090a25b5050505050505b60418190036111335760408051336020820152908101849052600090606001604051602081830303815290604052805190602001209050600080600061101d86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506111e592505050565b925092509250600084604051602001611036919061150d565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff86169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156110a1573d6000803e3d6000fd5b5050604051601f1901516001549092506001600160a01b0380841691161490506110dd5760405162461bcd60e51b81526004016105209061153e565b33600081815260056020526040908190206001018b9055517f237210580d7aea49bb2ba2a10d934288f4d26c3bc785d9ff382e764c4108555290611124908c815260200190565b60405180910390a25050505050505b505050505050505050565b336111516000546001600160a01b031690565b6001600160a01b0316146111775760405162461bcd60e51b815260040161052090611569565b6001600160a01b0381166111dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610520565b61088e816112c5565b6000806000835160411461123b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610520565b50505060208101516040820151606090920151909260009190911a90565b6001600160a01b0381166000818152600460209081526040808320838155600190810184905560058352818420805461ffff1916815501839055519182527ffe7944a9ab5ccc41963809a0d6bd51d8ba2d8ee3109c8f9876e41d01414b2733910160405180910390a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261132757600080fd5b50813567ffffffffffffffff81111561133f57600080fd5b60208301915083602082850101111561135757600080fd5b9250929050565b6000806000806060858703121561137457600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561139957600080fd5b6113a587828801611315565b95989497509550505050565b80356001600160a01b03811681146113c857600080fd5b919050565b6000602082840312156113df57600080fd5b6113e8826113b1565b9392505050565b6000806040838503121561140257600080fd5b61140b836113b1565b946020939093013593505050565b60006020828403121561142b57600080fd5b5035919050565b801515811461088e57600080fd5b600080600080600080600080600060c08a8c03121561145e57600080fd5b893561146981611432565b985060208a013567ffffffffffffffff8082111561148657600080fd5b6114928d838e01611315565b909a50985060408c013591506114a782611432565b90965060608b013590808211156114bd57600080fd5b6114c98d838e01611315565b909750955060808c0135945060a08c01359150808211156114e957600080fd5b506114f68c828d01611315565b915080935050809150509295985092959850929598565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b602080825260119082015270496e76616c6964205369676e617475726560781b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156115b057600080fd5b81516113e881611432565b60018060a01b038316815260006020604081840152835180604085015260005b818110156115f7578581018301518582016060015282016115db565b81811115611609576000606083870101525b50601f01601f19169290920160600194935050505056fea2646970667358221220dd29d05c004982bbfef8de24287c489ef6da3bbfa4f1407bf734324a4ce07b9164736f6c634300080d0033000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e00000000000000000000000000000000000000000000000000000000002dc6c0

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e00000000000000000000000000000000000000000000000000000000002dc6c0

-----Decoded View---------------
Arg [0] : _signer (address): 0xcd21a4eaf4f3d11905e1c09577735694641f39db
Arg [1] : _feeToken (address): 0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
Arg [2] : _feeAmount (uint256): 3000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd21a4eaf4f3d11905e1c09577735694641f39db
Arg [1] : 000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
Arg [2] : 00000000000000000000000000000000000000000000000000000000002dc6c0


Deployed ByteCode Sourcemap

60:8785:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2286:1233;;;;;;:::i;:::-;;:::i;:::-;;4500:132;;;;;;:::i;:::-;-1:-1:-1;;;;;4585:17:0;4562:7;4585:17;;;:8;:17;;;;;:41;;;;4500:132;;;;1431:25:1;;;1419:2;1404:18;4500:132:0;;;;;;;;4234:133;;;;;;:::i;:::-;-1:-1:-1;;;;;4315:17:0;4295:4;4315:17;;;:8;:17;;;;;:28;4346:15;-1:-1:-1;4315:46:0;4234:133;;;;1632:14:1;;1625:22;1607:41;;1595:2;1580:18;4234:133:0;1467:187:1;7197:280:0;;;;;;:::i;:::-;;:::i;2175:105::-;;;;;;:::i;:::-;-1:-1:-1;;;;;2255:19:0;2235:4;2255:19;;;:10;:19;;;;;;;2175:105;1752:247;;;;;;:::i;:::-;;:::i;2005:61::-;;;:::i;3689:179::-;;;;;;:::i;:::-;;:::i;8044:181::-;;;;;;:::i;:::-;;:::i;6784:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6862:21:0;6842:4;6862:21;;;:12;:21;;;;;:28;;;;;;;6784:112;2072:97;;;;;;:::i;:::-;;:::i;7483:189::-;;;;;;:::i;:::-;;:::i;7031:160::-;;;;;;:::i;:::-;;:::i;6902:123::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6986:21:0;6966:4;6986:21;;;:12;:21;;;;;:33;;;;6902:123;6577:83;;6643:10;6630:24;;;;:12;:24;;;;;6623:31;;-1:-1:-1;;6623:31:0;;;;;;6577:83;1673:73;1711:7;1734:6;-1:-1:-1;;;;;1734:6:0;1673:73;;;-1:-1:-1;;;;;2449:32:1;;;2431:51;;2419:2;2404:18;1673:73:0;2285:203:1;1585:82:0;1652:9;;1585:82;;3525:158;;;:::i;1487:92::-;1564:8;;-1:-1:-1;;;;;1564:8:0;1487:92;;4638:1933;;;;;;:::i;:::-;;:::i;7853:185::-;;;;;;:::i;:::-;;:::i;4373:121::-;;;;;;:::i;:::-;-1:-1:-1;;;;;4460:17:0;4440:4;4460:17;;;:8;:17;;;;;:28;;4373:121;6666:112;;;;;;:::i;:::-;-1:-1:-1;;;;;6744:21:0;6724:4;6744:21;;;:12;:21;;;;;:28;;;;6666:112;2286:1233;2563:10;2552:22;;;;:10;:22;;;;;;;;2545:29;;;2651:59;;;;;4162:51:1;;;;4229:18;;;4222:34;;;4272:18;;;4265:34;;;2552:22:0;4135:18:1;;2651:59:0;;;;;;;;;;;;2641:70;;;;;;2626:85;;2719:9;2730;2741:7;2752:25;2767:9;;2752:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2752:14:0;;-1:-1:-1;;;2752:25:0:i;:::-;2718:59;;;;;;2784:21;2879:4;2826:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2826:58:0;;;;;;;;;2808:77;;2826:58;2808:77;;;;2894:15;2912:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;2808:77:0;;-1:-1:-1;2894:15:0;2912:33;;4894:19:1;;2912:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2912:33:0;;-1:-1:-1;;2912:33:0;;2971:6;;2912:33;;-1:-1:-1;;;;;;2960:17:0;;;2971:6;;2960:17;;-1:-1:-1;2952:47:0;;;;-1:-1:-1;;;2952:47:0;;;;;;;:::i;:::-;;;;;;;;;3203:3;3151:40;;;:15;:40;;;;;;-1:-1:-1;;;;;3151:40:0;:56;3148:139;;3238:40;;;;:15;:40;;;;;;3218:61;;-1:-1:-1;;;;;3238:40:0;3218:19;:61::i;:::-;3322:40;;;;:15;:40;;;;;;;;:53;;-1:-1:-1;;;;;;3322:53:0;3365:10;3322:53;;;;;;3405;;;;;;;;;;;;;;;;3382:20;;;:8;:20;;;;;;:76;;;;;;-1:-1:-1;3382:76:0;;;;;;;;3470:43;1431:25:1;;;3470:43:0;;1404:18:1;3470:43:0;;;;;;;2423:1096;;;;;;2286:1233;;;;:::o;7197:280::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7273:25:0;::::1;7265:70;;;::::0;-1:-1:-1;;;7265:70:0;;6007:2:1;7265:70:0::1;::::0;::::1;5989:21:1::0;;;6026:18;;;6019:30;6085:34;6065:18;;;6058:62;6137:18;;7265:70:0::1;5805:356:1::0;7265:70:0::1;7372:8;::::0;;-1:-1:-1;;;;;7388:30:0;;::::1;-1:-1:-1::0;;;;;;7388:30:0;::::1;::::0;::::1;::::0;;;7430:41:::1;::::0;7372:8;::::1;::::0;7388:30;7372:8;;7430:41:::1;::::0;7342:19:::1;::::0;7430:41:::1;7258:219;7197:280:::0;:::o;1752:247::-;1807:16;;-1:-1:-1;;;;;1807:16:0;;;;;;;;-1:-1:-1;;;;;1830:19:0;;;;;;;:10;:19;;;;;;1852:12;1830:34;;1887:8;;1936:9;;1887:59;;-1:-1:-1;;;1887:59:0;;1909:10;1887:59;;;6406:34:1;1929:4:0;6456:18:1;;;6449:43;6508:18;;;6501:34;;;;1830:19:0;;1887:8;;;;;:21;;6341:18:1;;1887:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1871:75;;1961:8;1953:40;;;;-1:-1:-1;;;1953:40:0;;6998:2:1;1953:40:0;;;6980:21:1;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:49;7115:18;;1953:40:0;6796:343:1;1953:40:0;1795:204;1752:247;:::o;2005:61::-;2039:21;2049:10;2039:9;:21::i;:::-;2005:61::o;3689:179::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3770:17:0;::::1;3801:1;3770:17:::0;;;:8:::1;:17;::::0;;;;:28;3762:65:::1;;;::::0;-1:-1:-1;;;3762:65:0;;7346:2:1;3762:65:0::1;::::0;::::1;7328:21:1::0;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:50;7464:18;;3762:65:0::1;7144:344:1::0;3762:65:0::1;3834:28;3854:7;3834:19;:28::i;:::-;3689:179:::0;:::o;8044:181::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;8140:8:::1;::::0;:36:::1;::::0;-1:-1:-1;;;8140:36:0;;-1:-1:-1;;;;;7685:32:1;;;8140:36:0::1;::::0;::::1;7667:51:1::0;7734:18;;;7727:34;;;8128:9:0::1;::::0;8140:8:::1;::::0;:17:::1;::::0;7640:18:1;;8140:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8128:48;;8191:4;8183:36;;;::::0;-1:-1:-1;;;8183:36:0;;6998:2:1;8183:36:0::1;::::0;::::1;6980:21:1::0;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:49;7115:18;;8183:36:0::1;6796:343:1::0;8183:36:0::1;8121:104;8044:181:::0;;:::o;2072:97::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2144:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;2137:26;2072:97::o;7483:189::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;7570:9:::1;::::0;;7586:24;;;;7622:44:::1;::::0;;7946:25:1;;;8002:2;7987:18;;7980:34;;;7622:44:0::1;::::0;7919:18:1;7622:44:0::1;;;;;;;7543:129;7483:189:::0;:::o;7031:160::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7103:23:0;::::1;7095:65;;;::::0;-1:-1:-1;;;7095:65:0;;8227:2:1;7095:65:0::1;::::0;::::1;8209:21:1::0;8266:2;8246:18;;;8239:30;8305:31;8285:18;;;8278:59;8354:18;;7095:65:0::1;8025:353:1::0;7095:65:0::1;7167:6;:18:::0;;-1:-1:-1;;;;;;7167:18:0::1;-1:-1:-1::0;;;;;7167:18:0;;;::::1;::::0;;;::::1;::::0;;7031:160::o;3525:158::-;3588:10;3613:1;3579:20;;;:8;:20;;;;;:31;3571:68;;;;-1:-1:-1;;;3571:68:0;;7346:2:1;3571:68:0;;;7328:21:1;7385:2;7365:18;;;7358:30;-1:-1:-1;;;7404:18:1;;;7397:50;7464:18;;3571:68:0;7144:344:1;3571:68:0;3646:31;3666:10;3646:19;:31::i;4638:1933::-;4881:10;4295:4;4315:17;;;:8;:17;;;;;:28;4346:15;-1:-1:-1;4859:60:0;;;;-1:-1:-1;;;4859:60:0;;8585:2:1;4859:60:0;;;8567:21:1;8624:2;8604:18;;;8597:30;-1:-1:-1;;;8643:18:1;;;8636:52;8705:18;;4859:60:0;8383:346:1;4859:60:0;4955:2;4929:28;;;4926:549;;4968:12;5004:10;5016:6;:31;;;;;;;;;;;;;;;-1:-1:-1;;;5016:31:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5016:31:0;;;;4993:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4983:66;;;;;;4968:81;;5059:9;5070;5081:7;5092:31;5107:15;;5092:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5092:14:0;;-1:-1:-1;;;5092:31:0:i;:::-;5058:65;;;;;;5132:21;5229:4;5176:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5176:58:0;;;;;;;;;5156:79;;5176:58;5156:79;;;;5246:15;5264:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;5156:79:0;;-1:-1:-1;5246:15:0;5264:33;;4894:19:1;;5264:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5264:33:0;;-1:-1:-1;;5264:33:0;;5325:6;;5264:33;;-1:-1:-1;;;;;;5314:17:0;;;5325:6;;5314:17;;-1:-1:-1;5306:47:0;;;;-1:-1:-1;;;5306:47:0;;;;;;;:::i;:::-;5396:6;5362:12;:24;5375:10;-1:-1:-1;;;;;5362:24:0;-1:-1:-1;;;;;5362:24:0;;;;;;;;;;;;:31;;;:40;;;;;;;;;;;;;;;;;;5414:6;5411:57;;;5438:20;;5447:10;;5438:20;;;;;5411:57;4959:516;;;;;;4926:549;5510:2;5484:28;;;5481:549;;5523:12;5559:10;5571:6;:31;;;;;;;;;;;;;;;-1:-1:-1;;;5571:31:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5571:31:0;;;;5548:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5538:66;;;;;;5523:81;;5614:9;5625;5636:7;5647:31;5662:15;;5647:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5647:14:0;;-1:-1:-1;;;5647:31:0:i;:::-;5613:65;;;;;;5687:21;5784:4;5731:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5731:58:0;;;;;;;;;5711:79;;5731:58;5711:79;;;;5801:15;5819:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;5711:79:0;;-1:-1:-1;5801:15:0;5819:33;;4894:19:1;;5819:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5819:33:0;;-1:-1:-1;;5819:33:0;;5880:6;;5819:33;;-1:-1:-1;;;;;;5869:17:0;;;5880:6;;5869:17;;-1:-1:-1;5861:47:0;;;;-1:-1:-1;;;5861:47:0;;;;;;;:::i;:::-;5930:10;5917:24;;;;:12;:24;;;;;:40;;;;;;;;-1:-1:-1;;5917:40:0;;;;;;;;;;5966:57;;5993:20;;6002:10;;5993:20;;;;;5966:57;5514:516;;;;;;5481:549;6066:2;6039:29;;;6036:530;;6104:35;;;6115:10;6104:35;;;7667:51:1;7734:18;;;7727:34;;;6079:12:0;;7640:18:1;;6104:35:0;;;;;;;;;;;;6094:46;;;;;;6079:61;;6150:9;6161;6172:7;6183:32;6198:16;;6183:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6183:14:0;;-1:-1:-1;;;6183:32:0:i;:::-;6149:66;;;;;;6224:21;6321:4;6268:58;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6268:58:0;;;;;;;;;6248:79;;6268:58;6248:79;;;;6338:15;6356:33;;;;;;;;;4922:25:1;;;4995:4;4983:17;;4963:18;;;4956:45;;;;5017:18;;;5010:34;;;5060:18;;;5053:34;;;6248:79:0;;-1:-1:-1;6338:15:0;6356:33;;4894:19:1;;6356:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6356:33:0;;-1:-1:-1;;6356:33:0;;6417:6;;6356:33;;-1:-1:-1;;;;;;6406:17:0;;;6417:6;;6406:17;;-1:-1:-1;6398:47:0;;;;-1:-1:-1;;;6398:47:0;;;;;;;:::i;:::-;6467:10;6454:24;;;;:12;:24;;;;;;;:36;;:50;;;6518:40;;;;;6493:11;1431:25:1;;1419:2;1404:18;;1285:177;6518:40:0;;;;;;;;6070:496;;;;;;6036:530;4638:1933;;;;;;;;;:::o;7853:185::-;8278:10;8267:7;1711;1734:6;-1:-1:-1;;;;;1734:6:0;;1673:73;8267:7;-1:-1:-1;;;;;8267:21:0;;8259:66;;;;-1:-1:-1;;;8259:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7932:22:0;::::1;7924:73;;;::::0;-1:-1:-1;;;7924:73:0;;9635:2:1;7924:73:0::1;::::0;::::1;9617:21:1::0;9674:2;9654:18;;;9647:30;9713:34;9693:18;;;9686:62;-1:-1:-1;;;9764:18:1;;;9757:36;9810:19;;7924:73:0::1;9433:402:1::0;7924:73:0::1;8004:28;8023:8;8004:18;:28::i;8399:441::-:0;8469:9;8480;8491:7;8518:3;:10;8532:2;8518:16;8510:53;;;;-1:-1:-1;;;8510:53:0;;10042:2:1;8510:53:0;;;10024:21:1;10081:2;10061:18;;;10054:30;10120:26;10100:18;;;10093:54;10164:18;;8510:53:0;9840:348:1;8510:53:0;-1:-1:-1;;;8662:2:0;8653:12;;8647:19;8724:2;8715:12;;8709:19;8823:2;8814:12;;;8808:19;8647;;8805:1;8800:28;;;;;8399:441::o;3874:354::-;-1:-1:-1;;;;;4062:17:0;;;;;;:8;:17;;;;;;;;4055:24;;;;;;;;;;4158:12;:21;;;;;4151:28;;-1:-1:-1;;4151:28:0;;;;;;;4191:31;1431:25:1;;;4191:31:0;;1404:18:1;4191:31:0;;;;;;;3874:354;:::o;7678:169::-;7740:16;7759:6;;-1:-1:-1;;;;;7772:17:0;;;-1:-1:-1;;;;;;7772:17:0;;;;;;7801:40;;7759:6;;;;;;;7801:40;;7740:16;7801:40;7733:114;7678:169;:::o;14:347:1:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:1;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;296:59;14:347;;;;;:::o;366:545::-;454:6;462;470;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;583:9;570:23;560:33;;640:2;629:9;625:18;612:32;602:42;;695:2;684:9;680:18;667:32;722:18;714:6;711:30;708:50;;;754:1;751;744:12;708:50;793:58;843:7;834:6;823:9;819:22;793:58;:::i;:::-;366:545;;;;-1:-1:-1;870:8:1;-1:-1:-1;;;;366:545:1:o;916:173::-;984:20;;-1:-1:-1;;;;;1033:31:1;;1023:42;;1013:70;;1079:1;1076;1069:12;1013:70;916:173;;;:::o;1094:186::-;1153:6;1206:2;1194:9;1185:7;1181:23;1177:32;1174:52;;;1222:1;1219;1212:12;1174:52;1245:29;1264:9;1245:29;:::i;:::-;1235:39;1094:186;-1:-1:-1;;;1094:186:1:o;1841:254::-;1909:6;1917;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2009:29;2028:9;2009:29;:::i;:::-;1999:39;2085:2;2070:18;;;;2057:32;;-1:-1:-1;;;1841:254:1:o;2100:180::-;2159:6;2212:2;2200:9;2191:7;2187:23;2183:32;2180:52;;;2228:1;2225;2218:12;2180:52;-1:-1:-1;2251:23:1;;2100:180;-1:-1:-1;2100:180:1:o;2493:118::-;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2616:1339;2747:6;2755;2763;2771;2779;2787;2795;2803;2811;2864:3;2852:9;2843:7;2839:23;2835:33;2832:53;;;2881:1;2878;2871:12;2832:53;2920:9;2907:23;2939:28;2961:5;2939:28;:::i;:::-;2986:5;-1:-1:-1;3042:2:1;3027:18;;3014:32;3065:18;3095:14;;;3092:34;;;3122:1;3119;3112:12;3092:34;3161:58;3211:7;3202:6;3191:9;3187:22;3161:58;:::i;:::-;3238:8;;-1:-1:-1;3135:84:1;-1:-1:-1;3325:2:1;3310:18;;3297:32;;-1:-1:-1;3338:30:1;3297:32;3338:30;:::i;:::-;3387:7;;-1:-1:-1;3447:2:1;3432:18;;3419:32;;3463:16;;;3460:36;;;3492:1;3489;3482:12;3460:36;3531:60;3583:7;3572:8;3561:9;3557:24;3531:60;:::i;:::-;3610:8;;-1:-1:-1;3505:86:1;-1:-1:-1;3692:3:1;3677:19;;3664:33;;-1:-1:-1;3750:3:1;3735:19;;3722:33;;-1:-1:-1;3767:16:1;;;3764:36;;;3796:1;3793;3786:12;3764:36;;3835:60;3887:7;3876:8;3865:9;3861:24;3835:60;:::i;:::-;3809:86;;3914:8;3904:18;;;3941:8;3931:18;;;2616:1339;;;;;;;;;;;:::o;4310:380::-;4552:66;4540:79;;4644:2;4635:12;;4628:28;;;;4681:2;4672:12;;4310:380::o;5098:341::-;5300:2;5282:21;;;5339:2;5319:18;;;5312:30;-1:-1:-1;;;5373:2:1;5358:18;;5351:47;5430:2;5415:18;;5098:341::o;5444:356::-;5646:2;5628:21;;;5665:18;;;5658:30;5724:34;5719:2;5704:18;;5697:62;5791:2;5776:18;;5444:356::o;6546:245::-;6613:6;6666:2;6654:9;6645:7;6641:23;6637:32;6634:52;;;6682:1;6679;6672:12;6634:52;6714:9;6708:16;6733:28;6755:5;6733:28;:::i;8734:694::-;8940:1;8936;8931:3;8927:11;8923:19;8915:6;8911:32;8900:9;8893:51;8874:4;8963:2;9001;8996;8985:9;8981:18;8974:30;9033:6;9027:13;9076:6;9071:2;9060:9;9056:18;9049:34;9101:1;9111:140;9125:6;9122:1;9119:13;9111:140;;;9220:14;;;9216:23;;9210:30;9186:17;;;9205:2;9182:26;9175:66;9140:10;;9111:140;;;9269:6;9266:1;9263:13;9260:91;;;9339:1;9334:2;9325:6;9314:9;9310:22;9306:31;9299:42;9260:91;-1:-1:-1;9412:2:1;9391:15;-1:-1:-1;;9387:29:1;9372:45;;;;9419:2;9368:54;;8734:694;-1:-1:-1;;;;8734:694:1:o

Swarm Source

ipfs://dd29d05c004982bbfef8de24287c489ef6da3bbfa4f1407bf734324a4ce07b91
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.