Contract Address Details
contract

0xd93C2AA349d1131BB2A6e1D3732FD41a059B5803

Contract Name
AstralColossus
Creator
0x39edaa–da684f at 0x106f33–10de84
Balance
3.2 xDai ( )
Tokens
Fetching tokens...
Transactions
1,948 Transactions
Transfers
0 Transfers
Gas Used
536,084,365
Last Balance Update
25216099
Contract name:
AstralColossus




Optimization enabled
false
Compiler version
v0.7.6+commit.7338295f




EVM Version
default




Verified at
2021-10-03T20:01:36.593244Z

Constructor Arguments

000000000000000000000000b5ce86c2ab9e2403ab47acfbe501845e2480fad900000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb740000000000000000000000008e7fc9c67cf2bc5d001682d17355dc5c7f41e4c1

Arg [0] (address) : 0xb5ce86c2ab9e2403ab47acfbe501845e2480fad9
Arg [1] (address) : 0x27a166ae00c33bef64306760acd7c9fd3c2feb74
Arg [2] (address) : 0x8e7fc9c67cf2bc5d001682d17355dc5c7f41e4c1

              

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma experimental ABIEncoderV2;

interface IDarkForestCore {
    enum PlanetType {PLANET, SILVER_MINE, RUINS, TRADING_POST, SILVER_BANK}

    struct Planet {
        address owner;
        uint256 range;
        uint256 speed;
        
        uint256 defense;
        uint256 population;
        uint256 populationCap;
        uint256 populationGrowth;
        uint256 silverCap;
        uint256 silverGrowth;
        uint256 silver;
        uint256 planetLevel;
        PlanetType planetType;
        bool isHomePlanet;
    }

    function planets(uint256 key) external view returns (Planet memory);
    
    function refreshPlanet(uint256 location) external;
    
    function initializePlayer(
        uint256[2] memory _a,
        uint256[2][2] memory _b,
        uint256[2] memory _c,
        uint256[8] memory _input
    ) external returns (uint256);
    
    function findArtifact(
        uint256[2] memory _a,
        uint256[2][2] memory _b,
        uint256[2] memory _c,
        uint256[7] memory _input
    ) external;

    function planetArtifacts(uint256 key) external view returns (uint256[] memory);
    
    function transferOwnership(uint256 _location, address _player) external;
    
    function withdrawSilver(uint256 locationId, uint256 amount) external;
}

interface IDarkForestTokens {
  enum ArtifactRarity {Unknown, Common, Rare, Epic, Legendary, Mythic}
  enum Biome {
      Unknown,
      Ocean,
      Forest,
      Grassland,
      Tundra,
      Swamp,
      Desert,
      Ice,
      Wasteland,
      Lava,
      Corrupted
  }
  enum ArtifactType {
      Unknown,
      Monolith,
      Colossus,
      Spaceship,
      Pyramid,
      Wormhole,
      PlanetaryShield,
      PhotoidCannon,
      BloomFilter,
      BlackDomain
  }
  struct Artifact {
      bool isInitialized;
      uint256 id;
      uint256 planetDiscoveredOn;
      ArtifactRarity rarity;
      Biome planetBiome;
      uint256 mintedAtTimestamp;
      address discoverer;
      ArtifactType artifactType;
      uint256 lastActivated;
      uint256 lastDeactivated;
      uint256 wormholeTo;
  }
  function getArtifact(uint256 tokenId) external view returns (Artifact memory);
}


contract AstralColossus {
    event Contribution(address indexed player, uint256 indexed points);

    struct FoundryData {
        uint256[2] a;
        uint256[2][2] b;
        uint256[2] c;
        uint256[7] input;
    }
    
    // Number of players => player address
    uint256 public playerCounter;

    mapping(uint256 => address) public players;

    bytes32 constant artifactOwnerRevertReason = keccak256(bytes("you can only find artifacts on planets you own"));
    
    address public owner;
    IDarkForestCore immutable public coreContract;
    IDarkForestTokens immutable public tokensContract;
    
    mapping(uint256 => address) public planetOwners;

    mapping(address => uint256) public contributions;

    uint256[] public ARTIFACT_POINT_VALUES = [0, 2000, 10000, 200000, 3000000, 20000000];

    modifier onlyOwner() {
        require(msg.sender == owner, "caller not owner");
        _;
    }
    
    constructor(address _owner, IDarkForestCore _coreContract, IDarkForestTokens _tokensContract) {
        owner = _owner;
        coreContract = _coreContract;
        tokensContract = _tokensContract;
    }
    
    function setOwner(address _owner) external onlyOwner {
        owner = _owner;
    }
    
    function initializePlayer(
        uint256[2] memory _a,
        uint256[2][2] memory _b,
        uint256[2] memory _c,
        uint256[8] memory _input
    ) external onlyOwner returns (uint256) {
        return coreContract.initializePlayer(_a, _b, _c, _input);
    }
    
    function getRefreshedPlanet(uint256 _planetId) internal returns (IDarkForestCore.Planet memory) {
        coreContract.refreshPlanet(_planetId);
        return coreContract.planets(_planetId);
    }
    
    function updatePlanetOwners(uint256[] calldata _planetIds) external {
        for (uint256 i = 0; i < _planetIds.length; i++) {
            uint256 planetId = _planetIds[i];
            address planetOwner = getRefreshedPlanet(planetId).owner;
            /* only the planet owner can confirm their ownership */
            if (planetOwner != msg.sender) continue;
            planetOwners[planetId] = planetOwner;
        }
    }
    
    function returnPlanet(uint256 _planetId) internal {
        address planetOwner = planetOwners[_planetId];
        /* backup if register ownership didn't happen */
        if (planetOwner == address(0)) planetOwner = msg.sender;
        coreContract.transferOwnership(_planetId, planetOwner);
    }
    
    function processAndReturnPlanets(
        uint256[] calldata _spacetimeRipIds,
        FoundryData[] calldata _foundriesData
    ) external {
        uint256 currContribution;
        for (uint256 i = 0; i < _spacetimeRipIds.length; i++) {
            uint256 planetId = _spacetimeRipIds[i];
            IDarkForestCore.Planet memory planet = getRefreshedPlanet(planetId);
            if (planet.owner != address(this)) continue;
            if (planet.silver > 100) {
                // add new players to the mapping
                if(contributions[msg.sender] == 0) {
                  players[playerCounter] = msg.sender;
                  playerCounter++;
                }
                coreContract.withdrawSilver(planetId, planet.silver);
                contributions[msg.sender] += planet.silver / 1000;

                currContribution += planet.silver / 1000;
            }
            returnPlanet(planetId);
        }
        
        for (uint256 i = 0; i < _foundriesData.length; i++) {
            FoundryData calldata foundryData = _foundriesData[i];
            try coreContract.findArtifact(foundryData.a, foundryData.b, foundryData.c, foundryData.input) {
              // add new players to the mapping
              if(contributions[msg.sender] == 0) {
                players[playerCounter] = msg.sender;
                playerCounter++;
              }
              // most recent artifact will be at the end of the array
              uint256 planetId = foundryData.input[0];
              uint256[] memory artifacts = coreContract.planetArtifacts(planetId);
              uint256 foundArtifactId = artifacts[artifacts.length - 1];
              IDarkForestTokens.Artifact memory foundArtifact = tokensContract.getArtifact(foundArtifactId);
              contributions[msg.sender] += ARTIFACT_POINT_VALUES[uint256(foundArtifact.rarity)];
              currContribution += ARTIFACT_POINT_VALUES[uint256(foundArtifact.rarity)];
            }
            catch (bytes memory reason) {
                /* return the planet in all cases except if when player doesn't own artifact */
                if (keccak256(reason) == artifactOwnerRevertReason) continue;
            }
            returnPlanet(foundryData.input[0]);
        }
        emit Contribution(msg.sender, currContribution);


    }
    receive() external payable {}
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"_coreContract","internalType":"contract IDarkForestCore"},{"type":"address","name":"_tokensContract","internalType":"contract IDarkForestTokens"}]},{"type":"event","name":"Contribution","inputs":[{"type":"address","name":"player","internalType":"address","indexed":true},{"type":"uint256","name":"points","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"ARTIFACT_POINT_VALUES","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"contributions","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDarkForestCore"}],"name":"coreContract","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"initializePlayer","inputs":[{"type":"uint256[2]","name":"_a","internalType":"uint256[2]"},{"type":"uint256[2][2]","name":"_b","internalType":"uint256[2][2]"},{"type":"uint256[2]","name":"_c","internalType":"uint256[2]"},{"type":"uint256[8]","name":"_input","internalType":"uint256[8]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"planetOwners","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"playerCounter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"players","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"processAndReturnPlanets","inputs":[{"type":"uint256[]","name":"_spacetimeRipIds","internalType":"uint256[]"},{"type":"tuple[]","name":"_foundriesData","internalType":"struct AstralColossus.FoundryData[]","components":[{"type":"uint256[2]","name":"a","internalType":"uint256[2]"},{"type":"uint256[2][2]","name":"b","internalType":"uint256[2][2]"},{"type":"uint256[2]","name":"c","internalType":"uint256[2]"},{"type":"uint256[7]","name":"input","internalType":"uint256[7]"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOwner","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDarkForestTokens"}],"name":"tokensContract","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updatePlanetOwners","inputs":[{"type":"uint256[]","name":"_planetIds","internalType":"uint256[]"}]},{"type":"receive","stateMutability":"payable"}]
            

Deployed ByteCode

0x6080604052600436106100ab5760003560e01c8063b6d7a2fc11610064578063b6d7a2fc146101d9578063d161f02c14610204578063d3d04f8114610241578063e80db5db1461026a578063f71d96cb14610295578063ff5ee49d146102d2576100b2565b8063059a64aa146100b757806313af4035146100f457806342e94c901461011d5780634af05dc11461015a5780637518fa98146101835780638da5cb5b146101ae576100b2565b366100b257005b600080fd5b3480156100c357600080fd5b506100de60048036038101906100d99190611867565b61030f565b6040516100eb9190611c76565b60405180910390f35b34801561010057600080fd5b5061011b6004803603810190610116919061168a565b610333565b005b34801561012957600080fd5b50610144600480360381019061013f919061168a565b610407565b6040516101519190611c76565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c9190611718565b61041f565b005b34801561018f57600080fd5b506101986104f6565b6040516101a59190611c3b565b60405180910390f35b3480156101ba57600080fd5b506101c361051a565b6040516101d09190611b77565b60405180910390f35b3480156101e557600080fd5b506101ee610540565b6040516101fb9190611c76565b60405180910390f35b34801561021057600080fd5b5061022b600480360381019061022691906116b3565b610546565b6040516102389190611c76565b60405180910390f35b34801561024d57600080fd5b506102686004803603810190610263919061175d565b610693565b005b34801561027657600080fd5b5061027f610d6d565b60405161028c9190611c20565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190611867565b610d91565b6040516102c99190611b77565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190611867565b610dc4565b6040516103069190611b77565b60405180910390f35b6005818154811061031f57600080fd5b906000526020600020016000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ba90611c56565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046020528060005260406000206000915090505481565b60005b828290508110156104f157600083838381811061043b57fe5b905060200201359050600061044f82610df7565b6000015190503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461048f5750506104e4565b806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505b8080600101915050610422565b505050565b7f0000000000000000000000008e7fc9c67cf2bc5d001682d17355dc5c7f41e4c181565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cf90611c56565b60405180910390fd5b7f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7473ffffffffffffffffffffffffffffffffffffffff1663d161f02c868686866040518563ffffffff1660e01b81526004016106379493929190611bd9565b602060405180830381600087803b15801561065157600080fd5b505af1158015610665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106899190611890565b9050949350505050565b600080600090505b858590508110156108e15760008686838181106106b457fe5b90506020020135905060006106c882610df7565b90503073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146107085750506108d4565b606481610120015111156108c8576000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156107c35733600160008054815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008081548092919060010191905055505b7f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7473ffffffffffffffffffffffffffffffffffffffff1663443a397c838361012001516040518363ffffffff1660e01b8152600401610823929190611cba565b600060405180830381600087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506103e88161012001518161086557fe5b04600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506103e8816101200151816108c257fe5b04840193505b6108d182610f3b565b50505b808060010191505061069b565b5060005b83839050811015610d2157368484838181106108fd57fe5b90506101e0020190507f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7473ffffffffffffffffffffffffffffffffffffffff166398d042f282600001836040018460c00185610100016040518563ffffffff1660e01b81526004016109729493929190611b92565b600060405180830381600087803b15801561098c57600080fd5b505af192505050801561099d575060015b610a0e573d80600081146109cd576040519150601f19603f3d011682016040523d82523d6000602084013e6109d2565b606091505b506040518060600160405280602e8152602001611fa9602e91398051906020012081805190602001201415610a08575050610d14565b50610cf4565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415610abb5733600160008054815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008081548092919060010191905055505b60008161010001600060078110610ace57fe5b6020020135905060007f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7473ffffffffffffffffffffffffffffffffffffffff1663d3a3f551836040518263ffffffff1660e01b8152600401610b309190611c76565b60006040518083038186803b158015610b4857600080fd5b505afa158015610b5c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610b8591906117d2565b9050600081600183510381518110610b9957fe5b6020026020010151905060007f0000000000000000000000008e7fc9c67cf2bc5d001682d17355dc5c7f41e4c173ffffffffffffffffffffffffffffffffffffffff16638465ad44836040518263ffffffff1660e01b8152600401610bfe9190611c76565b6101606040518083038186803b158015610c1757600080fd5b505afa158015610c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4f9190611813565b9050600581606001516005811115610c6357fe5b81548110610c6d57fe5b9060005260206000200154600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600581606001516005811115610cd657fe5b81548110610ce057fe5b906000526020600020015487019650505050505b610d128161010001600060078110610d0857fe5b6020020135610f3b565b505b80806001019150506108e5565b50803373ffffffffffffffffffffffffffffffffffffffff167f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b60405160405180910390a35050505050565b7f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610dff61103d565b7f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7473ffffffffffffffffffffffffffffffffffffffff16633f324cf3836040518263ffffffff1660e01b8152600401610e589190611c76565b600060405180830381600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050507f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7473ffffffffffffffffffffffffffffffffffffffff166326c1e750836040518263ffffffff1660e01b8152600401610ee39190611c76565b6101a06040518083038186803b158015610efc57600080fd5b505afa158015610f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f34919061183d565b9050919050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fac573390505b7f00000000000000000000000027a166ae00c33bef64306760acd7c9fd3c2feb7473ffffffffffffffffffffffffffffffffffffffff166329507f7383836040518363ffffffff1660e01b8152600401611007929190611c91565b600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b505050505050565b604051806101a00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060048111156110b957fe5b81526020016000151581525090565b60006110db6110d684611d14565b611ce3565b905080828560408602820111156110f157600080fd5b60005b85811015611121578161110788826112f9565b8452602084019350604083019250506001810190506110f4565b5050509392505050565b600061113e61113984611d3a565b611ce3565b9050808285602086028201111561115457600080fd5b60005b85811015611184578161116a8882611660565b845260208401935060208301925050600181019050611157565b5050509392505050565b60006111a161119c84611d60565b611ce3565b905080828560208602820111156111b757600080fd5b60005b858110156111e757816111cd8882611660565b8452602084019350602083019250506001810190506111ba565b5050509392505050565b60006112046111ff84611d86565b611ce3565b9050808382526020820190508285602086028201111561122357600080fd5b60005b8581101561125357816112398882611675565b845260208401935060208301925050600181019050611226565b5050509392505050565b60008135905061126c81611f23565b92915050565b60008151905061128181611f23565b92915050565b600082601f83011261129857600080fd5b60026112a58482856110c8565b91505092915050565b60008083601f8401126112c057600080fd5b8235905067ffffffffffffffff8111156112d957600080fd5b602083019150836101e08202830111156112f257600080fd5b9250929050565b600082601f83011261130a57600080fd5b600261131784828561112b565b91505092915050565b600082601f83011261133157600080fd5b600861133e84828561118e565b91505092915050565b60008083601f84011261135957600080fd5b8235905067ffffffffffffffff81111561137257600080fd5b60208301915083602082028301111561138a57600080fd5b9250929050565b600082601f8301126113a257600080fd5b81516113b28482602086016111f1565b91505092915050565b6000815190506113ca81611f3a565b92915050565b6000815190506113df81611f51565b92915050565b6000815190506113f481611f61565b92915050565b60008151905061140981611f71565b92915050565b60008151905061141e81611f81565b92915050565b6000610160828403121561143757600080fd5b611442610160611ce3565b90506000611452848285016113bb565b600083015250602061146684828501611675565b602083015250604061147a84828501611675565b604083015250606061148e848285016113d0565b60608301525060806114a2848285016113fa565b60808301525060a06114b684828501611675565b60a08301525060c06114ca84828501611272565b60c08301525060e06114de848285016113e5565b60e0830152506101006114f384828501611675565b6101008301525061012061150984828501611675565b6101208301525061014061151f84828501611675565b6101408301525092915050565b60006101a0828403121561153f57600080fd5b61154a6101a0611ce3565b9050600061155a84828501611272565b600083015250602061156e84828501611675565b602083015250604061158284828501611675565b604083015250606061159684828501611675565b60608301525060806115aa84828501611675565b60808301525060a06115be84828501611675565b60a08301525060c06115d284828501611675565b60c08301525060e06115e684828501611675565b60e0830152506101006115fb84828501611675565b6101008301525061012061161184828501611675565b6101208301525061014061162784828501611675565b6101408301525061016061163d8482850161140f565b61016083015250610180611653848285016113bb565b6101808301525092915050565b60008135905061166f81611f91565b92915050565b60008151905061168481611f91565b92915050565b60006020828403121561169c57600080fd5b60006116aa8482850161125d565b91505092915050565b60008060008061020085870312156116ca57600080fd5b60006116d8878288016112f9565b94505060406116e987828801611287565b93505060c06116fa878288016112f9565b92505061010061170c87828801611320565b91505092959194509250565b6000806020838503121561172b57600080fd5b600083013567ffffffffffffffff81111561174557600080fd5b61175185828601611347565b92509250509250929050565b6000806000806040858703121561177357600080fd5b600085013567ffffffffffffffff81111561178d57600080fd5b61179987828801611347565b9450945050602085013567ffffffffffffffff8111156117b857600080fd5b6117c4878288016112ae565b925092505092959194509250565b6000602082840312156117e457600080fd5b600082015167ffffffffffffffff8111156117fe57600080fd5b61180a84828501611391565b91505092915050565b6000610160828403121561182657600080fd5b600061183484828501611424565b91505092915050565b60006101a0828403121561185057600080fd5b600061185e8482850161152c565b91505092915050565b60006020828403121561187957600080fd5b600061188784828501611660565b91505092915050565b6000602082840312156118a257600080fd5b60006118b084828501611675565b91505092915050565b60006118c583836119c6565b60408301905092915050565b60006118dd83836119e6565b60408301905092915050565b60006118f58383611b59565b60208301905092915050565b61190a81611e82565b82525050565b61191981611dda565b6119238184611e3a565b925061192e82611db2565b8060005b83811015611967576119448284611e77565b61194e87826118b9565b965061195983611e06565b925050600181019050611932565b505050505050565b61197881611de5565b6119828184611e3a565b925061198d82611dbc565b8060005b838110156119be5781516119a587826118d1565b96506119b083611e13565b925050600181019050611991565b505050505050565b6119d260408383611f12565b5050565b6119e260408383611f12565b5050565b6119ef81611df0565b6119f98184611e45565b9250611a0482611dc6565b8060005b83811015611a35578151611a1c87826118e9565b9650611a2783611e20565b925050600181019050611a08565b505050505050565b611a4681611df0565b611a508184611e50565b9250611a5b82611dc6565b8060005b83811015611a8c578151611a7387826118e9565b9650611a7e83611e20565b925050600181019050611a5f565b505050505050565b611aa060e08383611f12565b5050565b611aad81611dfb565b611ab78184611e5b565b9250611ac282611dd0565b8060005b83811015611af3578151611ada87826118e9565b9650611ae583611e2d565b925050600181019050611ac6565b505050505050565b611b0481611eca565b82525050565b611b1381611eee565b82525050565b6000611b26601083611e66565b91507f63616c6c6572206e6f74206f776e6572000000000000000000000000000000006000830152602082019050919050565b611b6281611ec0565b82525050565b611b7181611ec0565b82525050565b6000602082019050611b8c6000830184611901565b92915050565b60006101e082019050611ba860008301876119d6565b611bb56040830186611910565b611bc260c08301856119d6565b611bd0610100830184611a94565b95945050505050565b600061020082019050611bef6000830187611a3d565b611bfc604083018661196f565b611c0960c0830185611a3d565b611c17610100830184611aa4565b95945050505050565b6000602082019050611c356000830184611afb565b92915050565b6000602082019050611c506000830184611b0a565b92915050565b60006020820190508181036000830152611c6f81611b19565b9050919050565b6000602082019050611c8b6000830184611b68565b92915050565b6000604082019050611ca66000830185611b68565b611cb36020830184611901565b9392505050565b6000604082019050611ccf6000830185611b68565b611cdc6020830184611b68565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715611d0a57611d09611f21565b5b8060405250919050565b600067ffffffffffffffff821115611d2f57611d2e611f21565b5b602082029050919050565b600067ffffffffffffffff821115611d5557611d54611f21565b5b602082029050919050565b600067ffffffffffffffff821115611d7b57611d7a611f21565b5b602082029050919050565b600067ffffffffffffffff821115611da157611da0611f21565b5b602082029050602081019050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000819050919050565b600060029050919050565b600060029050919050565b600060029050919050565b600060089050919050565b6000604082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600081905092915050565b600081905092915050565b600081905092915050565b600082825260208201905092915050565b600082905092915050565b6000611e8d82611ea0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611ed582611edc565b9050919050565b6000611ee782611ea0565b9050919050565b6000611ef982611f00565b9050919050565b6000611f0b82611ea0565b9050919050565b82818337600083830152505050565bfe5b611f2c81611e82565b8114611f3757600080fd5b50565b611f4381611e94565b8114611f4e57600080fd5b50565b60068110611f5e57600080fd5b50565b600a8110611f6e57600080fd5b50565b600b8110611f7e57600080fd5b50565b60058110611f8e57600080fd5b50565b611f9a81611ec0565b8114611fa557600080fd5b5056fe796f752063616e206f6e6c792066696e6420617274696661637473206f6e20706c616e65747320796f75206f776ea2646970667358221220a8596fd5e174d3ed6eaba08340543b74e8a27f0a3212bcdfd3fe0c1c4ecbf38a64736f6c63430007060033