/** * Source Code first verified at https://etherscan.io on Thursday, May 2, 2019 (UTC) */ pragma solidity 0.4.24; contract DocSignature { struct SignProcess { bytes16 id; bytes16[] participants; } address controller; mapping(address => bool) isOwner; mapping(bytes => SignProcess[]) documents; address[] public owners; constructor(address _controller, address _owner) public { controller = _controller; isOwner[_owner] = true; owners.push(_owner); } modifier notNull(address _address) { require(_address != 0); _; } function addOwner(address _owner) public notNull(_owner) returns (bool) { require(isOwner[msg.sender]); isOwner[_owner] = true; owners.push(_owner); return true; } function removeOwner(address _owner) public notNull(_owner) returns (bool) { require(msg.sender != _owner && isOwner[msg.sender]); isOwner[_owner] = false; for (uint i=0; i