protected function parseAce($sddl)
{
preg_match(self::MATCH_ACE, $sddl, $matches);
$type = new AceType($matches[1]);
if (!empty($matches[2])) {
$flags = new AceFlags($this->getSddlFlagValue($matches[2], AceFlags::SHORT_NAME, 'flag'));
} else {
$flags = new AceFlags();
}
$rights = new AceRights($this->getSddlFlagValue($matches[3], AceRights::SHORT_NAME, 'right'));
$objectType = empty($matches[4]) ? null : new GUID($matches[4]);
$inheritedObjectType = empty($matches[5]) ? null : new GUID($matches[5]);
$sid = $this->getSid($matches[6], 'ACE trustee');
return (new Ace($type))->setFlags($flags)->setRights($rights)->setObjectType($objectType)->setInheritedObjectType($inheritedObjectType)->setTrustee($sid);
}