contract SmartContractFactory is BurnableToken
{
    string public name = "SmartContractFactory";
    string public symbol = "SCF";
    uint public decimals = 8 ;
    uint public INITIAL_SUPPLY = 1000000000000000000;
    uint public LOCKED_SUPPLY = 700000000000000000;
    uint public LOCKUP_FINISH_TIMESTAMP =  1568541600; // 15 September 2019 10:00 AM GMT

    constructor() public {
        owner = msg.sender;
        totalSupply = INITIAL_SUPPLY;

        // Circulating supply
        balances[owner] = totalSupply - LOCKED_SUPPLY;
        // Locked supply 
        // Lock up tokens by moving them to our contract address 
        // Nobody has the key to access it, because address is created dynamically during deployment
        balances[address(this)]= LOCKED_SUPPLY;

        emit Transfer(address(0), owner, totalSupply);
    }
    
    function isLockupFinished() public view returns (bool success)
    {
      return (block.timestamp >= LOCKUP_FINISH_TIMESTAMP);
    }
        
    function releaseLockup() public onlyOwner {
        require(isLockupFinished());

        uint256 amount = balances[address(this)];
        require(amount > 0);
        
        // Transfer tokens from contract address back to owner address
        BasicToken(address(this)).transfer(owner, amount);
    }

    // ------------------------------------------------------------------------
    // Don't accept ETH
    // ------------------------------------------------------------------------
    function () public payable {
        revert();
    }
}
// ----------------------------------------------------------------------------
// SmartContractFactory contract
// ----------------------------------------------------------------------------
function () public payable {
    revert();
}

// ------------------------------------------------------------------------
// Don't accept ETH
// ------------------------------------------------------------------------