def unpack_metadata_statement(self, ms_dict=None, jwt_ms='', keyjar=None,
                                  cls=ClientMetadataStatement, liss=None):
        """
        Starting with a signed JWT or a JSON document unpack and verify all
        the separate metadata statements.

        :param ms_dict: Metadata statement as a dictionary
        :param jwt_ms: Metadata statement as JWT
        :param keyjar: Keys that should be used to verify the signature of the
            document
        :param cls: What type (Class) of metadata statement this is
        :param liss: list of FO identifiers that matters. The rest will be 
            ignored
        :return: A ParseInfo instance
        """

        if not keyjar:
            if self.jwks_bundle:
                keyjar = self.jwks_bundle.as_keyjar()
            else:
                keyjar = KeyJar()

        if jwt_ms:
            try:
                ms_dict = unfurl(jwt_ms)
            except JWSException as err:
                logger.error('Could not unfurl jwt_ms due to {}'.format(err))
                raise

        if ms_dict:
            return self._unpack(ms_dict, keyjar, cls, jwt_ms, liss)
        else:
            raise AttributeError('Need one of ms_dict or jwt_ms')
Starting with a signed JWT or a JSON document unpack and verify all
        the separate metadata statements.

        :param ms_dict: Metadata statement as a dictionary
        :param jwt_ms: Metadata statement as JWT
        :param keyjar: Keys that should be used to verify the signature of the
            document
        :param cls: What type (Class) of metadata statement this is
        :param liss: list of FO identifiers that matters. The rest will be 
            ignored
        :return: A ParseInfo instance