Contract 0x464a1c3a3e7079759e564a33191843fe2f1433a2 11

 

Contract Overview

Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xda27aa2f65e068c053a4153bb6d54e64fc69184a7b51d0731efa2eaf718cc567Unstake1820815682024-02-18 18:26:5038 days 23 hrs ago0x5039ed981cedfcbbb12c4985df321c1f9d222440 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000613 0.1
0xc259a1075d688269d232edfb5c3a2a82f1ba000d16eb79044cda9186f90cfffcUnstake1820814972024-02-18 18:26:3138 days 23 hrs ago0x5039ed981cedfcbbb12c4985df321c1f9d222440 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000613 0.1
0x7b0b95151170c6e8c5044845777fe733e775885ad97888e775147cf2963b2b2cUnstake1820814502024-02-18 18:26:1938 days 23 hrs ago0x5039ed981cedfcbbb12c4985df321c1f9d222440 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000613 0.1
0xef3ce6f2c38627ff3330cd580949ad1aa413391b4be56ab11b918ecdad067079Unstake1820813562024-02-18 18:25:5538 days 23 hrs ago0x5039ed981cedfcbbb12c4985df321c1f9d222440 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00006273 0.1
0xadc9dc78f89e6d1ca209c132e3e6c9c2d42618871e05580925d7b6d37d06de32Unstake1803782372024-02-13 16:06:4544 days 2 hrs ago0x9c5df45d7776ad1e9b4004537e06898ac053aeff IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000726 0.1
0x83574ec32b0f2b1627cdb154b05632cb5a171bd226645c86b9024a8f999291ceUnstake1803781692024-02-13 16:06:2844 days 2 hrs ago0x9c5df45d7776ad1e9b4004537e06898ac053aeff IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000724 0.1
0xa2892f7e0f1e22d31c99899f3a7fce60701f94db0ba6af398ee2775f45644b3fUnstake1803780952024-02-13 16:06:0844 days 2 hrs ago0x9c5df45d7776ad1e9b4004537e06898ac053aeff IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000724 0.1
0x6b6fe8d8d13be3aff276844ee747aebd241737e8dc1a2e09c6669aa52a2ad975Unstake1803770182024-02-13 16:01:3744 days 2 hrs ago0x9c5df45d7776ad1e9b4004537e06898ac053aeff IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000727 0.1
0x6635d5b640165a5601c2be32786007cf58437ff33bf282ec4749b63a0f1971ccUnstake1726877382024-01-21 12:57:2267 days 5 hrs ago0xc4eaf74d49342900563f715c275de51fd9a7d2a4 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.000037850.1
0x1085551aae694b812983825580e0940f118c3701e5d12e1f881f130e64102ea6Unstake1667979492024-01-03 22:07:3084 days 20 hrs ago0x31973c1799c889a03f9ce9ea468c3cef26f01169 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.000056240.1
0x42f64fdc028654899669a8fc077b782edc27d7a673344c731b0e8f0f48c176b4Unstake1597677482023-12-13 16:45:25106 days 1 hr ago0x20366b9e058663260d7bda2ee42cec6adc4f643c IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00012758 0.1
0xb55fe13891bafb41e498e243785f7dc5d925c0fd91a318804e8b97bfae138408Unstake1541083512023-11-26 1:07:48123 days 17 hrs ago0x88142c2c2e3083813ae17f68a374e9fb6ccad962 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00003489 0.1
0xc56833cfdb67a0979db9880a655298a946dee6d29ef32c6a659b7dff6091f8afUnstake1502496562023-11-14 7:09:56135 days 11 hrs ago0xc9673c6d77564655421a9b23a3fd2b9606bcec2b IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00004225 0.1
0xc28f6dbd6bf89bf8e1d72b357c53c6490dba3423d6ad4cd74fc049e367540176Unstake1502494292023-11-14 7:08:58135 days 11 hrs ago0xc9673c6d77564655421a9b23a3fd2b9606bcec2b IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00004334 0.1
0x28d6daa229fc7835cf683b3ecf649519fa809aab38d3e44eb01fcd96144b472eUnstake1485312982023-11-09 1:15:07140 days 17 hrs ago0xba567d6ce93c021e46baa959ffc241fe35a10297 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.000055 0.1
0x19ed95c861d67988c65c7d301ee555188c75c0e68abd4ce75a10d2e4ee8d910aUnstake1485312692023-11-09 1:14:59140 days 17 hrs ago0xba567d6ce93c021e46baa959ffc241fe35a10297 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000552 0.1
0x0d9a0bfc119952ca19b757391b984c3fd9464173d59754ab4ff79100b750ea66Unstake1485312392023-11-09 1:14:51140 days 17 hrs ago0xba567d6ce93c021e46baa959ffc241fe35a10297 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.000055 0.1
0x62f898495b0f7903f83db37b7b519dfbedb1c7b719bd26733f8bfc14d2239219Unstake1485312142023-11-09 1:14:44140 days 17 hrs ago0xba567d6ce93c021e46baa959ffc241fe35a10297 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.0000552 0.1
0x922f530e72a8d22bcd210be56dd804f1dfe78c8d6a0524a085863cc565bb2d24Unstake1485311682023-11-09 1:14:32140 days 17 hrs ago0xba567d6ce93c021e46baa959ffc241fe35a10297 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.000055 0.1
0x524e68d429631a157ee42c6411983d6d56fb3095575210ec5757a31cee1b1de3Unstake1485307162023-11-09 1:12:31140 days 17 hrs ago0xba567d6ce93c021e46baa959ffc241fe35a10297 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.000055 0.1
0xe61524051923c751ae982b70ad44740f71b568ef260ebef00b7db4dea41f84d3Unstake1485257842023-11-09 0:50:16140 days 17 hrs ago0x680b06261adc9ebc0e91ca87b8ba7d8ad563b418 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00005722 0.1
0xd4b78a95c71b43db48e0797886e24c14eb252d6ae84455ff3790cb9f3093ef8dUnstake1483390132023-11-08 11:20:18141 days 6 hrs ago0xbf02dd463d8fa0752cd39f0a98ad438b9b339fea IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00004012 0.1
0x416b13d1b23fabebf09aae4244977499dc71055dd305f6df6ac9fda446264aa5Unstake1474760862023-11-05 19:45:19143 days 22 hrs ago0x245a4887c7ca101419d629e447f2de60d8861de4 IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00005834 0.1
0x4ebc2aa2cc75c96ad750654143bbd1de64d08ea1e3f4062ccace9bc1e7538696Unstake963535952023-05-31 13:17:25302 days 4 hrs ago0x1a4999048a9fa13125edce959de4a5713b76735f IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00006293 0.1
0x4c676305b8768b187b4eacb5e7c3228396e5821ed21f24bedbe21d9d95104d42Unstake963535432023-05-31 13:17:12302 days 4 hrs ago0x1a4999048a9fa13125edce959de4a5713b76735f IN  0x464a1c3a3e7079759e564a33191843fe2f1433a20 ETH0.00006293 0.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0ac5e29cf116a4475f89be37fe5c754121a872693914d2f19c513ce84c152294628535802023-02-20 19:05:48401 days 23 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x4b020cb505b680fe8117d6aef15c6d567b7238f2b2eeef74095b3b73fef67ca5573438812023-02-02 5:42:55420 days 12 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x8639d038bcfae5d9c2507305178defe07e9339f9b0e4151c2ca1d3c0f9b77845560327172023-01-28 4:09:15425 days 14 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0xafc69cfafeb87117a0bafae208c419910a6665488538964b0c5da3b6e1503970549414302023-01-23 15:10:18430 days 3 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x5eadc6e387f0f486c2b97a443b607b258c10c483cf86f5c44d24f9f24f9bef44549413812023-01-23 15:10:03430 days 3 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x5b6cf2cce8325fe9acaaa41459b18667df3067fca4f6cfdc49182bdda546e438549412092023-01-23 15:09:08430 days 3 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x193f8fd13d71b3924a29a2dab6c525d068ae1f8ea321fe59754a9424489ef291549127572023-01-23 12:31:17430 days 5 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x7336cd2dda5477a01a229a7abf86effcf6b939b6b5650d24fd750ba20192cd9f545442742023-01-21 17:07:07432 days 1 hr ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x31b2d6a14f0319eaa435650ef623e5fb5b1d4ce2107e0071a7cfe02a331de605545442302023-01-21 17:06:52432 days 1 hr ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x754cedf5d0492e1175c1929b1699e82794fcc0e0a968b76b74a2db13d4abc399517294832023-01-09 1:52:42444 days 16 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0xf6f6ba917ba414797d80a74b14dc9a154bebadea2de1c0df468a4954b8ed445d419878192022-11-28 21:40:55485 days 20 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x7f9cfaa9c6bbd2ddd40c1e141c67bf59be432785b342da7e3b73a0b4fe3940fa415139922022-11-27 3:20:29487 days 14 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0xebee7c621117dfaedffbdc832b9590dff66f10fde6a8d6e89d1a2a77e3168b70398437932022-11-21 5:26:33493 days 12 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x55e661ab34f4db7ae04477aee5470f00758596f8ab36579a4033979846b422ea398425732022-11-21 5:20:37493 days 12 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0xc9fdff3aba6f8be854c2a9f13758ba950dc447fa6bbdc190970aae9f680f80c4395081222022-11-20 3:37:30494 days 14 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x6f8ac97315adaf358a50ddc7b8c1db2564e53f26e17c34c71ca8238b08de8a1b283881712022-10-04 20:35:18540 days 21 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x29cd6be583b5d38f4d32be35e91874b833821248a190877e445d0a651502a646283881402022-10-04 20:34:57540 days 21 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0xda0d3ef844fdf55082538ad0de8e34763ede55a252baed4f8c6c3eff46aa711b283748122022-10-04 18:02:13541 days 14 mins ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x67a3764f08c3c6fb5767e4e5b33c27605002c8e80baeba5fa8b47b11ed783359257307782022-09-21 16:16:10554 days 2 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x1f957163aa6f53b3d52ec71cababade344d81239ba39dceaf6a6f0fa8b1030d2257307032022-09-21 16:15:42554 days 2 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x16c62f86644b6211f29ec6dad7b3c4da43a13e20c9f1d28878d172e1edaffe97257305842022-09-21 16:14:45554 days 2 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x7eb5ac6324bc72dcca3af078be7f715717b555ce1a8994ac6861f4e796f6d8b0257305202022-09-21 16:14:25554 days 2 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0xe2fe98c1305e0766efc6a37f85f6599184f6142ef873da8dc8b6454a3145703a257304702022-09-21 16:14:03554 days 2 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x38961607fe46874854b4699973eccd7b4d84b57a36763dc48136c057c04f6562257304052022-09-21 16:13:27554 days 2 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
0x597ecba00c88befa1a2e66ac2ccc3879b882a6e9aa898a4af6886a155e2f54f1257303352022-09-21 16:12:46554 days 2 hrs ago 0x464a1c3a3e7079759e564a33191843fe2f1433a2 Realm: REALM Token0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StakingV1

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : StakingV1.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

interface IRealm {
  function ownerOf(uint256 _realmId) external view returns (address owner);

  function isApprovedForAll(address owner, address operator)
    external
    returns (bool);

  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) external;
}

interface IData {
  function addGoldSupply(uint256 _realmId, uint256 _gold) external;

  function data(uint256 _realmId, uint256 _type) external returns (uint256);

  function gold(uint256 _realmId) external returns (uint256);

  function add(
    uint256 _realmId,
    uint256 _type,
    uint256 _amount
  ) external;

  function remove(
    uint256 _realmId,
    uint256 _type,
    uint256 _amount
  ) external;
}

interface IStructure {
  function add(
    uint256 _realmId,
    uint256 _type,
    uint256 _amount
  ) external;

  function data(uint256 _realmId, uint256 _type) external returns (uint256);
}

interface IResource {
  function add(
    uint256 _realmId,
    uint256 _resourceId,
    uint256 _amount
  ) external;
}

interface IManager {
  function isAdmin(address addr) external view returns (bool);
}

interface IRand {
  function retrieve(uint256 salt) external view returns (uint256);
}

contract StakingV1 is IERC721Receiver, ReentrancyGuard, Pausable {
  //=======================================
  // Immutables
  //=======================================
  IRealm public immutable REALM;
  IData public immutable DATA;
  IStructure public immutable STRUCTURE;
  IResource public immutable RESOURCE;
  IManager public immutable MANAGER;

  //=======================================
  // Constants
  //=======================================
  uint256 public constant TIER_1 = 7;
  uint256 public constant TIER_2 = 3;
  uint256 public constant MAX_COLLECT = 5;

  //=======================================
  // Structs
  //=======================================
  struct Staker {
    address staker;
    uint256 resourceId;
    uint256 stakedAt;
  }

  //=======================================
  // Mappings
  //=======================================
  mapping(uint256 => Staker) public stakers;
  mapping(uint256 => uint256) public collected;

  //=======================================
  // Arrays
  //=======================================
  uint256[] public bonusProbability = [40, 85, 95, 100];

  uint256[] public resourceProbability = [
    40,
    52,
    62,
    72,
    77,
    82,
    87,
    91,
    94,
    97,
    100
  ];
  uint256[] public cultureIds = [0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17];
  uint256[] public techIds = [0, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27];
  uint256[] public foodIds = [0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37];

  //=======================================
  // Randomizer
  //=======================================
  IRand public randomizer;

  //=======================================
  // EVENTS
  //=======================================
  event Staked(uint256 realmId, uint256 resourceId);
  event Unstaked(uint256 realmId);
  event Build(uint256 realmId);

  event Collected(uint256 realmId);
  event CollectedWithResourceId(uint256 realmId, uint256 resourceId);

  event DataAdded(
    uint256 realmId,
    uint256 resourceId,
    uint256 resource,
    uint256 structure,
    uint256 tier,
    uint256 bonus,
    uint256 multipler,
    uint256 amount
  );

  event ResourceChanged(uint256 realmId, uint256 resourceId);

  //=======================================
  // MODIFIER
  //=======================================
  modifier onlyStaker(uint256 _realmId) {
    // Check that sender is staker
    _onlyStaker(_realmId);
    _;
  }

  modifier onlyAdmin() {
    // Check if admin
    require(MANAGER.isAdmin(msg.sender), "Manager: Not an Admin");
    _;
  }

  //=======================================
  // Constructor
  //=======================================
  constructor(
    address _realm,
    address _data,
    address _structure,
    address _resource,
    address _manager,
    address _rand
  ) {
    REALM = IRealm(_realm);
    DATA = IData(_data);
    STRUCTURE = IStructure(_structure);
    RESOURCE = IResource(_resource);
    MANAGER = IManager(_manager);

    randomizer = IRand(_rand);
  }

  //=======================================
  // External
  //=======================================
  function stake(uint256 _realmId, uint256 _resourceId)
    external
    nonReentrant
    whenNotPaused
  {
    // Create staker
    Staker storage staker = stakers[_realmId];
    staker.staker = msg.sender;
    staker.resourceId = _resourceId;
    staker.stakedAt = block.timestamp;

    // Add staker to staked mapping
    stakers[_realmId] = staker;

    // Initialize collected
    collected[_realmId] = block.timestamp;

    // Transfer Realm to contract
    REALM.safeTransferFrom(msg.sender, address(this), _realmId);

    emit Staked(_realmId, _resourceId);
  }

  function unstake(uint256 _realmId)
    external
    nonReentrant
    onlyStaker(_realmId)
  {
    Staker storage staker = stakers[_realmId];

    // Reset staker
    staker.staker = address(0);
    staker.resourceId = 0;
    staker.stakedAt = 0;

    // Transfer Realm back to owner
    REALM.safeTransferFrom(address(this), msg.sender, _realmId);

    emit Unstaked(_realmId);
  }

  function unstakeAndBuild(uint256 _realmId)
    external
    nonReentrant
    whenNotPaused
    onlyStaker(_realmId)
  {
    Staker storage staker = stakers[_realmId];

    // Get days elapsed since last collection
    uint256 collectedDaysElapsed = _collectedDaysElapsed(_realmId);

    // Check if days elapsed are greater than 0
    if (collectedDaysElapsed > 0) {
      // Collect
      _collectData(_realmId, collectedDaysElapsed, staker);
    }

    // Build
    _build(_realmId);

    // Reset staker
    staker.staker = address(0);
    staker.resourceId = 0;
    staker.stakedAt = 0;

    // Transfer Realm back to owner
    REALM.safeTransferFrom(address(this), msg.sender, _realmId);

    emit Unstaked(_realmId);
  }

  function collect(uint256 _realmId)
    external
    nonReentrant
    whenNotPaused
    onlyStaker(_realmId)
  {
    // Collect
    _collect(_realmId);

    emit Collected(_realmId);
  }

  function collect(uint256 _realmId, uint256 _resourceId)
    external
    nonReentrant
    whenNotPaused
    onlyStaker(_realmId)
  {
    // Collect
    _collect(_realmId);

    // Update staker resourceId
    stakers[_realmId].resourceId = _resourceId;

    emit CollectedWithResourceId(_realmId, _resourceId);
  }

  function changeResource(uint256 _realmId, uint256 _resourceId)
    external
    nonReentrant
    whenNotPaused
    onlyStaker(_realmId)
  {
    // Update collected timestamp
    collected[_realmId] = block.timestamp;

    // Update resourceId on staker
    stakers[_realmId].resourceId = _resourceId;

    emit ResourceChanged(_realmId, _resourceId);
  }

  //=======================================
  // Admin
  //=======================================
  function pause() external onlyAdmin {
    _pause();
  }

  function unpause() external onlyAdmin {
    _unpause();
  }

  function setRandomizer(address _addr) external onlyAdmin {
    randomizer = IRand(_addr);
  }

  //=======================================
  // ERC721
  //=======================================

  function onERC721Received(
    address, // _operator,
    address, //_from,
    uint256, // _tokenId,
    bytes calldata //_data
  ) external pure override returns (bytes4) {
    return IERC721Receiver.onERC721Received.selector;
  }

  //=======================================
  // Internal
  //=======================================
  function _collect(uint256 _realmId) internal {
    Staker memory staker = stakers[_realmId];

    // Get days elapsed since last collection
    uint256 collectedDaysElapsed = _collectedDaysElapsed(_realmId);

    // Check that days elapsed is greater than 0
    require(collectedDaysElapsed > 0, "Staking: Nothing to collect");

    // collect
    _collectData(_realmId, collectedDaysElapsed, staker);

    // Update collected timestamp
    collected[_realmId] = block.timestamp;
  }

  function _collectData(
    uint256 _realmId,
    uint256 _daysMultiplier,
    Staker memory staker
  ) internal {
    // Check that days multiplier doesn't exceed max collect
    if (_daysMultiplier > 5) {
      _daysMultiplier = MAX_COLLECT;
    }

    // Get stake multipliers
    (uint256 tier1, uint256 tier2) = _builtMultipliers(_realmId);

    // Get random amount
    uint256 amount = _rarity(staker.stakedAt, bonusProbability) + 1;

    if (staker.resourceId == 0) {
      // Add gold
      _addData(
        _realmId,
        0,
        DATA.gold(_realmId),
        STRUCTURE.data(_realmId, 0),
        amount,
        tier1,
        _daysMultiplier
      );
    } else if (staker.resourceId == 1) {
      // Add food
      _addData(
        _realmId,
        1,
        0,
        STRUCTURE.data(_realmId, 1),
        amount,
        tier2,
        _daysMultiplier
      );
    } else if (staker.resourceId == 3) {
      // Add Culture
      _addData(
        _realmId,
        3,
        0,
        STRUCTURE.data(_realmId, 2),
        amount,
        tier2,
        _daysMultiplier
      );
    } else if (staker.resourceId == 5) {
      // Add Technology
      _addData(
        _realmId,
        5,
        0,
        STRUCTURE.data(_realmId, 3),
        amount,
        tier2,
        _daysMultiplier
      );
    }
  }

  function _addData(
    uint256 _realmId,
    uint256 _resourceId,
    uint256 _resource,
    uint256 _structure,
    uint256 _amount,
    uint256 _tier,
    uint256 _multiplier
  ) internal {
    // Check that there is something to add
    if (_tier == 0 && _structure == 0) return;

    // Calculate resource amount
    uint256 amount = (_resource + _structure + _tier + _amount) * _multiplier;

    // Add data
    DATA.add(_realmId, _resourceId, amount);

    // Add collectibles
    _addCollectibles(_realmId, _resourceId);

    emit DataAdded(
      _realmId,
      _resourceId,
      _resource,
      _structure,
      _tier,
      _amount,
      _multiplier,
      amount
    );
  }

  function _addCollectibles(uint256 _realmId, uint256 _resourceId) internal {
    // If resource is Gold then return
    if (_resourceId == 0) return;

    uint256 id;

    if (_resourceId == 1) {
      id = foodIds[_rarity(_resourceId, resourceProbability)];
    } else if (_resourceId == 3) {
      id = cultureIds[_rarity(_resourceId, resourceProbability)];
    } else if (_resourceId == 5) {
      id = techIds[_rarity(_resourceId, resourceProbability)];
    }

    // Resturn if resource ID is 0
    if (id == 0) return;

    // Add resources
    RESOURCE.add(_realmId, id, 1);
  }

  function _build(uint256 _realmId) internal {
    // Get built multipliers for both tiers
    (uint256 tier1, uint256 tier2) = _builtMultipliers(_realmId);

    // City
    STRUCTURE.add(_realmId, 0, tier1);
    // Farm
    STRUCTURE.add(_realmId, 1, tier2);
    // Aquarium
    STRUCTURE.add(_realmId, 2, tier2);
    // Research Lab
    STRUCTURE.add(_realmId, 3, tier2);

    // Add to Gold supply
    DATA.addGoldSupply(_realmId, tier1);

    emit Build(_realmId);
  }

  function _builtMultipliers(uint256 _realmId)
    internal
    view
    returns (uint256, uint256)
  {
    uint256 multiplier = _stakedDaysElapsed(_realmId);

    return (multiplier / TIER_1, multiplier / TIER_2);
  }

  function _collectedDaysElapsed(uint256 _realmId)
    internal
    view
    returns (uint256)
  {
    return _daysElapsed(collected[_realmId]);
  }

  function _stakedDaysElapsed(uint256 _realmId)
    internal
    view
    returns (uint256)
  {
    return _daysElapsed(stakers[_realmId].stakedAt);
  }

  function _daysElapsed(uint256 _time) internal view returns (uint256) {
    if (block.timestamp <= _time) {
      return 0;
    }

    return (block.timestamp - _time) / (24 * 60 * 60);
  }

  function _rarity(uint256 _salt, uint256[] memory probability)
    internal
    view
    returns (uint256)
  {
    uint256 rand = uint256(
      keccak256(
        abi.encodePacked(
          block.number,
          block.timestamp,
          randomizer.retrieve(_salt)
        )
      )
    ) % 100;

    uint256 j = 0;
    for (; j < probability.length; j++) {
      if (rand <= probability[j]) {
        break;
      }
    }
    return j;
  }

  function _onlyStaker(uint256 _realmId) internal view {
    require(
      stakers[_realmId].staker == msg.sender,
      "Staking: You did not stake this realm"
    );
  }
}

File 2 of 5 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 3 of 5 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 5 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 5 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_realm","type":"address"},{"internalType":"address","name":"_data","type":"address"},{"internalType":"address","name":"_structure","type":"address"},{"internalType":"address","name":"_resource","type":"address"},{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_rand","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"}],"name":"Build","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"}],"name":"Collected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"}],"name":"CollectedWithResourceId","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resource","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"structure","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"multipler","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DataAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"}],"name":"ResourceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"resourceId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"realmId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DATA","outputs":[{"internalType":"contract IData","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER","outputs":[{"internalType":"contract IManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_COLLECT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REALM","outputs":[{"internalType":"contract IRealm","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESOURCE","outputs":[{"internalType":"contract IResource","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STRUCTURE","outputs":[{"internalType":"contract IStructure","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIER_1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIER_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bonusProbability","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"},{"internalType":"uint256","name":"_resourceId","type":"uint256"}],"name":"changeResource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"}],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"},{"internalType":"uint256","name":"_resourceId","type":"uint256"}],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"collected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cultureIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"foodIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomizer","outputs":[{"internalType":"contract IRand","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"resourceProbability","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRandomizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"},{"internalType":"uint256","name":"_resourceId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakers","outputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"resourceId","type":"uint256"},{"internalType":"uint256","name":"stakedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"techIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_realmId","type":"uint256"}],"name":"unstakeAndBuild","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101a06040526028610120908152605561014052605f610160526064610180526200002e906004908162000278565b5060408051610160810182526028815260346020820152603e9181019190915260486060820152604d6080820152605260a0820152605760c0820152605b60e0820152605e610100820152606161012082015260646101408201526200009990600590600b62000278565b5060408051610160810182526000815260086020820152600991810191909152600a6060820152600b60808201819052600c60a0830152600d60c0830152600e60e0830152600f61010083015260106101208301526011610140830152620001049160069162000278565b50604080516101608101825260008152601260208201526013918101919091526014606082015260156080820152601660a0820152601760c0820152601860e08201526019610100820152601a610120820152601b6101408201526200016f90600790600b62000278565b50604080516101608101825260008152601c602080830191909152601d92820192909252601e6060820152601f608082015260a0810191909152602160c0820152602260e0820152602361010082015260246101208201526025610140820152620001df90600890600b62000278565b50348015620001ed57600080fd5b506040516200220938038062002209833981016040819052620002109162000301565b60016000819055805460ff19169055606095861b6001600160601b031990811660805294861b851660a05292851b841660c05290841b831660e05290921b1661010052600980546001600160a01b0319166001600160a01b0390921691909117905562000381565b828054828255906000526020600020908101928215620002bb579160200282015b82811115620002bb578251829060ff1690559160200191906001019062000299565b50620002c9929150620002cd565b5090565b5b80821115620002c95760008155600101620002ce565b80516001600160a01b0381168114620002fc57600080fd5b919050565b60008060008060008060c087890312156200031a578182fd5b6200032587620002e4565b95506200033560208801620002e4565b94506200034560408801620002e4565b93506200035560608801620002e4565b92506200036560808801620002e4565b91506200037560a08801620002e4565b90509295509295509295565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c611db66200045360003960008181610250015281816105f0015281816108f50152610b260152600081816102a60152611a8f01526000818161027701528181610fc20152818161109101528181611154015281816111c10152818161122d015281816112b30152818161133b01526113c30152600081816101d901528181610f070152818161144401526117d80152600081816103590152818161053c015281816107960152610a6e0152611db66000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806377e840ed116100f9578063b028d9bd11610097578063cfa6f82711610071578063cfa6f827146103f2578063de85b0d214610405578063f10fb58414610418578063fd5e6dd11461042b57600080fd5b8063b028d9bd146103b9578063ca84ebf6146103cc578063ce3f865f146103df57600080fd5b80637b3449c6116100d35780637b3449c61461038e57806382039945146103a15780638456cb59146103a95780639dd58485146103b157600080fd5b806377e840ed1461033457806379604a17146103545780637b0472f01461037b57600080fd5b80632b3ed84e116101665780634e61b382116101405780634e61b382146102e5578063547fce7c146102f85780635c975abb1461030b578063767bcab51461032157600080fd5b80632b3ed84e146102a15780632e17de78146102c85780633f4ba83a146102dd57600080fd5b8063073d3f69146101ae5780630c0fd886146101d4578063150b7a02146102135780631b2df8501461024b5780631b62a26b146102725780631d2a056114610299575b600080fd5b6101c16101bc366004611be2565b61048a565b6040519081526020015b60405180910390f35b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101cb565b610232610221366004611b2c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101cb565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6101c1600381565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6102db6102d6366004611be2565b6104ab565b005b6102db6105db565b6102db6102f3366004611be2565b610698565b6102db610306366004611c12565b610836565b60015460ff1660405190151581526020016101cb565b6102db61032f366004611b0b565b6108e0565b6101c1610342366004611be2565b60036020526000908152604090205481565b6101fb7f000000000000000000000000000000000000000000000000000000000000000081565b6102db610389366004611c12565b6109b5565b6101c161039c366004611be2565b610b01565b6101c1600581565b6102db610b11565b6101c1600781565b6101c16103c7366004611be2565b610bcc565b6101c16103da366004611be2565b610bdc565b6102db6103ed366004611be2565b610bec565b6102db610400366004611c12565b610c86565b6101c1610413366004611be2565b610d2f565b6009546101fb906001600160a01b031681565b610465610439366004611be2565b60026020819052600091825260409091208054600182015491909201546001600160a01b039092169183565b604080516001600160a01b0390941684526020840192909252908201526060016101cb565b6004818154811061049a57600080fd5b600091825260209091200154905081565b600260005414156104d75760405162461bcd60e51b81526004016104ce90611c5d565b60405180910390fd5b6002600055806104e681610d3f565b600082815260026020819052604080832080546001600160a01b031916815560018101849055918201929092559051632142170760e11b8152306004820152336024820152604481018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b15801561058057600080fd5b505af1158015610594573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b2836040516105c991815260200190565b60405180910390a15050600160005550565b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c9060240160206040518083038186803b15801561063a57600080fd5b505afa15801561064e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190611bc2565b61068e5760405162461bcd60e51b81526004016104ce90611c94565b610696610db6565b565b600260005414156106bb5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156106e35760405162461bcd60e51b81526004016104ce90611c33565b806106ed81610d3f565b60008281526002602052604081209061070584610e49565b90508015610747576040805160608101825283546001600160a01b03168152600184015460208201526002840154918101919091526107479085908390610e67565b610750846111f8565b81546001600160a01b03191682556000600183018190556002830155604051632142170760e11b8152306004820152336024820152604481018590526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b28460405161082391815260200190565b60405180910390a1505060016000555050565b600260005414156108595760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156108815760405162461bcd60e51b81526004016104ce90611c33565b8161088b81610d3f565b6000838152600360209081526040808320429055600282529182902060010184905581518581529081018490527f8227d266a95a66123134db77083bdd41dc137c89c4af2d8e3807fbd01a7d814a91016105c9565b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c9060240160206040518083038186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190611bc2565b6109935760405162461bcd60e51b81526004016104ce90611c94565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156109d85760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610a005760405162461bcd60e51b81526004016104ce90611c33565b6000828152600260208181526040808420805460018201879055429482018590556001600160a01b0319908116339182161781178255600390935293819020929092559051632142170760e11b81526004810191909152306024820152604481018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90606401600060405180830381600087803b158015610ab257600080fd5b505af1158015610ac6573d6000803e3d6000fd5b505060408051868152602081018690527f925435fa7e37e5d9555bb18ce0d62bb9627d0846942e58e5291e9a2dded462ed93500190506105c9565b6007818154811061049a57600080fd5b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c9060240160206040518083038186803b158015610b7057600080fd5b505afa158015610b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba89190611bc2565b610bc45760405162461bcd60e51b81526004016104ce90611c94565b6106966114e8565b6005818154811061049a57600080fd5b6006818154811061049a57600080fd5b60026000541415610c0f5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610c375760405162461bcd60e51b81526004016104ce90611c33565b80610c4181610d3f565b610c4a8261153e565b6040518281527f278111f058fcc15883749957935fb9630ea32a108dd40081364d762353441ccb9060200160405180910390a150506001600055565b60026000541415610ca95760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610cd15760405162461bcd60e51b81526004016104ce90611c33565b81610cdb81610d3f565b610ce48361153e565b60008381526002602090815260409182902060010184905581518581529081018490527fb32ca7c02df8baee6d206c5ee948ff09143d5c6f1615eb6423d3d5d0ba6fceee91016105c9565b6008818154811061049a57600080fd5b6000818152600260205260409020546001600160a01b03163314610db35760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20596f7520646964206e6f74207374616b652074686973206044820152647265616c6d60d81b60648201526084016104ce565b50565b60015460ff16610dff5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104ce565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081815260036020526040812054610e61906115f7565b92915050565b6005821115610e7557600591505b600080610e8185611620565b915091506000610ee584604001516004805480602002602001604051908101604052809291908181526020018280548015610edb57602002820191906000526020600020905b815481526020019060010190808311610ec7575b5050505050611650565b610ef0906001611cc3565b90508360200151600014156110535761104e8660007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320c69e568a6040518263ffffffff1660e01b8152600401610f5391815260200190565b602060405180830381600087803b158015610f6d57600080fd5b505af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611bfa565b6040516328b9de8f60e11b8152600481018b9052600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635173bd1e90604401602060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190611bfa565b85888b61176e565b6111f0565b836020015160011415611116576040516328b9de8f60e11b81526004810187905260016024820181905261104e918891906000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635173bd1e906044015b602060405180830381600087803b1580156110d657600080fd5b505af11580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110e9190611bfa565b85878b61176e565b836020015160031415611183576040516328b9de8f60e11b8152600481018790526002602482015261104e9087906003906000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635173bd1e906044016110bc565b8360200151600514156111f0576040516328b9de8f60e11b815260048101879052600360248201526111f09087906005906000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635173bd1e906044016110bc565b505050505050565b60008061120483611620565b604051631417ed1b60e21b815260048101869052600060248201526044810183905291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561127957600080fd5b505af115801561128d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260016024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260026024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260036024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561141157600080fd5b505af1158015611425573d6000803e3d6000fd5b50506040516370f053c960e01b815260048101869052602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370f053c99150604401600060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050507f898976461822d775c98e0f8f205c19b8a52e69e8140f7238d6e671b0d62a9798836040516114db91815260200190565b60405180910390a1505050565b60015460ff161561150b5760405162461bcd60e51b81526004016104ce90611c33565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e2c565b6000818152600260208181526040808420815160608101835281546001600160a01b0316815260018201549381019390935290920154918101919091529061158583610e49565b9050600081116115d75760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a204e6f7468696e6720746f20636f6c6c656374000000000060448201526064016104ce565b6115e2838284610e67565b50506000908152600360205260409020429055565b600081421161160857506000919050565b620151806116168342611d0e565b610e619190611cdb565b600080600061162e846118b6565b905061163b600782611cdb565b611646600383611cdb565b9250925050915091565b600954604051638f88708b60e01b8152600481018490526000918291606491439142916001600160a01b031690638f88708b9060240160206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d69190611bfa565b60408051602081019490945283019190915260608201526080016040516020818303038152906040528051906020012060001c6117139190611d40565b905060005b83518110156117665783818151811061174157634e487b7160e01b600052603260045260246000fd5b6020026020010151821161175457611766565b8061175e81611d25565b915050611718565b949350505050565b8115801561177a575083155b15611784576118ad565b6000818484611793888a611cc3565b61179d9190611cc3565b6117a79190611cc3565b6117b19190611cef565b604051631417ed1b60e21b8152600481018a905260248101899052604481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b5050505061184688886118d1565b6040805189815260208101899052908101879052606081018690526080810184905260a0810185905260c0810183905260e081018290527f160c24405fa1a87e80632ea854c17b689e341ad9fc279fbd2429c7b73a3959b5906101000160405180910390a1505b50505050505050565b600081815260026020819052604082200154610e61906115f7565b806118da575050565b6000816001141561196f57600861193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8154811061195d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050611a61565b81600314156119d257600661193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8160051415611a61576007611a35836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b81548110611a5357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490505b80611a6b57505050565b604051631417ed1b60e21b81526004810184905260248101829052600160448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063505fb46c90606401600060405180830381600087803b158015611adb57600080fd5b505af11580156118ad573d6000803e3d6000fd5b80356001600160a01b0381168114611b0657600080fd5b919050565b600060208284031215611b1c578081fd5b611b2582611aef565b9392505050565b600080600080600060808688031215611b43578081fd5b611b4c86611aef565b9450611b5a60208701611aef565b935060408601359250606086013567ffffffffffffffff80821115611b7d578283fd5b818801915088601f830112611b90578283fd5b813581811115611b9e578384fd5b896020828501011115611baf578384fd5b9699959850939650602001949392505050565b600060208284031215611bd3578081fd5b81518015158114611b25578182fd5b600060208284031215611bf3578081fd5b5035919050565b600060208284031215611c0b578081fd5b5051919050565b60008060408385031215611c24578182fd5b50508035926020909101359150565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526015908201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604082015260600190565b60008219821115611cd657611cd6611d54565b500190565b600082611cea57611cea611d6a565b500490565b6000816000190483118215151615611d0957611d09611d54565b500290565b600082821015611d2057611d20611d54565b500390565b6000600019821415611d3957611d39611d54565b5060010190565b600082611d4f57611d4f611d6a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea2646970667358221220d96958bfc0e88fe1f9d8481a0fc7ee08ce8c5a3071dea2747c195a8ecebf1a6964736f6c634300080400330000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f91496000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe270000000000000000000000004e572433a3bfa336b6396d13afc9f69b58252861000000000000000000000000ddb6c9913ba10a1d4896894c77198f663007dfb0

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806377e840ed116100f9578063b028d9bd11610097578063cfa6f82711610071578063cfa6f827146103f2578063de85b0d214610405578063f10fb58414610418578063fd5e6dd11461042b57600080fd5b8063b028d9bd146103b9578063ca84ebf6146103cc578063ce3f865f146103df57600080fd5b80637b3449c6116100d35780637b3449c61461038e57806382039945146103a15780638456cb59146103a95780639dd58485146103b157600080fd5b806377e840ed1461033457806379604a17146103545780637b0472f01461037b57600080fd5b80632b3ed84e116101665780634e61b382116101405780634e61b382146102e5578063547fce7c146102f85780635c975abb1461030b578063767bcab51461032157600080fd5b80632b3ed84e146102a15780632e17de78146102c85780633f4ba83a146102dd57600080fd5b8063073d3f69146101ae5780630c0fd886146101d4578063150b7a02146102135780631b2df8501461024b5780631b62a26b146102725780631d2a056114610299575b600080fd5b6101c16101bc366004611be2565b61048a565b6040519081526020015b60405180910390f35b6101fb7f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f9149681565b6040516001600160a01b0390911681526020016101cb565b610232610221366004611b2c565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101cb565b6101fb7f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b5825286181565b6101fb7f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a81565b6101c1600381565b6101fb7f00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe2781565b6102db6102d6366004611be2565b6104ab565b005b6102db6105db565b6102db6102f3366004611be2565b610698565b6102db610306366004611c12565b610836565b60015460ff1660405190151581526020016101cb565b6102db61032f366004611b0b565b6108e0565b6101c1610342366004611be2565b60036020526000908152604090205481565b6101fb7f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb81565b6102db610389366004611c12565b6109b5565b6101c161039c366004611be2565b610b01565b6101c1600581565b6102db610b11565b6101c1600781565b6101c16103c7366004611be2565b610bcc565b6101c16103da366004611be2565b610bdc565b6102db6103ed366004611be2565b610bec565b6102db610400366004611c12565b610c86565b6101c1610413366004611be2565b610d2f565b6009546101fb906001600160a01b031681565b610465610439366004611be2565b60026020819052600091825260409091208054600182015491909201546001600160a01b039092169183565b604080516001600160a01b0390941684526020840192909252908201526060016101cb565b6004818154811061049a57600080fd5b600091825260209091200154905081565b600260005414156104d75760405162461bcd60e51b81526004016104ce90611c5d565b60405180910390fd5b6002600055806104e681610d3f565b600082815260026020819052604080832080546001600160a01b031916815560018101849055918201929092559051632142170760e11b8152306004820152336024820152604481018490526001600160a01b037f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb16906342842e0e90606401600060405180830381600087803b15801561058057600080fd5b505af1158015610594573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b2836040516105c991815260200190565b60405180910390a15050600160005550565b604051630935e01b60e21b81523360048201527f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b582528616001600160a01b0316906324d7806c9060240160206040518083038186803b15801561063a57600080fd5b505afa15801561064e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106729190611bc2565b61068e5760405162461bcd60e51b81526004016104ce90611c94565b610696610db6565b565b600260005414156106bb5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156106e35760405162461bcd60e51b81526004016104ce90611c33565b806106ed81610d3f565b60008281526002602052604081209061070584610e49565b90508015610747576040805160608101825283546001600160a01b03168152600184015460208201526002840154918101919091526107479085908390610e67565b610750846111f8565b81546001600160a01b03191682556000600183018190556002830155604051632142170760e11b8152306004820152336024820152604481018590526001600160a01b037f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb16906342842e0e90606401600060405180830381600087803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b505050507f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b28460405161082391815260200190565b60405180910390a1505060016000555050565b600260005414156108595760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff16156108815760405162461bcd60e51b81526004016104ce90611c33565b8161088b81610d3f565b6000838152600360209081526040808320429055600282529182902060010184905581518581529081018490527f8227d266a95a66123134db77083bdd41dc137c89c4af2d8e3807fbd01a7d814a91016105c9565b604051630935e01b60e21b81523360048201527f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b582528616001600160a01b0316906324d7806c9060240160206040518083038186803b15801561093f57600080fd5b505afa158015610953573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109779190611bc2565b6109935760405162461bcd60e51b81526004016104ce90611c94565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156109d85760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610a005760405162461bcd60e51b81526004016104ce90611c33565b6000828152600260208181526040808420805460018201879055429482018590556001600160a01b0319908116339182161781178255600390935293819020929092559051632142170760e11b81526004810191909152306024820152604481018490526001600160a01b037f0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb16906342842e0e90606401600060405180830381600087803b158015610ab257600080fd5b505af1158015610ac6573d6000803e3d6000fd5b505060408051868152602081018690527f925435fa7e37e5d9555bb18ce0d62bb9627d0846942e58e5291e9a2dded462ed93500190506105c9565b6007818154811061049a57600080fd5b604051630935e01b60e21b81523360048201527f0000000000000000000000004e572433a3bfa336b6396d13afc9f69b582528616001600160a01b0316906324d7806c9060240160206040518083038186803b158015610b7057600080fd5b505afa158015610b84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba89190611bc2565b610bc45760405162461bcd60e51b81526004016104ce90611c94565b6106966114e8565b6005818154811061049a57600080fd5b6006818154811061049a57600080fd5b60026000541415610c0f5760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610c375760405162461bcd60e51b81526004016104ce90611c33565b80610c4181610d3f565b610c4a8261153e565b6040518281527f278111f058fcc15883749957935fb9630ea32a108dd40081364d762353441ccb9060200160405180910390a150506001600055565b60026000541415610ca95760405162461bcd60e51b81526004016104ce90611c5d565b600260005560015460ff1615610cd15760405162461bcd60e51b81526004016104ce90611c33565b81610cdb81610d3f565b610ce48361153e565b60008381526002602090815260409182902060010184905581518581529081018490527fb32ca7c02df8baee6d206c5ee948ff09143d5c6f1615eb6423d3d5d0ba6fceee91016105c9565b6008818154811061049a57600080fd5b6000818152600260205260409020546001600160a01b03163314610db35760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a20596f7520646964206e6f74207374616b652074686973206044820152647265616c6d60d81b60648201526084016104ce565b50565b60015460ff16610dff5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104ce565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081815260036020526040812054610e61906115f7565b92915050565b6005821115610e7557600591505b600080610e8185611620565b915091506000610ee584604001516004805480602002602001604051908101604052809291908181526020018280548015610edb57602002820191906000526020600020905b815481526020019060010190808311610ec7575b5050505050611650565b610ef0906001611cc3565b90508360200151600014156110535761104e8660007f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f914966001600160a01b03166320c69e568a6040518263ffffffff1660e01b8152600401610f5391815260200190565b602060405180830381600087803b158015610f6d57600080fd5b505af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190611bfa565b6040516328b9de8f60e11b8152600481018b9052600060248201527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b031690635173bd1e90604401602060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190611bfa565b85888b61176e565b6111f0565b836020015160011415611116576040516328b9de8f60e11b81526004810187905260016024820181905261104e918891906000906001600160a01b037f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a1690635173bd1e906044015b602060405180830381600087803b1580156110d657600080fd5b505af11580156110ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110e9190611bfa565b85878b61176e565b836020015160031415611183576040516328b9de8f60e11b8152600481018790526002602482015261104e9087906003906000906001600160a01b037f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a1690635173bd1e906044016110bc565b8360200151600514156111f0576040516328b9de8f60e11b815260048101879052600360248201526111f09087906005906000906001600160a01b037f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a1690635173bd1e906044016110bc565b505050505050565b60008061120483611620565b604051631417ed1b60e21b815260048101869052600060248201526044810183905291935091507f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561127957600080fd5b505af115801561128d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260016024820152604481018490527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260026024820152604481018490527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b5050604051631417ed1b60e21b81526004810186905260036024820152604481018490527f000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a6001600160a01b0316925063505fb46c9150606401600060405180830381600087803b15801561141157600080fd5b505af1158015611425573d6000803e3d6000fd5b50506040516370f053c960e01b815260048101869052602481018590527f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f914966001600160a01b031692506370f053c99150604401600060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050507f898976461822d775c98e0f8f205c19b8a52e69e8140f7238d6e671b0d62a9798836040516114db91815260200190565b60405180910390a1505050565b60015460ff161561150b5760405162461bcd60e51b81526004016104ce90611c33565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e2c565b6000818152600260208181526040808420815160608101835281546001600160a01b0316815260018201549381019390935290920154918101919091529061158583610e49565b9050600081116115d75760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a204e6f7468696e6720746f20636f6c6c656374000000000060448201526064016104ce565b6115e2838284610e67565b50506000908152600360205260409020429055565b600081421161160857506000919050565b620151806116168342611d0e565b610e619190611cdb565b600080600061162e846118b6565b905061163b600782611cdb565b611646600383611cdb565b9250925050915091565b600954604051638f88708b60e01b8152600481018490526000918291606491439142916001600160a01b031690638f88708b9060240160206040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d69190611bfa565b60408051602081019490945283019190915260608201526080016040516020818303038152906040528051906020012060001c6117139190611d40565b905060005b83518110156117665783818151811061174157634e487b7160e01b600052603260045260246000fd5b6020026020010151821161175457611766565b8061175e81611d25565b915050611718565b949350505050565b8115801561177a575083155b15611784576118ad565b6000818484611793888a611cc3565b61179d9190611cc3565b6117a79190611cc3565b6117b19190611cef565b604051631417ed1b60e21b8152600481018a905260248101899052604481018290529091507f000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f914966001600160a01b03169063505fb46c90606401600060405180830381600087803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b5050505061184688886118d1565b6040805189815260208101899052908101879052606081018690526080810184905260a0810185905260c0810183905260e081018290527f160c24405fa1a87e80632ea854c17b689e341ad9fc279fbd2429c7b73a3959b5906101000160405180910390a1505b50505050505050565b600081815260026020819052604082200154610e61906115f7565b806118da575050565b6000816001141561196f57600861193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8154811061195d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050611a61565b81600314156119d257600661193f836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b8160051415611a61576007611a35836005805480602002602001604051908101604052809291908181526020018280548015610edb5760200282019190600052602060002090815481526020019060010190808311610ec7575050505050611650565b81548110611a5357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490505b80611a6b57505050565b604051631417ed1b60e21b81526004810184905260248101829052600160448201527f00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe276001600160a01b03169063505fb46c90606401600060405180830381600087803b158015611adb57600080fd5b505af11580156118ad573d6000803e3d6000fd5b80356001600160a01b0381168114611b0657600080fd5b919050565b600060208284031215611b1c578081fd5b611b2582611aef565b9392505050565b600080600080600060808688031215611b43578081fd5b611b4c86611aef565b9450611b5a60208701611aef565b935060408601359250606086013567ffffffffffffffff80821115611b7d578283fd5b818801915088601f830112611b90578283fd5b813581811115611b9e578384fd5b896020828501011115611baf578384fd5b9699959850939650602001949392505050565b600060208284031215611bd3578081fd5b81518015158114611b25578182fd5b600060208284031215611bf3578081fd5b5035919050565b600060208284031215611c0b578081fd5b5051919050565b60008060408385031215611c24578182fd5b50508035926020909101359150565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526015908201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604082015260600190565b60008219821115611cd657611cd6611d54565b500190565b600082611cea57611cea611d6a565b500490565b6000816000190483118215151615611d0957611d09611d54565b500290565b600082821015611d2057611d20611d54565b500390565b6000600019821415611d3957611d39611d54565b5060010190565b600082611d4f57611d4f611d6a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea2646970667358221220d96958bfc0e88fe1f9d8481a0fc7ee08ce8c5a3071dea2747c195a8ecebf1a6964736f6c63430008040033

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

0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f91496000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe270000000000000000000000004e572433a3bfa336b6396d13afc9f69b58252861000000000000000000000000ddb6c9913ba10a1d4896894c77198f663007dfb0

-----Decoded View---------------
Arg [0] : _realm (address): 0x4de95c1E202102E22E801590C51D7B979f167FBB
Arg [1] : _data (address): 0xAae3A78EA8De1b89C64D5c64A26d5b1FC8F91496
Arg [2] : _structure (address): 0xAc3b203e4B6555611A518D05483733b82156CA8a
Arg [3] : _resource (address): 0x42E9b4353BddF972e7c962f3311F8fB30B08fE27
Arg [4] : _manager (address): 0x4E572433A3Bfa336b6396D13AfC9F69b58252861
Arg [5] : _rand (address): 0xddb6c9913Ba10a1D4896894C77198F663007dFB0

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000004de95c1e202102e22e801590c51d7b979f167fbb
Arg [1] : 000000000000000000000000aae3a78ea8de1b89c64d5c64a26d5b1fc8f91496
Arg [2] : 000000000000000000000000ac3b203e4b6555611a518d05483733b82156ca8a
Arg [3] : 00000000000000000000000042e9b4353bddf972e7c962f3311f8fb30b08fe27
Arg [4] : 0000000000000000000000004e572433a3bfa336b6396d13afc9f69b58252861
Arg [5] : 000000000000000000000000ddb6c9913ba10a1d4896894c77198f663007dfb0


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.