pragma solidity ^0.4.19;

contract CharityCampaign {
    mapping (address => uint) contributions; 
    int128 feePercentage;
    uint p2;
    address processor;
    address beneficiary;

    function CharityCampaign(address _beneficiary, int128 _feePercentage) public {
        processor = msg.sender;
        beneficiary = _beneficiary;
        feePercentage = _feePercentage;
    }

    function contribute() payable public returns (uint feeCollected) {
        uint fee = msg.value * uint256(feePercentage / 100);
        fee = msg.value * (p2 / 100);
        contributions[msg.sender] = msg.value - fee;
        processor.transfer(fee);
        return fee;
    }

    function endCampaign() public {
        require(msg.sender == processor || msg.sender == beneficiary);
        selfdestruct(beneficiary);
    }
}