contract BCTcontract is Ownable {

  // the token being sold
  BCTToken public token;
  uint256 constant public tokenDecimals = 18;

  // totalSupply
  uint256 public totalSupply = 5000000000 * (10 ** uint256(tokenDecimals));


  constructor () public {

    token = createTokenContract();
    token.unpause();
  }





  //
  // Token related operations
  //

  // creates the token to be sold.
  // override this method to have crowdsale of a specific mintable token.
  function createTokenContract() internal returns (BCTToken) {
    return new BCTToken();
  }

  // enable token transferability
  function enableTokenTransferability() external onlyOwner {
    token.unpause();
  }

  // disable token transferability
  function disableTokenTransferability() external onlyOwner {
    token.pause();
  }

  // transfer token to designated address
  function transfer(address to, uint256 value) external onlyOwner returns (bool ok)  {
    uint256 converterdValue = value * (10 ** uint256(tokenDecimals));
    return token.transfer(to, converterdValue);
   }



}
function createTokenContract() internal returns (BCTToken) {
  return new BCTToken();
}

//
// Token related operations
//
// creates the token to be sold.
// override this method to have crowdsale of a specific mintable token.