# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
from Tea.model import TeaModel


class AddIpRequest(TeaModel):
    def __init__(self, instance_id=None, ip_list=None, region_id=None, resource_group_id=None):
        # The ID of the Anti-DDoS Origin Enterprise instance.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin Enterprise instances.
        self.instance_id = instance_id  # type: str
        # The list of IP addresses that you want to add to the Anti-DDoS Origin Enterprise instance. This parameter is a string consisting of JSON arrays. Each element in a JSON array is a JSON struct that includes the following field:
        # 
        # *   **ip**: required. The IP address that you want to add. Data type: string.
        # 
        #     > The IP address must be the IP address of an asset that belongs to the current Alibaba Cloud account.
        self.ip_list = ip_list  # type: str
        # The region ID of the Anti-DDoS Origin Enterprise instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin Enterprise instance belongs in Resource Management. This parameter is empty by default, which indicates that the instance belongs to the default resource group.
        # 
        # For more information about resource groups, see [Create a resource group](~~94485~~).
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AddIpRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.ip_list is not None:
            result['IpList'] = self.ip_list
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('IpList') is not None:
            self.ip_list = m.get('IpList')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class AddIpResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AddIpResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class AddIpResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: AddIpResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(AddIpResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = AddIpResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class AddRdMemberListRequestMemberList(TeaModel):
    def __init__(self, uid=None):
        self.uid = uid  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AddRdMemberListRequestMemberList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.uid is not None:
            result['Uid'] = self.uid
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Uid') is not None:
            self.uid = m.get('Uid')
        return self


class AddRdMemberListRequest(TeaModel):
    def __init__(self, member_list=None):
        self.member_list = member_list  # type: list[AddRdMemberListRequestMemberList]

    def validate(self):
        if self.member_list:
            for k in self.member_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(AddRdMemberListRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['MemberList'] = []
        if self.member_list is not None:
            for k in self.member_list:
                result['MemberList'].append(k.to_map() if k else None)
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.member_list = []
        if m.get('MemberList') is not None:
            for k in m.get('MemberList'):
                temp_model = AddRdMemberListRequestMemberList()
                self.member_list.append(temp_model.from_map(k))
        return self


class AddRdMemberListShrinkRequest(TeaModel):
    def __init__(self, member_list_shrink=None):
        self.member_list_shrink = member_list_shrink  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AddRdMemberListShrinkRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.member_list_shrink is not None:
            result['MemberList'] = self.member_list_shrink
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('MemberList') is not None:
            self.member_list_shrink = m.get('MemberList')
        return self


class AddRdMemberListResponseBody(TeaModel):
    def __init__(self, request_id=None):
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AddRdMemberListResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class AddRdMemberListResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: AddRdMemberListResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(AddRdMemberListResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = AddRdMemberListResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class AttachAssetGroupToInstanceRequestAssetGroupList(TeaModel):
    def __init__(self, member_uid=None, name=None, region=None, type=None):
        # The UID of the member to which the asset belongs.
        self.member_uid = member_uid  # type: str
        # The ID of the asset that you want to add. If the asset is a Web Application Firewall (WAF) instance, specify the ID of the WAF instance.
        self.name = name  # type: str
        # The region ID of the asset.
        self.region = region  # type: str
        # The type of the asset.
        self.type = type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AttachAssetGroupToInstanceRequestAssetGroupList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.member_uid is not None:
            result['MemberUid'] = self.member_uid
        if self.name is not None:
            result['Name'] = self.name
        if self.region is not None:
            result['Region'] = self.region
        if self.type is not None:
            result['Type'] = self.type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('MemberUid') is not None:
            self.member_uid = m.get('MemberUid')
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('Type') is not None:
            self.type = m.get('Type')
        return self


class AttachAssetGroupToInstanceRequest(TeaModel):
    def __init__(self, asset_group_list=None, instance_id=None, region_id=None, source_ip=None):
        # The information about the asset to be associated.
        self.asset_group_list = asset_group_list  # type: list[AttachAssetGroupToInstanceRequestAssetGroupList]
        # The ID of the instance to query.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances of paid editions.
        self.instance_id = instance_id  # type: str
        # The ID of the region in which the instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The source IP address of the request. The system specifies this parameter.
        self.source_ip = source_ip  # type: str

    def validate(self):
        if self.asset_group_list:
            for k in self.asset_group_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(AttachAssetGroupToInstanceRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['AssetGroupList'] = []
        if self.asset_group_list is not None:
            for k in self.asset_group_list:
                result['AssetGroupList'].append(k.to_map() if k else None)
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.source_ip is not None:
            result['SourceIp'] = self.source_ip
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.asset_group_list = []
        if m.get('AssetGroupList') is not None:
            for k in m.get('AssetGroupList'):
                temp_model = AttachAssetGroupToInstanceRequestAssetGroupList()
                self.asset_group_list.append(temp_model.from_map(k))
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('SourceIp') is not None:
            self.source_ip = m.get('SourceIp')
        return self


class AttachAssetGroupToInstanceShrinkRequest(TeaModel):
    def __init__(self, asset_group_list_shrink=None, instance_id=None, region_id=None, source_ip=None):
        # The information about the asset to be associated.
        self.asset_group_list_shrink = asset_group_list_shrink  # type: str
        # The ID of the instance to query.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances of paid editions.
        self.instance_id = instance_id  # type: str
        # The ID of the region in which the instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The source IP address of the request. The system specifies this parameter.
        self.source_ip = source_ip  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AttachAssetGroupToInstanceShrinkRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.asset_group_list_shrink is not None:
            result['AssetGroupList'] = self.asset_group_list_shrink
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.source_ip is not None:
            result['SourceIp'] = self.source_ip
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('AssetGroupList') is not None:
            self.asset_group_list_shrink = m.get('AssetGroupList')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('SourceIp') is not None:
            self.source_ip = m.get('SourceIp')
        return self


class AttachAssetGroupToInstanceResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The request ID.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(AttachAssetGroupToInstanceResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class AttachAssetGroupToInstanceResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: AttachAssetGroupToInstanceResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(AttachAssetGroupToInstanceResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = AttachAssetGroupToInstanceResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class CheckAccessLogAuthRequest(TeaModel):
    def __init__(self, region_id=None, resource_group_id=None):
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # For more information about the valid values of this parameter, see [Regions and zones](~~188196~~).
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management. This parameter is empty by default, which indicates that the Anti-DDoS Origin instance belongs to the default resource group.
        # 
        # For more information about resource groups, see [Create a resource group](~~94485~~).
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(CheckAccessLogAuthRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class CheckAccessLogAuthResponseBody(TeaModel):
    def __init__(self, access_log_auth=None, request_id=None):
        # Indicates whether Anti-DDoS Origin was authorized to access Log Service. Valid values:
        # 
        # *   **true**: Anti-DDoS Origin was authorized.
        # *   **false**: Anti-DDoS Origin was not authorized.
        self.access_log_auth = access_log_auth  # type: bool
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(CheckAccessLogAuthResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.access_log_auth is not None:
            result['AccessLogAuth'] = self.access_log_auth
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('AccessLogAuth') is not None:
            self.access_log_auth = m.get('AccessLogAuth')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class CheckAccessLogAuthResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: CheckAccessLogAuthResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(CheckAccessLogAuthResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = CheckAccessLogAuthResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class CheckGrantRequest(TeaModel):
    def __init__(self, is_slr=None, region_id=None, resource_group_id=None):
        # Specifies whether to allow Anti-DDoS Origin to check the service-linked role. Valid values:
        # 
        # *   **true**\
        # *   **false**\
        self.is_slr = is_slr  # type: bool
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(CheckGrantRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.is_slr is not None:
            result['IsSlr'] = self.is_slr
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('IsSlr') is not None:
            self.is_slr = m.get('IsSlr')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class CheckGrantResponseBody(TeaModel):
    def __init__(self, request_id=None, status=None):
        # The ID of the request.
        self.request_id = request_id  # type: str
        # Indicates whether Anti-DDoS Origin is authorized to obtain information about the assets within the current Alibaba Cloud account. Valid values:
        # 
        # *   **1**: Anti-DDoS Origin is authorized to obtain information about the assets within the current Alibaba Cloud account.
        # *   **0**: Anti-DDoS Origin is not authorized to obtain information about the assets within the current Alibaba Cloud account.
        self.status = status  # type: int

    def validate(self):
        pass

    def to_map(self):
        _map = super(CheckGrantResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.status is not None:
            result['Status'] = self.status
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        return self


class CheckGrantResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: CheckGrantResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(CheckGrantResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = CheckGrantResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ConfigSchedruleOnDemandRequest(TeaModel):
    def __init__(self, instance_id=None, region_id=None, rule_action=None, rule_condition_cnt=None,
                 rule_condition_kpps=None, rule_condition_mbps=None, rule_name=None, rule_switch=None, rule_undo_begin_time=None,
                 rule_undo_end_time=None, rule_undo_mode=None, time_zone=None):
        # The ID of the on-demand instance.
        # 
        # >  You can call the [DescribeOnDemandInstance](~~152120~~) operation to query the IDs of all on-demand instances.
        self.instance_id = instance_id  # type: str
        # The region ID of the on-demand instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str
        # The scheduling action. Set the value to **declare**, which indicates that the route is advertised.
        self.rule_action = rule_action  # type: str
        # If the inbound bandwidth or packets consecutively exceed the threshold for the specified number of times, the scheduling rule is triggered and traffic is rerouted to the on-demand instance. The specified number of times is the value of this parameter.
        # 
        # >  The threshold of inbound bandwidth is the value of **RuleConditionMbps**. The threshold of inbound packets is the value of **RuleConditionKpps**.
        self.rule_condition_cnt = rule_condition_cnt  # type: str
        # The threshold of inbound packets. Unit: Kpps. Minimum value: **10**.
        self.rule_condition_kpps = rule_condition_kpps  # type: str
        # The threshold of inbound bandwidth. Unit: Mbit/s. Minimum value: **100**.
        self.rule_condition_mbps = rule_condition_mbps  # type: str
        # The name of the scheduling rule.
        # 
        # The name can contain lowercase letters, digits, hyphens (-), and underscores (\_). The name can be up to 32 characters in length. We recommend that you use the ID of the on-demand instance as the name. Example: `ddosbgp-cn-z2q1qzxb****`.
        self.rule_name = rule_name  # type: str
        # Specifies whether the scheduling rule is enabled. Valid values:
        # 
        # *   **on**: enabled
        # *   **off**: disabled
        self.rule_switch = rule_switch  # type: str
        # The start time of the period during which the scheduling rule is automatically stopped. The time must be in the 24-hour clock and in the `hh:mm` format.
        # 
        # If the system detects that DDoS attacks stop, the system no longer reroutes traffic to the on-demand instance from the time you specified. We recommend that you set this parameter to a value that is defined as off-peak hours.
        # 
        # >  This parameter takes effect only when the **RuleUndoMode** parameter is set to **auto**.
        self.rule_undo_begin_time = rule_undo_begin_time  # type: str
        # The end time of the period during which the scheduling rule is automatically stopped. The time must be in the 24-hour clock and in the `hh:mm` format.
        self.rule_undo_end_time = rule_undo_end_time  # type: str
        # The stop method of the scheduling rule. Valid values:
        # 
        # *   **auto**: The scheduling rule automatically stops.
        # *   **manual**: The scheduling rule is manually stopped.
        self.rule_undo_mode = rule_undo_mode  # type: str
        # The time zone of the time when the scheduling rule automatically stops. The time zone must be in the `GMT-hh:mm` format.
        # 
        # For example, the value `GMT-08:00` indicates that the time zone is UTC+8.
        # 
        # >  This parameter takes effect only when the **RuleUndoMode** parameter is set to **auto**.
        self.time_zone = time_zone  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ConfigSchedruleOnDemandRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.rule_action is not None:
            result['RuleAction'] = self.rule_action
        if self.rule_condition_cnt is not None:
            result['RuleConditionCnt'] = self.rule_condition_cnt
        if self.rule_condition_kpps is not None:
            result['RuleConditionKpps'] = self.rule_condition_kpps
        if self.rule_condition_mbps is not None:
            result['RuleConditionMbps'] = self.rule_condition_mbps
        if self.rule_name is not None:
            result['RuleName'] = self.rule_name
        if self.rule_switch is not None:
            result['RuleSwitch'] = self.rule_switch
        if self.rule_undo_begin_time is not None:
            result['RuleUndoBeginTime'] = self.rule_undo_begin_time
        if self.rule_undo_end_time is not None:
            result['RuleUndoEndTime'] = self.rule_undo_end_time
        if self.rule_undo_mode is not None:
            result['RuleUndoMode'] = self.rule_undo_mode
        if self.time_zone is not None:
            result['TimeZone'] = self.time_zone
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('RuleAction') is not None:
            self.rule_action = m.get('RuleAction')
        if m.get('RuleConditionCnt') is not None:
            self.rule_condition_cnt = m.get('RuleConditionCnt')
        if m.get('RuleConditionKpps') is not None:
            self.rule_condition_kpps = m.get('RuleConditionKpps')
        if m.get('RuleConditionMbps') is not None:
            self.rule_condition_mbps = m.get('RuleConditionMbps')
        if m.get('RuleName') is not None:
            self.rule_name = m.get('RuleName')
        if m.get('RuleSwitch') is not None:
            self.rule_switch = m.get('RuleSwitch')
        if m.get('RuleUndoBeginTime') is not None:
            self.rule_undo_begin_time = m.get('RuleUndoBeginTime')
        if m.get('RuleUndoEndTime') is not None:
            self.rule_undo_end_time = m.get('RuleUndoEndTime')
        if m.get('RuleUndoMode') is not None:
            self.rule_undo_mode = m.get('RuleUndoMode')
        if m.get('TimeZone') is not None:
            self.time_zone = m.get('TimeZone')
        return self


class ConfigSchedruleOnDemandResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ConfigSchedruleOnDemandResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class ConfigSchedruleOnDemandResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: ConfigSchedruleOnDemandResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(ConfigSchedruleOnDemandResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ConfigSchedruleOnDemandResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class CreateSchedruleOnDemandRequest(TeaModel):
    def __init__(self, instance_id=None, region_id=None, rule_action=None, rule_condition_cnt=None,
                 rule_condition_kpps=None, rule_condition_mbps=None, rule_name=None, rule_switch=None, rule_undo_begin_time=None,
                 rule_undo_end_time=None, rule_undo_mode=None, time_zone=None):
        # The ID of the on-demand instance.
        # 
        # >  You can call the [DescribeOnDemandInstance](~~152120~~) operation to query the IDs of all on-demand instances.
        self.instance_id = instance_id  # type: str
        # The region ID of the on-demand instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str
        # The scheduling action. Set the value to **declare**, which indicates that the route is advertised.
        self.rule_action = rule_action  # type: str
        # If the inbound bandwidth or packets consecutively exceed the threshold for the specified number of times, the scheduling rule is triggered and traffic is rerouted to the on-demand instance. The specified number of times is the value of this parameter.
        # 
        # >  The threshold of inbound bandwidth is the value of **RuleConditionMbps**. The threshold of inbound packets is the value of **RuleConditionKpps**.
        self.rule_condition_cnt = rule_condition_cnt  # type: str
        # The threshold of inbound packets. Unit: Kpps. Minimum value: **10**.
        self.rule_condition_kpps = rule_condition_kpps  # type: str
        # The threshold of inbound bandwidth. Unit: Mbit/s. Minimum value: **100**.
        self.rule_condition_mbps = rule_condition_mbps  # type: str
        # The name of the scheduling rule.
        # 
        # The name can contain lowercase letters, digits, hyphens (-), and underscores (\_). The name can be up to 32 characters in length. We recommend that you use the ID of the on-demand instance as the name. Example: `ddosbgp-cn-z2q1qzxb****`.
        self.rule_name = rule_name  # type: str
        # Specifies whether the scheduling rule is enabled. Valid values:
        # 
        # *   **on**: enabled
        # *   **off**: disabled
        self.rule_switch = rule_switch  # type: str
        # The start time of the period during which the scheduling rule is automatically stopped. The time must be in the 24-hour clock and in the `hh:mm` format.
        # 
        # If the system detects that DDoS attacks stop, the system no longer reroutes traffic to the on-demand instance from the time you specified. We recommend that you set this parameter to a value that is defined as off-peak hours.
        # 
        # >  This parameter takes effect only when the **RuleUndoMode** parameter is set to **auto**.
        self.rule_undo_begin_time = rule_undo_begin_time  # type: str
        # The end time of the period during which the scheduling rule is automatically stopped. The time must be in the 24-hour clock and in the `hh:mm` format.
        self.rule_undo_end_time = rule_undo_end_time  # type: str
        # The stop method of the scheduling rule. Valid values:
        # 
        # *   **auto**: The scheduling rule automatically stops.
        # *   **manual**: The scheduling rule is manually stopped.
        self.rule_undo_mode = rule_undo_mode  # type: str
        # The time zone of the time when the scheduling rule automatically stops. The time zone must be in the `GMT-hh:mm` format.
        # 
        # For example, the value `GMT-08:00` indicates that the time zone is UTC+8.
        # 
        # >  This parameter takes effect only when the **RuleUndoMode** parameter is set to **auto**.
        self.time_zone = time_zone  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(CreateSchedruleOnDemandRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.rule_action is not None:
            result['RuleAction'] = self.rule_action
        if self.rule_condition_cnt is not None:
            result['RuleConditionCnt'] = self.rule_condition_cnt
        if self.rule_condition_kpps is not None:
            result['RuleConditionKpps'] = self.rule_condition_kpps
        if self.rule_condition_mbps is not None:
            result['RuleConditionMbps'] = self.rule_condition_mbps
        if self.rule_name is not None:
            result['RuleName'] = self.rule_name
        if self.rule_switch is not None:
            result['RuleSwitch'] = self.rule_switch
        if self.rule_undo_begin_time is not None:
            result['RuleUndoBeginTime'] = self.rule_undo_begin_time
        if self.rule_undo_end_time is not None:
            result['RuleUndoEndTime'] = self.rule_undo_end_time
        if self.rule_undo_mode is not None:
            result['RuleUndoMode'] = self.rule_undo_mode
        if self.time_zone is not None:
            result['TimeZone'] = self.time_zone
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('RuleAction') is not None:
            self.rule_action = m.get('RuleAction')
        if m.get('RuleConditionCnt') is not None:
            self.rule_condition_cnt = m.get('RuleConditionCnt')
        if m.get('RuleConditionKpps') is not None:
            self.rule_condition_kpps = m.get('RuleConditionKpps')
        if m.get('RuleConditionMbps') is not None:
            self.rule_condition_mbps = m.get('RuleConditionMbps')
        if m.get('RuleName') is not None:
            self.rule_name = m.get('RuleName')
        if m.get('RuleSwitch') is not None:
            self.rule_switch = m.get('RuleSwitch')
        if m.get('RuleUndoBeginTime') is not None:
            self.rule_undo_begin_time = m.get('RuleUndoBeginTime')
        if m.get('RuleUndoEndTime') is not None:
            self.rule_undo_end_time = m.get('RuleUndoEndTime')
        if m.get('RuleUndoMode') is not None:
            self.rule_undo_mode = m.get('RuleUndoMode')
        if m.get('TimeZone') is not None:
            self.time_zone = m.get('TimeZone')
        return self


class CreateSchedruleOnDemandResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(CreateSchedruleOnDemandResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class CreateSchedruleOnDemandResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: CreateSchedruleOnDemandResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(CreateSchedruleOnDemandResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = CreateSchedruleOnDemandResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DeleteBlackholeRequest(TeaModel):
    def __init__(self, instance_id=None, ip=None, region_id=None, resource_group_id=None):
        # The ID of the Anti-DDoS Origin instance.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances.
        self.instance_id = instance_id  # type: str
        # The IP address for which you want to deactivate blackhole filtering.
        # 
        # >  You can call the [DescribePackIpList](~~118701~~) operation to query all the IP addresses that are protected by the Anti-DDoS Origin instance and the protection status of the IP addresses. For example, you can query whether blackhole filtering is triggered for an IP address.
        self.ip = ip  # type: str
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteBlackholeRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class DeleteBlackholeResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteBlackholeResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DeleteBlackholeResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DeleteBlackholeResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DeleteBlackholeResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DeleteBlackholeResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DeleteIpRequest(TeaModel):
    def __init__(self, instance_id=None, ip_list=None, region_id=None, resource_group_id=None):
        # The ID of the Anti-DDoS Origin Enterprise instance.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin Enterprise instances.
        self.instance_id = instance_id  # type: str
        # The list of IP addresses that you want to remove from the Anti-DDoS Origin Enterprise instance. This parameter is a string consisting of JSON arrays. Each element in a JSON array is a JSON struct that includes the following field:
        # 
        # *   **ip**: required. The IP address that you want to remove. Data type: string.
        # 
        #     > The IP addresses that you want to remove must be protected by the Anti-DDoS Origin Enterprise instance.
        self.ip_list = ip_list  # type: str
        # The region ID of the Anti-DDoS Origin Enterprise instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin Enterprise instance belongs in Resource Management. This parameter is empty by default, which indicates that the instance belongs to the default resource group.
        # 
        # For more information about resource groups, see [Create a resource group](~~94485~~).
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteIpRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.ip_list is not None:
            result['IpList'] = self.ip_list
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('IpList') is not None:
            self.ip_list = m.get('IpList')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class DeleteIpResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteIpResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DeleteIpResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DeleteIpResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DeleteIpResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DeleteIpResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DeleteRdMemberListRequestMemberList(TeaModel):
    def __init__(self, uid=None):
        self.uid = uid  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteRdMemberListRequestMemberList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.uid is not None:
            result['Uid'] = self.uid
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Uid') is not None:
            self.uid = m.get('Uid')
        return self


class DeleteRdMemberListRequest(TeaModel):
    def __init__(self, member_list=None):
        self.member_list = member_list  # type: list[DeleteRdMemberListRequestMemberList]

    def validate(self):
        if self.member_list:
            for k in self.member_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DeleteRdMemberListRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['MemberList'] = []
        if self.member_list is not None:
            for k in self.member_list:
                result['MemberList'].append(k.to_map() if k else None)
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.member_list = []
        if m.get('MemberList') is not None:
            for k in m.get('MemberList'):
                temp_model = DeleteRdMemberListRequestMemberList()
                self.member_list.append(temp_model.from_map(k))
        return self


class DeleteRdMemberListShrinkRequest(TeaModel):
    def __init__(self, member_list_shrink=None):
        self.member_list_shrink = member_list_shrink  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteRdMemberListShrinkRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.member_list_shrink is not None:
            result['MemberList'] = self.member_list_shrink
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('MemberList') is not None:
            self.member_list_shrink = m.get('MemberList')
        return self


class DeleteRdMemberListResponseBody(TeaModel):
    def __init__(self, request_id=None):
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteRdMemberListResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DeleteRdMemberListResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DeleteRdMemberListResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DeleteRdMemberListResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DeleteRdMemberListResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DeleteSchedruleOnDemandRequest(TeaModel):
    def __init__(self, instance_id=None, region_id=None, rule_name=None):
        # The ID of the on-demand instance.
        # 
        # >  You can call the [DescribeOnDemandInstance](~~152120~~) operation to query the IDs of all on-demand instances.
        self.instance_id = instance_id  # type: str
        # The region ID of the on-demand instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str
        # The name of the scheduling rule that you want to delete.
        self.rule_name = rule_name  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteSchedruleOnDemandRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.rule_name is not None:
            result['RuleName'] = self.rule_name
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('RuleName') is not None:
            self.rule_name = m.get('RuleName')
        return self


class DeleteSchedruleOnDemandResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DeleteSchedruleOnDemandResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DeleteSchedruleOnDemandResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DeleteSchedruleOnDemandResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DeleteSchedruleOnDemandResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DeleteSchedruleOnDemandResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeAssetGroupRequest(TeaModel):
    def __init__(self, name=None, region=None, region_id=None, source_ip=None, type=None):
        # The ID of the asset. If the asset is a Web Application Firewall (WAF) instance, specify the ID of the WAF instance.
        self.name = name  # type: str
        # The region ID of the asset.
        self.region = region  # type: str
        # The ID of the region in which the instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The source IP address of the request. The system specifies this parameter.
        self.source_ip = source_ip  # type: str
        # The type of the asset. Valid values:
        # 
        # *   **waf**: WAF instance
        # *   **ga**: Global Accelerator (GA) instance
        self.type = type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeAssetGroupRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.name is not None:
            result['Name'] = self.name
        if self.region is not None:
            result['Region'] = self.region
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.source_ip is not None:
            result['SourceIp'] = self.source_ip
        if self.type is not None:
            result['Type'] = self.type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('SourceIp') is not None:
            self.source_ip = m.get('SourceIp')
        if m.get('Type') is not None:
            self.type = m.get('Type')
        return self


class DescribeAssetGroupResponseBodyAssetGroupList(TeaModel):
    def __init__(self, name=None, region=None, type=None):
        # The ID of the asset.
        self.name = name  # type: str
        # The region to which the asset belongs.
        self.region = region  # type: str
        # The type of the asset.
        self.type = type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeAssetGroupResponseBodyAssetGroupList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.name is not None:
            result['Name'] = self.name
        if self.region is not None:
            result['Region'] = self.region
        if self.type is not None:
            result['Type'] = self.type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('Type') is not None:
            self.type = m.get('Type')
        return self


class DescribeAssetGroupResponseBody(TeaModel):
    def __init__(self, asset_group_list=None, request_id=None, total=None):
        # The information about the asset.
        self.asset_group_list = asset_group_list  # type: list[DescribeAssetGroupResponseBodyAssetGroupList]
        # The request ID.
        self.request_id = request_id  # type: str
        # The total number of entries returned.
        self.total = total  # type: long

    def validate(self):
        if self.asset_group_list:
            for k in self.asset_group_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeAssetGroupResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['AssetGroupList'] = []
        if self.asset_group_list is not None:
            for k in self.asset_group_list:
                result['AssetGroupList'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total is not None:
            result['Total'] = self.total
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.asset_group_list = []
        if m.get('AssetGroupList') is not None:
            for k in m.get('AssetGroupList'):
                temp_model = DescribeAssetGroupResponseBodyAssetGroupList()
                self.asset_group_list.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Total') is not None:
            self.total = m.get('Total')
        return self


class DescribeAssetGroupResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeAssetGroupResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeAssetGroupResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeAssetGroupResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeAssetGroupToInstanceRequest(TeaModel):
    def __init__(self, instance_id=None, member_uid=None, name=None, region=None, region_id=None, source_ip=None,
                 type=None):
        # The ID of the instance to query.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances of paid editions.
        self.instance_id = instance_id  # type: str
        # The UID of the member to which the asset belongs.
        self.member_uid = member_uid  # type: str
        # The ID of the asset. If the asset is a Web Application Firewall (WAF) instance, specify the ID of the WAF instance.
        self.name = name  # type: str
        # The region ID of the asset.
        self.region = region  # type: str
        # The ID of the region in which the instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The source IP address of the request. The system specifies this parameter.
        self.source_ip = source_ip  # type: str
        # The type of the asset. Valid values:
        # 
        # *   **waf**: WAF instance
        # *   **ga**: Global Accelerator (GA) instance
        self.type = type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeAssetGroupToInstanceRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.member_uid is not None:
            result['MemberUid'] = self.member_uid
        if self.name is not None:
            result['Name'] = self.name
        if self.region is not None:
            result['Region'] = self.region
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.source_ip is not None:
            result['SourceIp'] = self.source_ip
        if self.type is not None:
            result['Type'] = self.type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('MemberUid') is not None:
            self.member_uid = m.get('MemberUid')
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('SourceIp') is not None:
            self.source_ip = m.get('SourceIp')
        if m.get('Type') is not None:
            self.type = m.get('Type')
        return self


class DescribeAssetGroupToInstanceResponseBodyDataList(TeaModel):
    def __init__(self, instance_id=None, member_uid=None, name=None, region=None, type=None):
        # The ID of the Anti-DDoS Origin instance of a paid edition.
        self.instance_id = instance_id  # type: str
        # The UID of the member to which the asset belongs.
        self.member_uid = member_uid  # type: str
        # The ID of the asset.
        self.name = name  # type: str
        # The region ID of the asset.
        self.region = region  # type: str
        # The type of the asset.
        self.type = type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeAssetGroupToInstanceResponseBodyDataList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.member_uid is not None:
            result['MemberUid'] = self.member_uid
        if self.name is not None:
            result['Name'] = self.name
        if self.region is not None:
            result['Region'] = self.region
        if self.type is not None:
            result['Type'] = self.type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('MemberUid') is not None:
            self.member_uid = m.get('MemberUid')
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('Type') is not None:
            self.type = m.get('Type')
        return self


class DescribeAssetGroupToInstanceResponseBody(TeaModel):
    def __init__(self, data_list=None, request_id=None, total=None):
        # The response parameters.
        self.data_list = data_list  # type: list[DescribeAssetGroupToInstanceResponseBodyDataList]
        # The request ID.
        self.request_id = request_id  # type: str
        # The total number of entries returned.
        self.total = total  # type: long

    def validate(self):
        if self.data_list:
            for k in self.data_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeAssetGroupToInstanceResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['DataList'] = []
        if self.data_list is not None:
            for k in self.data_list:
                result['DataList'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total is not None:
            result['Total'] = self.total
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.data_list = []
        if m.get('DataList') is not None:
            for k in m.get('DataList'):
                temp_model = DescribeAssetGroupToInstanceResponseBodyDataList()
                self.data_list.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Total') is not None:
            self.total = m.get('Total')
        return self


class DescribeAssetGroupToInstanceResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeAssetGroupToInstanceResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeAssetGroupToInstanceResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeAssetGroupToInstanceResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeDdosEventRequest(TeaModel):
    def __init__(self, end_time=None, instance_id=None, ip=None, page_no=None, page_size=None, region_id=None,
                 resource_group_id=None, start_time=None):
        # The end time of the DDoS attack event to query. This value is a UNIX timestamp. Unit: seconds.
        self.end_time = end_time  # type: int
        # The ID of the Anti-DDoS Origin instance to query.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances.
        self.instance_id = instance_id  # type: str
        # The attacked IP address to query.
        self.ip = ip  # type: str
        # The number of the page to return.
        self.page_no = page_no  # type: int
        # The number of entries to return on each page.
        self.page_size = page_size  # type: int
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str
        # The start time of the DDoS attack event to query. This value is a UNIX timestamp. Unit: seconds.
        self.start_time = start_time  # type: int

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeDdosEventRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.page_no is not None:
            result['PageNo'] = self.page_no
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('PageNo') is not None:
            self.page_no = m.get('PageNo')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        return self


class DescribeDdosEventResponseBodyEvents(TeaModel):
    def __init__(self, end_time=None, ip=None, mbps=None, pps=None, start_time=None, status=None):
        # The time when the DDoS attack stopped. This value is a UNIX timestamp. Unit: seconds.
        self.end_time = end_time  # type: int
        # The attacked IP address.
        self.ip = ip  # type: str
        # The volume of the request traffic at the start of the DDoS attack. Unit: Mbit/s.
        self.mbps = mbps  # type: int
        # The number of packets at the start of the DDoS attack. Unit: packets per second (PPS).
        self.pps = pps  # type: int
        # The time when the DDoS attack started. This value is a UNIX timestamp. Unit: seconds.
        self.start_time = start_time  # type: int
        # The status of the DDoS attack event. Valid values:
        # 
        # *   **hole_begin**: indicates that blackhole filtering is triggered for the attacked IP address.
        # *   **hole_end**: indicates that blackhole filtering is deactivated for the attacked IP address.
        # *   **defense_begin**: indicates that attack traffic is being scrubbed.
        # *   **defense_end**: indicates that attack traffic is scrubbed.
        self.status = status  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeDdosEventResponseBodyEvents, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.mbps is not None:
            result['Mbps'] = self.mbps
        if self.pps is not None:
            result['Pps'] = self.pps
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        if self.status is not None:
            result['Status'] = self.status
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('Mbps') is not None:
            self.mbps = m.get('Mbps')
        if m.get('Pps') is not None:
            self.pps = m.get('Pps')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        return self


class DescribeDdosEventResponseBody(TeaModel):
    def __init__(self, events=None, request_id=None, total=None):
        # The details about the DDoS attack event.
        self.events = events  # type: list[DescribeDdosEventResponseBodyEvents]
        # The ID of the request.
        self.request_id = request_id  # type: str
        # The total number of DDoS attack events.
        self.total = total  # type: long

    def validate(self):
        if self.events:
            for k in self.events:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeDdosEventResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['Events'] = []
        if self.events is not None:
            for k in self.events:
                result['Events'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total is not None:
            result['Total'] = self.total
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.events = []
        if m.get('Events') is not None:
            for k in m.get('Events'):
                temp_model = DescribeDdosEventResponseBodyEvents()
                self.events.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Total') is not None:
            self.total = m.get('Total')
        return self


class DescribeDdosEventResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeDdosEventResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeDdosEventResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeDdosEventResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeDdosOriginInstanceBillRequest(TeaModel):
    def __init__(self, end_time=None, is_show_list=None, start_time=None, type=None):
        self.end_time = end_time  # type: long
        self.is_show_list = is_show_list  # type: bool
        self.start_time = start_time  # type: long
        self.type = type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeDdosOriginInstanceBillRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.is_show_list is not None:
            result['IsShowList'] = self.is_show_list
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        if self.type is not None:
            result['Type'] = self.type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('IsShowList') is not None:
            self.is_show_list = m.get('IsShowList')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        if m.get('Type') is not None:
            self.type = m.get('Type')
        return self


class DescribeDdosOriginInstanceBillResponseBodyFlowList(TeaModel):
    def __init__(self, member_flow=None, region_flow=None, time=None, total_flow=None):
        self.member_flow = member_flow  # type: str
        self.region_flow = region_flow  # type: str
        self.time = time  # type: long
        self.total_flow = total_flow  # type: long

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeDdosOriginInstanceBillResponseBodyFlowList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.member_flow is not None:
            result['MemberFlow'] = self.member_flow
        if self.region_flow is not None:
            result['RegionFlow'] = self.region_flow
        if self.time is not None:
            result['Time'] = self.time
        if self.total_flow is not None:
            result['TotalFlow'] = self.total_flow
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('MemberFlow') is not None:
            self.member_flow = m.get('MemberFlow')
        if m.get('RegionFlow') is not None:
            self.region_flow = m.get('RegionFlow')
        if m.get('Time') is not None:
            self.time = m.get('Time')
        if m.get('TotalFlow') is not None:
            self.total_flow = m.get('TotalFlow')
        return self


class DescribeDdosOriginInstanceBillResponseBodyIpCountOrFunctionList(TeaModel):
    def __init__(self, coverage=None, ip_cnt_cn=None, ip_cnt_ov=None, member_ip_cnt=None, time=None):
        self.coverage = coverage  # type: str
        self.ip_cnt_cn = ip_cnt_cn  # type: long
        self.ip_cnt_ov = ip_cnt_ov  # type: long
        self.member_ip_cnt = member_ip_cnt  # type: str
        self.time = time  # type: long

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeDdosOriginInstanceBillResponseBodyIpCountOrFunctionList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.coverage is not None:
            result['Coverage'] = self.coverage
        if self.ip_cnt_cn is not None:
            result['IpCntCn'] = self.ip_cnt_cn
        if self.ip_cnt_ov is not None:
            result['IpCntOv'] = self.ip_cnt_ov
        if self.member_ip_cnt is not None:
            result['MemberIpCnt'] = self.member_ip_cnt
        if self.time is not None:
            result['Time'] = self.time
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Coverage') is not None:
            self.coverage = m.get('Coverage')
        if m.get('IpCntCn') is not None:
            self.ip_cnt_cn = m.get('IpCntCn')
        if m.get('IpCntOv') is not None:
            self.ip_cnt_ov = m.get('IpCntOv')
        if m.get('MemberIpCnt') is not None:
            self.member_ip_cnt = m.get('MemberIpCnt')
        if m.get('Time') is not None:
            self.time = m.get('Time')
        return self


class DescribeDdosOriginInstanceBillResponseBodyStandardAssetsFlowList(TeaModel):
    def __init__(self, member_flow=None, region_flow=None, time=None, total_flow=None):
        self.member_flow = member_flow  # type: str
        self.region_flow = region_flow  # type: str
        self.time = time  # type: long
        self.total_flow = total_flow  # type: long

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeDdosOriginInstanceBillResponseBodyStandardAssetsFlowList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.member_flow is not None:
            result['MemberFlow'] = self.member_flow
        if self.region_flow is not None:
            result['RegionFlow'] = self.region_flow
        if self.time is not None:
            result['Time'] = self.time
        if self.total_flow is not None:
            result['TotalFlow'] = self.total_flow
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('MemberFlow') is not None:
            self.member_flow = m.get('MemberFlow')
        if m.get('RegionFlow') is not None:
            self.region_flow = m.get('RegionFlow')
        if m.get('Time') is not None:
            self.time = m.get('Time')
        if m.get('TotalFlow') is not None:
            self.total_flow = m.get('TotalFlow')
        return self


class DescribeDdosOriginInstanceBillResponseBody(TeaModel):
    def __init__(self, debt_status=None, flow_list=None, flow_region=None, instance_id=None, ip_count=None,
                 ip_count_or_function_list=None, ip_info=None, request_id=None, standard_assets_flow_list=None,
                 standard_assets_flow_region=None, standard_assets_total_flow_cn=None, standard_assets_total_flow_ov=None, status=None,
                 total_flow_cn=None, total_flow_ov=None):
        self.debt_status = debt_status  # type: long
        self.flow_list = flow_list  # type: list[DescribeDdosOriginInstanceBillResponseBodyFlowList]
        self.flow_region = flow_region  # type: dict[str, any]
        self.instance_id = instance_id  # type: str
        self.ip_count = ip_count  # type: long
        self.ip_count_or_function_list = ip_count_or_function_list  # type: list[DescribeDdosOriginInstanceBillResponseBodyIpCountOrFunctionList]
        self.ip_info = ip_info  # type: str
        self.request_id = request_id  # type: str
        self.standard_assets_flow_list = standard_assets_flow_list  # type: list[DescribeDdosOriginInstanceBillResponseBodyStandardAssetsFlowList]
        self.standard_assets_flow_region = standard_assets_flow_region  # type: dict[str, any]
        self.standard_assets_total_flow_cn = standard_assets_total_flow_cn  # type: long
        self.standard_assets_total_flow_ov = standard_assets_total_flow_ov  # type: long
        self.status = status  # type: long
        self.total_flow_cn = total_flow_cn  # type: long
        self.total_flow_ov = total_flow_ov  # type: long

    def validate(self):
        if self.flow_list:
            for k in self.flow_list:
                if k:
                    k.validate()
        if self.ip_count_or_function_list:
            for k in self.ip_count_or_function_list:
                if k:
                    k.validate()
        if self.standard_assets_flow_list:
            for k in self.standard_assets_flow_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeDdosOriginInstanceBillResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.debt_status is not None:
            result['DebtStatus'] = self.debt_status
        result['FlowList'] = []
        if self.flow_list is not None:
            for k in self.flow_list:
                result['FlowList'].append(k.to_map() if k else None)
        if self.flow_region is not None:
            result['FlowRegion'] = self.flow_region
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.ip_count is not None:
            result['IpCount'] = self.ip_count
        result['IpCountOrFunctionList'] = []
        if self.ip_count_or_function_list is not None:
            for k in self.ip_count_or_function_list:
                result['IpCountOrFunctionList'].append(k.to_map() if k else None)
        if self.ip_info is not None:
            result['IpInfo'] = self.ip_info
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        result['StandardAssetsFlowList'] = []
        if self.standard_assets_flow_list is not None:
            for k in self.standard_assets_flow_list:
                result['StandardAssetsFlowList'].append(k.to_map() if k else None)
        if self.standard_assets_flow_region is not None:
            result['StandardAssetsFlowRegion'] = self.standard_assets_flow_region
        if self.standard_assets_total_flow_cn is not None:
            result['StandardAssetsTotalFlowCn'] = self.standard_assets_total_flow_cn
        if self.standard_assets_total_flow_ov is not None:
            result['StandardAssetsTotalFlowOv'] = self.standard_assets_total_flow_ov
        if self.status is not None:
            result['Status'] = self.status
        if self.total_flow_cn is not None:
            result['TotalFlowCn'] = self.total_flow_cn
        if self.total_flow_ov is not None:
            result['TotalFlowOv'] = self.total_flow_ov
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('DebtStatus') is not None:
            self.debt_status = m.get('DebtStatus')
        self.flow_list = []
        if m.get('FlowList') is not None:
            for k in m.get('FlowList'):
                temp_model = DescribeDdosOriginInstanceBillResponseBodyFlowList()
                self.flow_list.append(temp_model.from_map(k))
        if m.get('FlowRegion') is not None:
            self.flow_region = m.get('FlowRegion')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('IpCount') is not None:
            self.ip_count = m.get('IpCount')
        self.ip_count_or_function_list = []
        if m.get('IpCountOrFunctionList') is not None:
            for k in m.get('IpCountOrFunctionList'):
                temp_model = DescribeDdosOriginInstanceBillResponseBodyIpCountOrFunctionList()
                self.ip_count_or_function_list.append(temp_model.from_map(k))
        if m.get('IpInfo') is not None:
            self.ip_info = m.get('IpInfo')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        self.standard_assets_flow_list = []
        if m.get('StandardAssetsFlowList') is not None:
            for k in m.get('StandardAssetsFlowList'):
                temp_model = DescribeDdosOriginInstanceBillResponseBodyStandardAssetsFlowList()
                self.standard_assets_flow_list.append(temp_model.from_map(k))
        if m.get('StandardAssetsFlowRegion') is not None:
            self.standard_assets_flow_region = m.get('StandardAssetsFlowRegion')
        if m.get('StandardAssetsTotalFlowCn') is not None:
            self.standard_assets_total_flow_cn = m.get('StandardAssetsTotalFlowCn')
        if m.get('StandardAssetsTotalFlowOv') is not None:
            self.standard_assets_total_flow_ov = m.get('StandardAssetsTotalFlowOv')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        if m.get('TotalFlowCn') is not None:
            self.total_flow_cn = m.get('TotalFlowCn')
        if m.get('TotalFlowOv') is not None:
            self.total_flow_ov = m.get('TotalFlowOv')
        return self


class DescribeDdosOriginInstanceBillResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeDdosOriginInstanceBillResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeDdosOriginInstanceBillResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeDdosOriginInstanceBillResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeExcpetionCountRequest(TeaModel):
    def __init__(self, region_id=None, resource_group_id=None):
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeExcpetionCountRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class DescribeExcpetionCountResponseBody(TeaModel):
    def __init__(self, exception_ip_count=None, expire_time_count=None, request_id=None):
        # The number of assets that are in an abnormal state.
        self.exception_ip_count = exception_ip_count  # type: int
        # The number of Anti-DDoS Origin instances that are about to expire.
        self.expire_time_count = expire_time_count  # type: int
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeExcpetionCountResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.exception_ip_count is not None:
            result['ExceptionIpCount'] = self.exception_ip_count
        if self.expire_time_count is not None:
            result['ExpireTimeCount'] = self.expire_time_count
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('ExceptionIpCount') is not None:
            self.exception_ip_count = m.get('ExceptionIpCount')
        if m.get('ExpireTimeCount') is not None:
            self.expire_time_count = m.get('ExpireTimeCount')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DescribeExcpetionCountResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeExcpetionCountResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeExcpetionCountResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeExcpetionCountResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeInstanceListRequestTag(TeaModel):
    def __init__(self, key=None, value=None):
        # The key of the tag that is added to the Anti-DDoS Origin instance to query.
        self.key = key  # type: str
        # The value of the tag that is added to the Anti-DDoS Origin instance to query.
        self.value = value  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeInstanceListRequestTag, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class DescribeInstanceListRequest(TeaModel):
    def __init__(self, instance_id_list=None, instance_type=None, instance_type_list=None, ip=None, ip_version=None,
                 orderby=None, orderdire=None, page_no=None, page_size=None, region_id=None, remark=None,
                 resource_group_id=None, tag=None):
        # The IDs of the Anti-DDoS Origin instances to query. Specify the value is in the `["<Instance ID 1>","<Instance ID 2>",……]` format.
        self.instance_id_list = instance_id_list  # type: str
        # The mitigation plan of the Anti-DDoS Origin instance to query. Valid values:
        # 
        # *   **0**: the Professional mitigation plan
        # *   **1**: the Enterprise mitigation plan
        self.instance_type = instance_type  # type: str
        self.instance_type_list = instance_type_list  # type: list[str]
        # The IP address of the object that is protected by the Anti-DDoS Origin instance to query.
        self.ip = ip  # type: str
        # The protocol type of the IP address asset that is protected by the Anti-DDoS Origin instance to query. Valid values:
        # 
        # *   **Ipv4**: IPv4
        # *   **Ipv6**: IPv6
        self.ip_version = ip_version  # type: str
        # The field that is used to sort the Anti-DDoS Origin instances. Set the value to **expireTime**, which indicates that the instances are sorted based on the expiration time.
        # 
        # You can set the **Orderdire** parameter to specify the sorting method.
        self.orderby = orderby  # type: str
        # The sorting method. Valid values:
        # 
        # *   **desc**: the descending order. This is the default value.
        # *   **asc**: the ascending order.
        self.orderdire = orderdire  # type: str
        # The number of the page to return.
        self.page_no = page_no  # type: int
        # The number of entries to return on each page.
        self.page_size = page_size  # type: int
        # The ID of the region where the Anti-DDoS Origin instance to query resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The remarks of the Anti-DDoS Origin instance to query. Fuzzy match is supported.
        self.remark = remark  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str
        self.tag = tag  # type: list[DescribeInstanceListRequestTag]

    def validate(self):
        if self.tag:
            for k in self.tag:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeInstanceListRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id_list is not None:
            result['InstanceIdList'] = self.instance_id_list
        if self.instance_type is not None:
            result['InstanceType'] = self.instance_type
        if self.instance_type_list is not None:
            result['InstanceTypeList'] = self.instance_type_list
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.ip_version is not None:
            result['IpVersion'] = self.ip_version
        if self.orderby is not None:
            result['Orderby'] = self.orderby
        if self.orderdire is not None:
            result['Orderdire'] = self.orderdire
        if self.page_no is not None:
            result['PageNo'] = self.page_no
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.remark is not None:
            result['Remark'] = self.remark
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        result['Tag'] = []
        if self.tag is not None:
            for k in self.tag:
                result['Tag'].append(k.to_map() if k else None)
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceIdList') is not None:
            self.instance_id_list = m.get('InstanceIdList')
        if m.get('InstanceType') is not None:
            self.instance_type = m.get('InstanceType')
        if m.get('InstanceTypeList') is not None:
            self.instance_type_list = m.get('InstanceTypeList')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('IpVersion') is not None:
            self.ip_version = m.get('IpVersion')
        if m.get('Orderby') is not None:
            self.orderby = m.get('Orderby')
        if m.get('Orderdire') is not None:
            self.orderdire = m.get('Orderdire')
        if m.get('PageNo') is not None:
            self.page_no = m.get('PageNo')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('Remark') is not None:
            self.remark = m.get('Remark')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        self.tag = []
        if m.get('Tag') is not None:
            for k in m.get('Tag'):
                temp_model = DescribeInstanceListRequestTag()
                self.tag.append(temp_model.from_map(k))
        return self


class DescribeInstanceListResponseBodyInstanceListAutoProtectCondition(TeaModel):
    def __init__(self, events=None):
        self.events = events  # type: list[str]

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeInstanceListResponseBodyInstanceListAutoProtectCondition, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.events is not None:
            result['Events'] = self.events
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Events') is not None:
            self.events = m.get('Events')
        return self


class DescribeInstanceListResponseBodyInstanceList(TeaModel):
    def __init__(self, auto_protect_condition=None, auto_renewal=None, blackholding_count=None,
                 commodity_type=None, coverage_type=None, expire_time=None, gmt_create=None, instance_id=None, instance_type=None,
                 ip_type=None, product=None, remark=None, status=None):
        self.auto_protect_condition = auto_protect_condition  # type: DescribeInstanceListResponseBodyInstanceListAutoProtectCondition
        # Indicates whether auto-renewal is enabled for the instance. Valid values:
        # 
        # *   **true**: enabled
        # *   **false**: disabled
        self.auto_renewal = auto_renewal  # type: bool
        # The number of protected public IP addresses for which blackhole filtering is triggered.
        # 
        # >  You can call the [DeleteBlackhole](~~118692~~) operation to deactivate blackhole filtering for a protected IP address.
        self.blackholding_count = blackholding_count  # type: str
        self.commodity_type = commodity_type  # type: str
        self.coverage_type = coverage_type  # type: int
        # The time when the instance expires. This value is a UNIX timestamp. Unit: milliseconds.
        self.expire_time = expire_time  # type: long
        # The time when the instance was purchased. This value is a UNIX timestamp. Unit: milliseconds.
        self.gmt_create = gmt_create  # type: long
        # The ID of the instance.
        self.instance_id = instance_id  # type: str
        # The mitigation plan of the instance. Valid values:
        # 
        # *   **0**: the Professional mitigation plan
        # *   **1**: the Enterprise mitigation plan
        self.instance_type = instance_type  # type: str
        # The protocol type of the IP address asset that is protected by the instance. Valid values:
        # 
        # *   **Ipv4**: IPv4
        # *   **Ipv6**: IPv6
        self.ip_type = ip_type  # type: str
        # The type of the cloud service that is associated with the Anti-DDoS Origin instance. By default, this parameter is not returned. If the Anti-DDoS Origin instance is created by using a different cloud service, the code of the cloud service is returned.
        # 
        # Valid values:
        # 
        # *   **gamebox**: The Anti-DDoS Origin instance is created by using Game Security Box.
        # *   **eip**: The Anti-DDoS Origin instance is created by using an elastic IP address (EIP) for which Anti-DDoS (Enhanced Edition) is enabled.
        self.product = product  # type: str
        # The remarks of the instance.
        self.remark = remark  # type: str
        # The status of the instance. Valid values:
        # 
        # *   **1**: normal
        # *   **2**: expired
        # *   **3**: released
        self.status = status  # type: str

    def validate(self):
        if self.auto_protect_condition:
            self.auto_protect_condition.validate()

    def to_map(self):
        _map = super(DescribeInstanceListResponseBodyInstanceList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.auto_protect_condition is not None:
            result['AutoProtectCondition'] = self.auto_protect_condition.to_map()
        if self.auto_renewal is not None:
            result['AutoRenewal'] = self.auto_renewal
        if self.blackholding_count is not None:
            result['BlackholdingCount'] = self.blackholding_count
        if self.commodity_type is not None:
            result['CommodityType'] = self.commodity_type
        if self.coverage_type is not None:
            result['CoverageType'] = self.coverage_type
        if self.expire_time is not None:
            result['ExpireTime'] = self.expire_time
        if self.gmt_create is not None:
            result['GmtCreate'] = self.gmt_create
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.instance_type is not None:
            result['InstanceType'] = self.instance_type
        if self.ip_type is not None:
            result['IpType'] = self.ip_type
        if self.product is not None:
            result['Product'] = self.product
        if self.remark is not None:
            result['Remark'] = self.remark
        if self.status is not None:
            result['Status'] = self.status
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('AutoProtectCondition') is not None:
            temp_model = DescribeInstanceListResponseBodyInstanceListAutoProtectCondition()
            self.auto_protect_condition = temp_model.from_map(m['AutoProtectCondition'])
        if m.get('AutoRenewal') is not None:
            self.auto_renewal = m.get('AutoRenewal')
        if m.get('BlackholdingCount') is not None:
            self.blackholding_count = m.get('BlackholdingCount')
        if m.get('CommodityType') is not None:
            self.commodity_type = m.get('CommodityType')
        if m.get('CoverageType') is not None:
            self.coverage_type = m.get('CoverageType')
        if m.get('ExpireTime') is not None:
            self.expire_time = m.get('ExpireTime')
        if m.get('GmtCreate') is not None:
            self.gmt_create = m.get('GmtCreate')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('InstanceType') is not None:
            self.instance_type = m.get('InstanceType')
        if m.get('IpType') is not None:
            self.ip_type = m.get('IpType')
        if m.get('Product') is not None:
            self.product = m.get('Product')
        if m.get('Remark') is not None:
            self.remark = m.get('Remark')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        return self


class DescribeInstanceListResponseBody(TeaModel):
    def __init__(self, instance_list=None, request_id=None, total=None):
        # The details about the Anti-DDoS Origin instance.
        self.instance_list = instance_list  # type: list[DescribeInstanceListResponseBodyInstanceList]
        # The ID of the request.
        self.request_id = request_id  # type: str
        # The total number of Anti-DDoS Origin instances.
        self.total = total  # type: long

    def validate(self):
        if self.instance_list:
            for k in self.instance_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeInstanceListResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['InstanceList'] = []
        if self.instance_list is not None:
            for k in self.instance_list:
                result['InstanceList'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total is not None:
            result['Total'] = self.total
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.instance_list = []
        if m.get('InstanceList') is not None:
            for k in m.get('InstanceList'):
                temp_model = DescribeInstanceListResponseBodyInstanceList()
                self.instance_list.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Total') is not None:
            self.total = m.get('Total')
        return self


class DescribeInstanceListResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeInstanceListResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeInstanceListResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeInstanceListResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeInstanceSpecsRequest(TeaModel):
    def __init__(self, instance_id_list=None, region_id=None, resource_group_id=None):
        # The ID of the Anti-DDoS Origin Enterprise instance. This parameter value is a string consisting of JSON arrays. Each element in a JSON array indicates an instance ID. If you want to query more than one instance, separate instance IDs with commas (,).
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin Enterprise instances in a specific region.
        self.instance_id_list = instance_id_list  # type: str
        # The region ID of the Anti-DDoS Origin Enterprise instance. Default value: **cn-hangzhou**, which indicates the China (Hangzhou) region.
        # 
        # >  If your instance does not reside in the China (Hangzhou) region, you must specify this parameter to the region ID of your instance. You can call the [DescribeRegions](~~118703~~) operation to query the regions of cloud assets that are supported by an Anti-DDoS Origin instance.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin Enterprise instance belongs in Resource Management. This parameter is empty by default, which indicates that the Anti-DDoS Origin Enterprise instance belongs to the default resource group.
        # 
        # For more information about resource groups, see [Create a resource group](~~94485~~).
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeInstanceSpecsRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id_list is not None:
            result['InstanceIdList'] = self.instance_id_list
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceIdList') is not None:
            self.instance_id_list = m.get('InstanceIdList')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class DescribeInstanceSpecsResponseBodyInstanceSpecsPackConfig(TeaModel):
    def __init__(self, bandwidth=None, bind_ip_count=None, ip_advance_thre=None, ip_basic_thre=None, ip_spec=None,
                 normal_bandwidth=None, pack_adv_thre=None, pack_basic_thre=None):
        # The bandwidth of the package configuration.
        self.bandwidth = bandwidth  # type: long
        # The number of IP addresses that are protected by the Anti-DDoS Origin Enterprise instance.
        self.bind_ip_count = bind_ip_count  # type: int
        # The burstable bandwidth of each protected IP address. Unit: Gbit/s.
        self.ip_advance_thre = ip_advance_thre  # type: int
        # The basic bandwidth of each protected IP address. Unit: Gbit/s.
        self.ip_basic_thre = ip_basic_thre  # type: int
        # The number of IP addresses that can be protected by the Anti-DDoS Origin Enterprise instance.
        self.ip_spec = ip_spec  # type: int
        # The normal clean bandwidth. Unit: Mbit/s.
        self.normal_bandwidth = normal_bandwidth  # type: int
        # The burstable protection bandwidth of the Anti-DDoS Origin Enterprise instance. Unit: Gbit/s.
        self.pack_adv_thre = pack_adv_thre  # type: int
        # The basic protection bandwidth of the Anti-DDoS Origin Enterprise instance. Unit: Gbit/s.
        self.pack_basic_thre = pack_basic_thre  # type: int

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeInstanceSpecsResponseBodyInstanceSpecsPackConfig, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.bandwidth is not None:
            result['Bandwidth'] = self.bandwidth
        if self.bind_ip_count is not None:
            result['BindIpCount'] = self.bind_ip_count
        if self.ip_advance_thre is not None:
            result['IpAdvanceThre'] = self.ip_advance_thre
        if self.ip_basic_thre is not None:
            result['IpBasicThre'] = self.ip_basic_thre
        if self.ip_spec is not None:
            result['IpSpec'] = self.ip_spec
        if self.normal_bandwidth is not None:
            result['NormalBandwidth'] = self.normal_bandwidth
        if self.pack_adv_thre is not None:
            result['PackAdvThre'] = self.pack_adv_thre
        if self.pack_basic_thre is not None:
            result['PackBasicThre'] = self.pack_basic_thre
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Bandwidth') is not None:
            self.bandwidth = m.get('Bandwidth')
        if m.get('BindIpCount') is not None:
            self.bind_ip_count = m.get('BindIpCount')
        if m.get('IpAdvanceThre') is not None:
            self.ip_advance_thre = m.get('IpAdvanceThre')
        if m.get('IpBasicThre') is not None:
            self.ip_basic_thre = m.get('IpBasicThre')
        if m.get('IpSpec') is not None:
            self.ip_spec = m.get('IpSpec')
        if m.get('NormalBandwidth') is not None:
            self.normal_bandwidth = m.get('NormalBandwidth')
        if m.get('PackAdvThre') is not None:
            self.pack_adv_thre = m.get('PackAdvThre')
        if m.get('PackBasicThre') is not None:
            self.pack_basic_thre = m.get('PackBasicThre')
        return self


class DescribeInstanceSpecsResponseBodyInstanceSpecs(TeaModel):
    def __init__(self, available_defense_times=None, available_delete_blackhole_count=None,
                 defense_times_percent=None, instance_id=None, is_full_defense_mode=None, pack_config=None, region=None,
                 total_defense_times=None):
        # The number of times that the unlimited protection feature can be enabled.
        self.available_defense_times = available_defense_times  # type: int
        # The number of times that blackhole filtering can be deactivated.
        self.available_delete_blackhole_count = available_delete_blackhole_count  # type: str
        self.defense_times_percent = defense_times_percent  # type: int
        # The ID of the Anti-DDoS Origin Enterprise instance.
        self.instance_id = instance_id  # type: str
        # Indicates whether the unlimited protection feature is enabled. Valid values:
        # 
        # *   **0**: The unlimited protection feature is disabled.
        # *   **1**: The unlimited protection feature is enabled.
        self.is_full_defense_mode = is_full_defense_mode  # type: int
        # The configurations of the Anti-DDoS Origin Enterprise instance, including the number of protected IP addresses and protection bandwidth.
        self.pack_config = pack_config  # type: DescribeInstanceSpecsResponseBodyInstanceSpecsPackConfig
        # The region ID of the Anti-DDoS Origin Enterprise instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the name of the region.
        self.region = region  # type: str
        # The number of times that the unlimited protection feature can be enabled.
        self.total_defense_times = total_defense_times  # type: int

    def validate(self):
        if self.pack_config:
            self.pack_config.validate()

    def to_map(self):
        _map = super(DescribeInstanceSpecsResponseBodyInstanceSpecs, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.available_defense_times is not None:
            result['AvailableDefenseTimes'] = self.available_defense_times
        if self.available_delete_blackhole_count is not None:
            result['AvailableDeleteBlackholeCount'] = self.available_delete_blackhole_count
        if self.defense_times_percent is not None:
            result['DefenseTimesPercent'] = self.defense_times_percent
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.is_full_defense_mode is not None:
            result['IsFullDefenseMode'] = self.is_full_defense_mode
        if self.pack_config is not None:
            result['PackConfig'] = self.pack_config.to_map()
        if self.region is not None:
            result['Region'] = self.region
        if self.total_defense_times is not None:
            result['TotalDefenseTimes'] = self.total_defense_times
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('AvailableDefenseTimes') is not None:
            self.available_defense_times = m.get('AvailableDefenseTimes')
        if m.get('AvailableDeleteBlackholeCount') is not None:
            self.available_delete_blackhole_count = m.get('AvailableDeleteBlackholeCount')
        if m.get('DefenseTimesPercent') is not None:
            self.defense_times_percent = m.get('DefenseTimesPercent')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('IsFullDefenseMode') is not None:
            self.is_full_defense_mode = m.get('IsFullDefenseMode')
        if m.get('PackConfig') is not None:
            temp_model = DescribeInstanceSpecsResponseBodyInstanceSpecsPackConfig()
            self.pack_config = temp_model.from_map(m['PackConfig'])
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('TotalDefenseTimes') is not None:
            self.total_defense_times = m.get('TotalDefenseTimes')
        return self


class DescribeInstanceSpecsResponseBody(TeaModel):
    def __init__(self, instance_specs=None, request_id=None):
        # The specifications of the Anti-DDoS Origin Enterprise instance, including whether the unlimited protection feature is enabled, and the numbers of times that the unlimited protection feature can be enabled and has been enabled.
        self.instance_specs = instance_specs  # type: list[DescribeInstanceSpecsResponseBodyInstanceSpecs]
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        if self.instance_specs:
            for k in self.instance_specs:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeInstanceSpecsResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['InstanceSpecs'] = []
        if self.instance_specs is not None:
            for k in self.instance_specs:
                result['InstanceSpecs'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.instance_specs = []
        if m.get('InstanceSpecs') is not None:
            for k in m.get('InstanceSpecs'):
                temp_model = DescribeInstanceSpecsResponseBodyInstanceSpecs()
                self.instance_specs.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DescribeInstanceSpecsResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeInstanceSpecsResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeInstanceSpecsResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeInstanceSpecsResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeOnDemandDdosEventRequest(TeaModel):
    def __init__(self, end_time=None, instance_id=None, ip=None, page_no=None, page_size=None, region_id=None,
                 resource_group_id=None, start_time=None):
        # The timestamp that specifies the end of the time range to query. Unit: seconds. The timestamp follows the UNIX time format. It is the number of seconds that have elapsed since 00:00:00 Thursday, 1 January 1970.
        self.end_time = end_time  # type: int
        # The ID of the on-demand instance to query.
        self.instance_id = instance_id  # type: str
        # The IP address of the protection target.
        self.ip = ip  # type: str
        # The number of the page to return. Default value: **1**.
        self.page_no = page_no  # type: int
        # The number of entries to return on each page. The maximum value is **50**. The default value is **10**.
        self.page_size = page_size  # type: int
        self.region_id = region_id  # type: str
        # The ID of the resource group.
        self.resource_group_id = resource_group_id  # type: str
        # The timestamp that specifies the beginning of the time range to query. Unit: seconds. The timestamp follows the UNIX time format. It is the number of seconds that have elapsed since 00:00:00 Thursday, 1 January 1970.
        self.start_time = start_time  # type: int

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeOnDemandDdosEventRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.page_no is not None:
            result['PageNo'] = self.page_no
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('PageNo') is not None:
            self.page_no = m.get('PageNo')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        return self


class DescribeOnDemandDdosEventResponseBodyEvents(TeaModel):
    def __init__(self, end_time=None, ip=None, mbps=None, pps=None, start_time=None, status=None):
        # The timestamp that indicates the end time of the attack. Unit: seconds. The timestamp follows the UNIX time format. It is the number of seconds that have elapsed since 00:00:00 Thursday, 1 January 1970.
        self.end_time = end_time  # type: int
        # The IP address of the protection target that encounters the DDoS attack.
        self.ip = ip  # type: str
        # The throughput of the DDoS attack. Unit: Mbit/s.
        self.mbps = mbps  # type: int
        # The packet forwarding rate of the DDoS attack. Unit: packets per second (PPS).
        self.pps = pps  # type: int
        # The timestamp that indicates the start time of the attack. Unit: seconds. The timestamp follows the UNIX time format. It is the number of seconds that have elapsed since 00:00:00 Thursday, 1 January 1970.
        self.start_time = start_time  # type: int
        # The status of the event. Valid values:
        # 
        # *   **hole_begin **: indicates that the event is in the blackhole state.
        # *   **hole_end **: indicates that blackhole ends.
        # *   **defense_begin **: indicates that the event is in the cleaning state.
        # *   **defense_end **: indicates that cleaning ends.
        self.status = status  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeOnDemandDdosEventResponseBodyEvents, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.mbps is not None:
            result['Mbps'] = self.mbps
        if self.pps is not None:
            result['Pps'] = self.pps
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        if self.status is not None:
            result['Status'] = self.status
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('Mbps') is not None:
            self.mbps = m.get('Mbps')
        if m.get('Pps') is not None:
            self.pps = m.get('Pps')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        return self


class DescribeOnDemandDdosEventResponseBody(TeaModel):
    def __init__(self, events=None, request_id=None, total=None):
        # The list of DDoS events and the details of each event.
        self.events = events  # type: list[DescribeOnDemandDdosEventResponseBodyEvents]
        # The ID of the request.
        self.request_id = request_id  # type: str
        # The total number of DDoS events.
        self.total = total  # type: long

    def validate(self):
        if self.events:
            for k in self.events:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeOnDemandDdosEventResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['Events'] = []
        if self.events is not None:
            for k in self.events:
                result['Events'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total is not None:
            result['Total'] = self.total
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.events = []
        if m.get('Events') is not None:
            for k in m.get('Events'):
                temp_model = DescribeOnDemandDdosEventResponseBodyEvents()
                self.events.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Total') is not None:
            self.total = m.get('Total')
        return self


class DescribeOnDemandDdosEventResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeOnDemandDdosEventResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeOnDemandDdosEventResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeOnDemandDdosEventResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeOnDemandInstanceStatusRequest(TeaModel):
    def __init__(self, instance_id_list=None, region_id=None):
        # The IDs of on-demand instances.
        # 
        # >  You can call the [DescribeOnDemandInstance](~~152120~~) operation to query the IDs of all on-demand instances.
        self.instance_id_list = instance_id_list  # type: list[str]
        # The region ID of the on-demand instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeOnDemandInstanceStatusRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id_list is not None:
            result['InstanceIdList'] = self.instance_id_list
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceIdList') is not None:
            self.instance_id_list = m.get('InstanceIdList')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        return self


class DescribeOnDemandInstanceStatusResponseBodyInstances(TeaModel):
    def __init__(self, declared=None, desc=None, instance_id=None, mode=None, net=None, registed_as=None,
                 user_id=None):
        # The details of route advertisement for data centers outside the Chinese mainland. This parameter is a JSON string. The following fields are included in the value:
        # 
        # *   **region**: The code of the data center outside the Chinese mainland. The value is of the STRING type. For more information, see **Codes of data centers outside the Chinese mainland**.
        # *   **declared**: indicates whether the data center advertised the route. The value is of the STRING type. Valid values: **0** and **1**. The value of 0 indicates that the data center did not advertise the route. The value of 1 indicates that the data center advertised the route.
        self.declared = declared  # type: str
        # The description of the on-demand instance.
        # 
        # >  The value of this parameter is returned only when the information about multiple on-demand instances is returned. The value of this parameter is not returned because the information about only one on-demand instance is returned.
        self.desc = desc  # type: str
        # The ID of the on-demand instance.
        # 
        # >  The value of this parameter is returned only when the information about multiple on-demand instances is returned. The value of this parameter is not returned because the information about only one on-demand instance is returned.
        self.instance_id = instance_id  # type: str
        # The mode used to start the on-demand instance. Valid values:
        # 
        # *   **manual**: The instance is manually started.
        # *   **netflow-auto**: The instance is automatically started by using NetFlow that monitors network traffic.
        self.mode = mode  # type: str
        # The CIDR block of the on-demand instance.
        self.net = net  # type: str
        # The number of the autonomous system (AS). Set the value to **0**, which indicates that AS is disabled.
        self.registed_as = registed_as  # type: str
        # The ID of the Alibaba Cloud account.
        self.user_id = user_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeOnDemandInstanceStatusResponseBodyInstances, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.declared is not None:
            result['Declared'] = self.declared
        if self.desc is not None:
            result['Desc'] = self.desc
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.mode is not None:
            result['Mode'] = self.mode
        if self.net is not None:
            result['Net'] = self.net
        if self.registed_as is not None:
            result['RegistedAs'] = self.registed_as
        if self.user_id is not None:
            result['UserId'] = self.user_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Declared') is not None:
            self.declared = m.get('Declared')
        if m.get('Desc') is not None:
            self.desc = m.get('Desc')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('Mode') is not None:
            self.mode = m.get('Mode')
        if m.get('Net') is not None:
            self.net = m.get('Net')
        if m.get('RegistedAs') is not None:
            self.registed_as = m.get('RegistedAs')
        if m.get('UserId') is not None:
            self.user_id = m.get('UserId')
        return self


class DescribeOnDemandInstanceStatusResponseBody(TeaModel):
    def __init__(self, instances=None, request_id=None):
        # The details of the on-demand instance.
        self.instances = instances  # type: list[DescribeOnDemandInstanceStatusResponseBodyInstances]
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        if self.instances:
            for k in self.instances:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeOnDemandInstanceStatusResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['Instances'] = []
        if self.instances is not None:
            for k in self.instances:
                result['Instances'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.instances = []
        if m.get('Instances') is not None:
            for k in m.get('Instances'):
                temp_model = DescribeOnDemandInstanceStatusResponseBodyInstances()
                self.instances.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DescribeOnDemandInstanceStatusResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeOnDemandInstanceStatusResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeOnDemandInstanceStatusResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeOnDemandInstanceStatusResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeOpEntitiesRequest(TeaModel):
    def __init__(self, current_page=None, end_time=None, instance_id=None, order_by=None, order_dir=None,
                 page_size=None, region_id=None, resource_group_id=None, start_time=None):
        # The operation that you want to perform. Set the value to **DescribeOpEntities**.
        self.current_page = current_page  # type: int
        # The details of the operation log.
        self.end_time = end_time  # type: long
        # The page number of the returned page.
        self.instance_id = instance_id  # type: str
        # The sort order of operation logs. Valid values:
        # 
        # *   **ASC**: the ascending order.
        # *   **DESC**: the descending order.
        self.order_by = order_by  # type: str
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.order_dir = order_dir  # type: str
        # The type of the operation object. The value is fixed as **1**, which indicates Anti-DDoS Origin instances.
        self.page_size = page_size  # type: int
        # The ID of the Alibaba Cloud account that performs the operation.
        # 
        # >  If the value is **system**, the operation is performed by Anti-DDoS Origin.
        self.region_id = region_id  # type: str
        # The details about the operation. The value is a string that consists of a JSON struct. The JSON struct contains the following fields:
        # 
        # *   **entity**: the operation object. Data type: object. The fields that are included in the value of the **entity** parameter vary based on the value of the **OpAction** parameter. Take note of the following items:
        # 
        #     *   If the value of the **OpAction** parameter is **3**, the value of the **entity** parameter consists of the following field:
        # 
        #         *   **ips**: the public IP addresses that are protected by the Anti-DDoS Origin instance. Data type: array
        # 
        #     *   If the value of the **OpAction** parameter is **4**, the value of the **entity** parameter consists of the following field:
        # 
        #         *   **ips**: the public IP addresses that are no longer protected by the Anti-DDoS Origin instance. Data type: array.
        # 
        #     *   If the value of the **OpAction** parameter is **5**, the value of the **entity** parameter consists of the following fields:
        # 
        #         *   **baseBandwidth**: the basic protection bandwidth. Unit: Gbit/s. Data type: integer.
        #         *   **elasticBandwidth**: the burstable protection bandwidth. Unit: Gbit/s. Data type: integer.
        #         *   **opSource**: the source of the operation. The value is fixed as **1**, indicating that the operation is performed by Anti-DDoS Origin. Data type: integer.
        # 
        #     *   If the value of the **OpAction** parameter is **6**, the value of the **entity** parameter consists of the following field:
        # 
        #         *   **ips**: the public IP addresses for which to deactivate blackhole filtering. Data type: array.
        # 
        #     *   If the value of the **OpAction** parameter is **7**, the **entity** parameter is not returned.
        # 
        #     *   If the value of the **OpAction** parameter is **8**, the value of the **entity** parameter consists of the following fields:
        # 
        #         *   **baseBandwidth**: the basic protection bandwidth. Unit: Gbit/s. Data type: integer.
        #         *   **elasticBandwidth**: the burstable protection bandwidth. Unit: Gbit/s. Data type: integer.
        self.resource_group_id = resource_group_id  # type: str
        # The sorting method of operation logs. Set the value to **opdate**, which indicates sorting based on the operation time.
        self.start_time = start_time  # type: long

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeOpEntitiesRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.current_page is not None:
            result['CurrentPage'] = self.current_page
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.order_by is not None:
            result['OrderBy'] = self.order_by
        if self.order_dir is not None:
            result['OrderDir'] = self.order_dir
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('CurrentPage') is not None:
            self.current_page = m.get('CurrentPage')
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('OrderBy') is not None:
            self.order_by = m.get('OrderBy')
        if m.get('OrderDir') is not None:
            self.order_dir = m.get('OrderDir')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        return self


class DescribeOpEntitiesResponseBodyOpEntities(TeaModel):
    def __init__(self, entity_object=None, entity_type=None, gmt_create=None, op_account=None, op_action=None,
                 op_desc=None):
        # Queries the operation logs of an Anti-DDoS Origin instance.
        self.entity_object = entity_object  # type: str
        # All Alibaba Cloud API operations must include common request parameters. For more information about common request parameters, see [Common parameters](~~118841~~).
        # 
        # For more information about sample requests, see the **"Examples"** section of this topic.
        self.entity_type = entity_type  # type: int
        # WB01342967
        self.gmt_create = gmt_create  # type: long
        self.op_account = op_account  # type: str
        # DescribeOpEntities
        self.op_action = op_action  # type: int
        self.op_desc = op_desc  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeOpEntitiesResponseBodyOpEntities, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.entity_object is not None:
            result['EntityObject'] = self.entity_object
        if self.entity_type is not None:
            result['EntityType'] = self.entity_type
        if self.gmt_create is not None:
            result['GmtCreate'] = self.gmt_create
        if self.op_account is not None:
            result['OpAccount'] = self.op_account
        if self.op_action is not None:
            result['OpAction'] = self.op_action
        if self.op_desc is not None:
            result['OpDesc'] = self.op_desc
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('EntityObject') is not None:
            self.entity_object = m.get('EntityObject')
        if m.get('EntityType') is not None:
            self.entity_type = m.get('EntityType')
        if m.get('GmtCreate') is not None:
            self.gmt_create = m.get('GmtCreate')
        if m.get('OpAccount') is not None:
            self.op_account = m.get('OpAccount')
        if m.get('OpAction') is not None:
            self.op_action = m.get('OpAction')
        if m.get('OpDesc') is not None:
            self.op_desc = m.get('OpDesc')
        return self


class DescribeOpEntitiesResponseBody(TeaModel):
    def __init__(self, op_entities=None, request_id=None, total_count=None):
        # The ID of the request.
        self.op_entities = op_entities  # type: list[DescribeOpEntitiesResponseBodyOpEntities]
        # The end time. Operation logs that were generated before this time are queried.**** This value is a UNIX timestamp. Unit: milliseconds.
        self.request_id = request_id  # type: str
        # The time when the log was generated. This value is a UNIX timestamp. Unit: milliseconds.
        self.total_count = total_count  # type: int

    def validate(self):
        if self.op_entities:
            for k in self.op_entities:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeOpEntitiesResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['OpEntities'] = []
        if self.op_entities is not None:
            for k in self.op_entities:
                result['OpEntities'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total_count is not None:
            result['TotalCount'] = self.total_count
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.op_entities = []
        if m.get('OpEntities') is not None:
            for k in m.get('OpEntities'):
                temp_model = DescribeOpEntitiesResponseBodyOpEntities()
                self.op_entities.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('TotalCount') is not None:
            self.total_count = m.get('TotalCount')
        return self


class DescribeOpEntitiesResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeOpEntitiesResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeOpEntitiesResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeOpEntitiesResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribePackIpListRequest(TeaModel):
    def __init__(self, instance_id=None, ip=None, member_uid=None, page_no=None, page_size=None, product_name=None,
                 region_id=None, resource_group_id=None):
        # The ID of the Anti-DDoS Origin instance to query.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances.
        self.instance_id = instance_id  # type: str
        # The protected IP address to query.
        self.ip = ip  # type: str
        # The ID of the member.
        self.member_uid = member_uid  # type: str
        # The number of the page to return.
        self.page_no = page_no  # type: int
        # The number of entries to return on each page.
        self.page_size = page_size  # type: int
        # The type of the cloud asset to which the protected IP address to query belongs. Valid values:
        # 
        # *   **ECS**: an Elastic Compute Service (ECS) instance.
        # *   **SLB**: a Classic Load Balancer (CLB) instance, originally called a Server Load Balancer (SLB) instance.
        # *   **EIP**: an elastic IP address (EIP). An Internet-facing Application Load Balancer (ALB) instance uses an EIP. If the IP address belongs to the Internet-facing ALB instance, set this parameter to EIP.
        # *   **WAF**: a Web Application Firewall (WAF) instance.
        self.product_name = product_name  # type: str
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribePackIpListRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.member_uid is not None:
            result['MemberUid'] = self.member_uid
        if self.page_no is not None:
            result['PageNo'] = self.page_no
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.product_name is not None:
            result['ProductName'] = self.product_name
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('MemberUid') is not None:
            self.member_uid = m.get('MemberUid')
        if m.get('PageNo') is not None:
            self.page_no = m.get('PageNo')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('ProductName') is not None:
            self.product_name = m.get('ProductName')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class DescribePackIpListResponseBodyIpList(TeaModel):
    def __init__(self, ip=None, member_uid=None, nsm_status=None, product=None, region=None, remark=None, status=None):
        # The IP address.
        self.ip = ip  # type: str
        # The ID of the member.
        self.member_uid = member_uid  # type: str
        self.nsm_status = nsm_status  # type: int
        # The type of the cloud asset to which the IP address belongs. Valid values:
        # 
        # *   **ECS**: an ECS instance.
        # *   **SLB**: a CLB instance, originally called an SLB instance.
        # *   **EIP**: an EIP. If the IP address belongs to an ALB instance, the value EIP is returned.
        # *   **WAF**: a WAF instance.
        self.product = product  # type: str
        # The region to which the protected IP address belongs.
        # 
        # >  If the protected IP address is in the same region as the instance, this parameter is not returned.
        self.region = region  # type: str
        # The description of the cloud asset to which the IP address belongs. The asset can be an ECS instance or an SLB instance.
        # 
        # >  If no descriptions are provided for the asset, this parameter is not returned.
        self.remark = remark  # type: str
        # The status of the IP address. Valid values:
        # 
        # *   **normal**: The IP address is in the normal state, which indicates that the IP address is not under attack.
        # *   **hole_begin**: Blackhole filtering is triggered for the IP address.
        self.status = status  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribePackIpListResponseBodyIpList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.member_uid is not None:
            result['MemberUid'] = self.member_uid
        if self.nsm_status is not None:
            result['NsmStatus'] = self.nsm_status
        if self.product is not None:
            result['Product'] = self.product
        if self.region is not None:
            result['Region'] = self.region
        if self.remark is not None:
            result['Remark'] = self.remark
        if self.status is not None:
            result['Status'] = self.status
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('MemberUid') is not None:
            self.member_uid = m.get('MemberUid')
        if m.get('NsmStatus') is not None:
            self.nsm_status = m.get('NsmStatus')
        if m.get('Product') is not None:
            self.product = m.get('Product')
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('Remark') is not None:
            self.remark = m.get('Remark')
        if m.get('Status') is not None:
            self.status = m.get('Status')
        return self


class DescribePackIpListResponseBody(TeaModel):
    def __init__(self, code=None, ip_list=None, request_id=None, success=None, total=None):
        # The HTTP status code of the request.
        # 
        # For more information about status codes, see [Common parameters](~~118841~~).
        self.code = code  # type: str
        # The IP addresses that are protected by the instance.
        self.ip_list = ip_list  # type: list[DescribePackIpListResponseBodyIpList]
        # The ID of the request.
        self.request_id = request_id  # type: str
        # Indicates whether the request is successful. Valid values:
        # 
        # *   **true**: The call is successful.
        # *   **false**: The call fails.
        self.success = success  # type: bool
        # The number of protected IP addresses.
        self.total = total  # type: int

    def validate(self):
        if self.ip_list:
            for k in self.ip_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribePackIpListResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        result['IpList'] = []
        if self.ip_list is not None:
            for k in self.ip_list:
                result['IpList'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.success is not None:
            result['Success'] = self.success
        if self.total is not None:
            result['Total'] = self.total
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        self.ip_list = []
        if m.get('IpList') is not None:
            for k in m.get('IpList'):
                temp_model = DescribePackIpListResponseBodyIpList()
                self.ip_list.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Success') is not None:
            self.success = m.get('Success')
        if m.get('Total') is not None:
            self.total = m.get('Total')
        return self


class DescribePackIpListResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribePackIpListResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribePackIpListResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribePackIpListResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeRdMemberListRequest(TeaModel):
    def __init__(self, page_no=None, page_size=None, resource_directory_id=None):
        self.page_no = page_no  # type: int
        self.page_size = page_size  # type: int
        self.resource_directory_id = resource_directory_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeRdMemberListRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.page_no is not None:
            result['PageNo'] = self.page_no
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.resource_directory_id is not None:
            result['ResourceDirectoryId'] = self.resource_directory_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('PageNo') is not None:
            self.page_no = m.get('PageNo')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('ResourceDirectoryId') is not None:
            self.resource_directory_id = m.get('ResourceDirectoryId')
        return self


class DescribeRdMemberListResponseBodyMemberList(TeaModel):
    def __init__(self, gmt_create=None, name=None, uid=None):
        self.gmt_create = gmt_create  # type: long
        self.name = name  # type: str
        self.uid = uid  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeRdMemberListResponseBodyMemberList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.gmt_create is not None:
            result['GmtCreate'] = self.gmt_create
        if self.name is not None:
            result['Name'] = self.name
        if self.uid is not None:
            result['Uid'] = self.uid
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('GmtCreate') is not None:
            self.gmt_create = m.get('GmtCreate')
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Uid') is not None:
            self.uid = m.get('Uid')
        return self


class DescribeRdMemberListResponseBody(TeaModel):
    def __init__(self, member_list=None, request_id=None, total=None):
        self.member_list = member_list  # type: list[DescribeRdMemberListResponseBodyMemberList]
        self.request_id = request_id  # type: str
        self.total = total  # type: long

    def validate(self):
        if self.member_list:
            for k in self.member_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeRdMemberListResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['MemberList'] = []
        if self.member_list is not None:
            for k in self.member_list:
                result['MemberList'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.total is not None:
            result['Total'] = self.total
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.member_list = []
        if m.get('MemberList') is not None:
            for k in m.get('MemberList'):
                temp_model = DescribeRdMemberListResponseBodyMemberList()
                self.member_list.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Total') is not None:
            self.total = m.get('Total')
        return self


class DescribeRdMemberListResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeRdMemberListResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeRdMemberListResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeRdMemberListResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeRdStatusResponseBody(TeaModel):
    def __init__(self, current_uid=None, current_uid_type=None, enabled=None, local_enable=None, master_uid=None,
                 remote_enable=None, request_id=None, root_uid=None, service_principal_enabled=None):
        self.current_uid = current_uid  # type: str
        self.current_uid_type = current_uid_type  # type: str
        self.enabled = enabled  # type: bool
        self.local_enable = local_enable  # type: bool
        self.master_uid = master_uid  # type: str
        self.remote_enable = remote_enable  # type: bool
        self.request_id = request_id  # type: str
        self.root_uid = root_uid  # type: str
        self.service_principal_enabled = service_principal_enabled  # type: bool

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeRdStatusResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.current_uid is not None:
            result['CurrentUid'] = self.current_uid
        if self.current_uid_type is not None:
            result['CurrentUidType'] = self.current_uid_type
        if self.enabled is not None:
            result['Enabled'] = self.enabled
        if self.local_enable is not None:
            result['LocalEnable'] = self.local_enable
        if self.master_uid is not None:
            result['MasterUid'] = self.master_uid
        if self.remote_enable is not None:
            result['RemoteEnable'] = self.remote_enable
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.root_uid is not None:
            result['RootUid'] = self.root_uid
        if self.service_principal_enabled is not None:
            result['ServicePrincipalEnabled'] = self.service_principal_enabled
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('CurrentUid') is not None:
            self.current_uid = m.get('CurrentUid')
        if m.get('CurrentUidType') is not None:
            self.current_uid_type = m.get('CurrentUidType')
        if m.get('Enabled') is not None:
            self.enabled = m.get('Enabled')
        if m.get('LocalEnable') is not None:
            self.local_enable = m.get('LocalEnable')
        if m.get('MasterUid') is not None:
            self.master_uid = m.get('MasterUid')
        if m.get('RemoteEnable') is not None:
            self.remote_enable = m.get('RemoteEnable')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('RootUid') is not None:
            self.root_uid = m.get('RootUid')
        if m.get('ServicePrincipalEnabled') is not None:
            self.service_principal_enabled = m.get('ServicePrincipalEnabled')
        return self


class DescribeRdStatusResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeRdStatusResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeRdStatusResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeRdStatusResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeRegionsRequest(TeaModel):
    def __init__(self, region_id=None, resource_group_id=None):
        # The region ID to query. The default value is **cn-hangzhou**, which indicates that the regions of cloud assets that are supported by an Anti-DDoS Origin instance in the China (Hangzhou) region are queried.
        # 
        # For more information about the IDs of other regions, see [Regions and zones](~~40654~~).
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management. This parameter is empty by default, which indicates that the instance belongs to the default resource group.
        # 
        # For more information about resource groups, see [Create a resource group](~~94485~~).
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeRegionsRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class DescribeRegionsResponseBodyRegions(TeaModel):
    def __init__(self, region_en_name=None, region_id=None, region_name=None):
        # The English name of the region where the cloud assets reside.
        self.region_en_name = region_en_name  # type: str
        # The ID of the region.
        self.region_id = region_id  # type: str
        # The name of the region where the cloud assets reside.
        self.region_name = region_name  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeRegionsResponseBodyRegions, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.region_en_name is not None:
            result['RegionEnName'] = self.region_en_name
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.region_name is not None:
            result['RegionName'] = self.region_name
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RegionEnName') is not None:
            self.region_en_name = m.get('RegionEnName')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('RegionName') is not None:
            self.region_name = m.get('RegionName')
        return self


class DescribeRegionsResponseBody(TeaModel):
    def __init__(self, code=None, regions=None, request_id=None, success=None):
        # The HTTP status code.
        self.code = code  # type: str
        # The information about regions of the cloud assets that are supported by the Anti-DDoS Origin instance. The information includes region IDs and names.
        self.regions = regions  # type: list[DescribeRegionsResponseBodyRegions]
        # The ID of the request.
        self.request_id = request_id  # type: str
        # Indicates whether the request is successful. Valid values:
        # 
        # *   **true**: The request is successful.
        # *   **false**: The request failed.
        self.success = success  # type: bool

    def validate(self):
        if self.regions:
            for k in self.regions:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeRegionsResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.code is not None:
            result['Code'] = self.code
        result['Regions'] = []
        if self.regions is not None:
            for k in self.regions:
                result['Regions'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.success is not None:
            result['Success'] = self.success
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Code') is not None:
            self.code = m.get('Code')
        self.regions = []
        if m.get('Regions') is not None:
            for k in m.get('Regions'):
                temp_model = DescribeRegionsResponseBodyRegions()
                self.regions.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('Success') is not None:
            self.success = m.get('Success')
        return self


class DescribeRegionsResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeRegionsResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeRegionsResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeRegionsResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DescribeTrafficRequest(TeaModel):
    def __init__(self, end_time=None, flow_type=None, instance_id=None, interval=None, ip=None, ipnet=None,
                 region_id=None, resource_group_id=None, start_time=None):
        # The end of the time range to query. The value is a UNIX timestamp. Unit: seconds.
        # 
        # If you do not specify this parameter, the current system time is used as the end time.
        self.end_time = end_time  # type: int
        # The type of the traffic statistics to query. Valid values:
        # 
        # *   **max**: the peak traffic within the specified interval
        # *   **avg**: the average traffic within the specified interval
        self.flow_type = flow_type  # type: str
        # The ID of the Anti-DDoS Origin instance to query.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances.
        # 
        # If you specify an on-demand instance, you must configure the **Interval** parameter.
        self.instance_id = instance_id  # type: str
        # The interval at which the traffic statistics are calculated. Unit: seconds. Default value: **5**.
        self.interval = interval  # type: int
        # The public IP address of the asset to query. If you do not specify this parameter, the traffic statistics of all public IP addresses that are protected by the Anti-DDoS Origin instance are queried.
        # 
        # >  The public IP address must be a protected object of the Anti-DDoS Origin instance. You can call the [DescribePackIpList](~~118701~~) operation to query all protected objects of the Anti-DDoS Origin instance.
        self.ip = ip  # type: str
        # The Classless Inter-Domain Routing (CIDR) block of the on-demand instance that you want to query.
        self.ipnet = ipnet  # type: str
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str
        # The beginning of the time range to query. The value is a UNIX timestamp. Unit: seconds.
        self.start_time = start_time  # type: int

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeTrafficRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.end_time is not None:
            result['EndTime'] = self.end_time
        if self.flow_type is not None:
            result['FlowType'] = self.flow_type
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.interval is not None:
            result['Interval'] = self.interval
        if self.ip is not None:
            result['Ip'] = self.ip
        if self.ipnet is not None:
            result['Ipnet'] = self.ipnet
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.start_time is not None:
            result['StartTime'] = self.start_time
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('EndTime') is not None:
            self.end_time = m.get('EndTime')
        if m.get('FlowType') is not None:
            self.flow_type = m.get('FlowType')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('Interval') is not None:
            self.interval = m.get('Interval')
        if m.get('Ip') is not None:
            self.ip = m.get('Ip')
        if m.get('Ipnet') is not None:
            self.ipnet = m.get('Ipnet')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('StartTime') is not None:
            self.start_time = m.get('StartTime')
        return self


class DescribeTrafficResponseBodyFlowList(TeaModel):
    def __init__(self, attack_bps=None, attack_pps=None, flow_type=None, kbps=None, name=None, pps=None, time=None):
        # The bandwidth of attack traffic. Unit: bit/s.
        # 
        # >  This parameter is returned only if attack traffic exists.
        self.attack_bps = attack_bps  # type: long
        # The packet forwarding rate of attack traffic. Unit: packets per second.
        # 
        # >  This parameter is returned only if attack traffic exists.
        self.attack_pps = attack_pps  # type: long
        # The type of the traffic statistics. Valid values:
        # 
        # *   **max**: the peak traffic within the specified interval
        # *   **avg**: the average traffic within the specified interval
        self.flow_type = flow_type  # type: str
        # The bandwidth of the total traffic. Unit: Kbit/s.
        self.kbps = kbps  # type: int
        # The ID of the traffic statistics.
        self.name = name  # type: str
        # The packet forwarding rate of the total traffic. Unit: packets per second.
        self.pps = pps  # type: int
        # The time when the traffic statistics are calculated. This value is a UNIX timestamp. Unit: seconds.
        self.time = time  # type: int

    def validate(self):
        pass

    def to_map(self):
        _map = super(DescribeTrafficResponseBodyFlowList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.attack_bps is not None:
            result['AttackBps'] = self.attack_bps
        if self.attack_pps is not None:
            result['AttackPps'] = self.attack_pps
        if self.flow_type is not None:
            result['FlowType'] = self.flow_type
        if self.kbps is not None:
            result['Kbps'] = self.kbps
        if self.name is not None:
            result['Name'] = self.name
        if self.pps is not None:
            result['Pps'] = self.pps
        if self.time is not None:
            result['Time'] = self.time
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('AttackBps') is not None:
            self.attack_bps = m.get('AttackBps')
        if m.get('AttackPps') is not None:
            self.attack_pps = m.get('AttackPps')
        if m.get('FlowType') is not None:
            self.flow_type = m.get('FlowType')
        if m.get('Kbps') is not None:
            self.kbps = m.get('Kbps')
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Pps') is not None:
            self.pps = m.get('Pps')
        if m.get('Time') is not None:
            self.time = m.get('Time')
        return self


class DescribeTrafficResponseBody(TeaModel):
    def __init__(self, flow_list=None, request_id=None):
        # The queried traffic statistics.
        self.flow_list = flow_list  # type: list[DescribeTrafficResponseBodyFlowList]
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        if self.flow_list:
            for k in self.flow_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DescribeTrafficResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['FlowList'] = []
        if self.flow_list is not None:
            for k in self.flow_list:
                result['FlowList'].append(k.to_map() if k else None)
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.flow_list = []
        if m.get('FlowList') is not None:
            for k in m.get('FlowList'):
                temp_model = DescribeTrafficResponseBodyFlowList()
                self.flow_list.append(temp_model.from_map(k))
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DescribeTrafficResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DescribeTrafficResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DescribeTrafficResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DescribeTrafficResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class DettachAssetGroupToInstanceRequestAssetGroupList(TeaModel):
    def __init__(self, name=None, region=None, type=None):
        # The ID of the asset. If the asset is a Web Application Firewall (WAF) instance, specify the ID of the WAF instance.
        self.name = name  # type: str
        # The region ID of the asset.
        self.region = region  # type: str
        # The type of the asset. Valid values:
        # 
        # *   **waf**: WAF instance
        # *   **ga**: Global Accelerator (GA) instance
        self.type = type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DettachAssetGroupToInstanceRequestAssetGroupList, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.name is not None:
            result['Name'] = self.name
        if self.region is not None:
            result['Region'] = self.region
        if self.type is not None:
            result['Type'] = self.type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Name') is not None:
            self.name = m.get('Name')
        if m.get('Region') is not None:
            self.region = m.get('Region')
        if m.get('Type') is not None:
            self.type = m.get('Type')
        return self


class DettachAssetGroupToInstanceRequest(TeaModel):
    def __init__(self, asset_group_list=None, instance_id=None, region_id=None, source_ip=None):
        # The information about the asset that you want to dissociate.
        self.asset_group_list = asset_group_list  # type: list[DettachAssetGroupToInstanceRequestAssetGroupList]
        # The ID of the instance.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances of paid editions.
        self.instance_id = instance_id  # type: str
        # The ID of the region in which the instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The source IP address of the request. The system specifies this parameter.
        self.source_ip = source_ip  # type: str

    def validate(self):
        if self.asset_group_list:
            for k in self.asset_group_list:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(DettachAssetGroupToInstanceRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['AssetGroupList'] = []
        if self.asset_group_list is not None:
            for k in self.asset_group_list:
                result['AssetGroupList'].append(k.to_map() if k else None)
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.source_ip is not None:
            result['SourceIp'] = self.source_ip
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.asset_group_list = []
        if m.get('AssetGroupList') is not None:
            for k in m.get('AssetGroupList'):
                temp_model = DettachAssetGroupToInstanceRequestAssetGroupList()
                self.asset_group_list.append(temp_model.from_map(k))
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('SourceIp') is not None:
            self.source_ip = m.get('SourceIp')
        return self


class DettachAssetGroupToInstanceShrinkRequest(TeaModel):
    def __init__(self, asset_group_list_shrink=None, instance_id=None, region_id=None, source_ip=None):
        # The information about the asset that you want to dissociate.
        self.asset_group_list_shrink = asset_group_list_shrink  # type: str
        # The ID of the instance.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances of paid editions.
        self.instance_id = instance_id  # type: str
        # The ID of the region in which the instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The source IP address of the request. The system specifies this parameter.
        self.source_ip = source_ip  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DettachAssetGroupToInstanceShrinkRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.asset_group_list_shrink is not None:
            result['AssetGroupList'] = self.asset_group_list_shrink
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.source_ip is not None:
            result['SourceIp'] = self.source_ip
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('AssetGroupList') is not None:
            self.asset_group_list_shrink = m.get('AssetGroupList')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('SourceIp') is not None:
            self.source_ip = m.get('SourceIp')
        return self


class DettachAssetGroupToInstanceResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The request ID.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(DettachAssetGroupToInstanceResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class DettachAssetGroupToInstanceResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: DettachAssetGroupToInstanceResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(DettachAssetGroupToInstanceResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = DettachAssetGroupToInstanceResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class GetSlsOpenStatusRequest(TeaModel):
    def __init__(self, region_id=None, resource_group_id=None):
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # For more information about the valid values of this parameter, see [Regions and zones](~~188196~~).
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management. This parameter is empty by default, which indicates that the Anti-DDoS Origin instance belongs to the default resource group.
        # 
        # For more information about resource groups, see [Create a resource group](~~94485~~).
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(GetSlsOpenStatusRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class GetSlsOpenStatusResponseBody(TeaModel):
    def __init__(self, request_id=None, sls_open_status=None):
        # The ID of the request.
        self.request_id = request_id  # type: str
        # Indicates whether Log Service was activated. Valid values:
        # 
        # *   **true**: Log Service was activated.
        # *   **false**: Log Service was not activated.
        self.sls_open_status = sls_open_status  # type: bool

    def validate(self):
        pass

    def to_map(self):
        _map = super(GetSlsOpenStatusResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.sls_open_status is not None:
            result['SlsOpenStatus'] = self.sls_open_status
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('SlsOpenStatus') is not None:
            self.sls_open_status = m.get('SlsOpenStatus')
        return self


class GetSlsOpenStatusResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: GetSlsOpenStatusResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(GetSlsOpenStatusResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = GetSlsOpenStatusResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ListOpenedAccessLogInstancesRequest(TeaModel):
    def __init__(self, page_number=None, page_size=None, resource_group_id=None):
        # The number of the page to return. Pages start from page 1. Default value: **1**.
        self.page_number = page_number  # type: int
        # The number of entries to return on each page. Default value: **10**.
        self.page_size = page_size  # type: int
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management. This parameter is empty by default, which indicates that the Anti-DDoS Origin instance belongs to the default resource group.
        # 
        # For more information about resource groups, see [Create a resource group](~~94485~~).
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ListOpenedAccessLogInstancesRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.page_number is not None:
            result['PageNumber'] = self.page_number
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('PageNumber') is not None:
            self.page_number = m.get('PageNumber')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class ListOpenedAccessLogInstancesResponseBodySlsConfigStatus(TeaModel):
    def __init__(self, enable=None, instance_id=None):
        # Indicates whether log analysis was enabled for the Anti-DDoS Origin instance. Valid values:
        # 
        # *   **true**: Log analysis was enabled.
        # *   **false**: Log analysis was disabled.
        self.enable = enable  # type: bool
        # The ID of the Anti-DDoS Origin instance.
        self.instance_id = instance_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ListOpenedAccessLogInstancesResponseBodySlsConfigStatus, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.enable is not None:
            result['Enable'] = self.enable
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Enable') is not None:
            self.enable = m.get('Enable')
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        return self


class ListOpenedAccessLogInstancesResponseBody(TeaModel):
    def __init__(self, request_id=None, sls_config_status=None, total_count=None):
        # The ID of the request.
        self.request_id = request_id  # type: str
        # The configuration of log analysis for the Anti-DDoS Origin instance.
        self.sls_config_status = sls_config_status  # type: list[ListOpenedAccessLogInstancesResponseBodySlsConfigStatus]
        # The number of the Anti-DDoS Origin instances for which log analysis was enabled.
        self.total_count = total_count  # type: int

    def validate(self):
        if self.sls_config_status:
            for k in self.sls_config_status:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(ListOpenedAccessLogInstancesResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        result['SlsConfigStatus'] = []
        if self.sls_config_status is not None:
            for k in self.sls_config_status:
                result['SlsConfigStatus'].append(k.to_map() if k else None)
        if self.total_count is not None:
            result['TotalCount'] = self.total_count
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        self.sls_config_status = []
        if m.get('SlsConfigStatus') is not None:
            for k in m.get('SlsConfigStatus'):
                temp_model = ListOpenedAccessLogInstancesResponseBodySlsConfigStatus()
                self.sls_config_status.append(temp_model.from_map(k))
        if m.get('TotalCount') is not None:
            self.total_count = m.get('TotalCount')
        return self


class ListOpenedAccessLogInstancesResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: ListOpenedAccessLogInstancesResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(ListOpenedAccessLogInstancesResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ListOpenedAccessLogInstancesResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ListTagKeysRequest(TeaModel):
    def __init__(self, current_page=None, page_size=None, region_id=None, resource_group_id=None,
                 resource_type=None):
        # The number of the page to return. Pages start from page **1**. Default value: **1**.
        self.current_page = current_page  # type: int
        # The number of entries to return on each page. Valid values: 1 to **50**. Default value: **10**.
        self.page_size = page_size  # type: int
        # The region ID.
        self.region_id = region_id  # type: str
        # The ID of the resource group.
        self.resource_group_id = resource_group_id  # type: str
        # The type of the resource. Valid value: **INSTANCE**.
        self.resource_type = resource_type  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ListTagKeysRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.current_page is not None:
            result['CurrentPage'] = self.current_page
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.resource_type is not None:
            result['ResourceType'] = self.resource_type
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('CurrentPage') is not None:
            self.current_page = m.get('CurrentPage')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('ResourceType') is not None:
            self.resource_type = m.get('ResourceType')
        return self


class ListTagKeysResponseBodyTagKeys(TeaModel):
    def __init__(self, tag_count=None, tag_key=None):
        # The total number of tag values that correspond to each key.
        self.tag_count = tag_count  # type: int
        # The key of each tag.
        self.tag_key = tag_key  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ListTagKeysResponseBodyTagKeys, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.tag_count is not None:
            result['TagCount'] = self.tag_count
        if self.tag_key is not None:
            result['TagKey'] = self.tag_key
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('TagCount') is not None:
            self.tag_count = m.get('TagCount')
        if m.get('TagKey') is not None:
            self.tag_key = m.get('TagKey')
        return self


class ListTagKeysResponseBody(TeaModel):
    def __init__(self, current_page=None, page_size=None, request_id=None, tag_keys=None, total_count=None):
        # The page number of the returned page.
        self.current_page = current_page  # type: int
        # The number of entries returned per page.
        self.page_size = page_size  # type: int
        # The ID of the request.
        self.request_id = request_id  # type: str
        # The list of tags and the details of each tag.
        self.tag_keys = tag_keys  # type: list[ListTagKeysResponseBodyTagKeys]
        # The total number of tags.
        self.total_count = total_count  # type: int

    def validate(self):
        if self.tag_keys:
            for k in self.tag_keys:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(ListTagKeysResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.current_page is not None:
            result['CurrentPage'] = self.current_page
        if self.page_size is not None:
            result['PageSize'] = self.page_size
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        result['TagKeys'] = []
        if self.tag_keys is not None:
            for k in self.tag_keys:
                result['TagKeys'].append(k.to_map() if k else None)
        if self.total_count is not None:
            result['TotalCount'] = self.total_count
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('CurrentPage') is not None:
            self.current_page = m.get('CurrentPage')
        if m.get('PageSize') is not None:
            self.page_size = m.get('PageSize')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        self.tag_keys = []
        if m.get('TagKeys') is not None:
            for k in m.get('TagKeys'):
                temp_model = ListTagKeysResponseBodyTagKeys()
                self.tag_keys.append(temp_model.from_map(k))
        if m.get('TotalCount') is not None:
            self.total_count = m.get('TotalCount')
        return self


class ListTagKeysResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: ListTagKeysResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(ListTagKeysResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ListTagKeysResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ListTagResourcesRequestTag(TeaModel):
    def __init__(self, key=None, value=None):
        # The key of the tag to query.
        # 
        # >  The **ResourceIds.N** parameter and the key-value pair (Tag.N.Key and Tag.N.Value) cannot be left empty at the same time.
        self.key = key  # type: str
        # The value of the tag to query.
        # 
        # >  The **ResourceIds.N** parameter and the key-value pair (Tag.N.Key and Tag.N.Value) cannot be left empty at the same time.
        self.value = value  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ListTagResourcesRequestTag, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class ListTagResourcesRequest(TeaModel):
    def __init__(self, next_token=None, region_id=None, resource_group_id=None, resource_id=None,
                 resource_type=None, tag=None):
        # The query token. Set the value to the **NextToken** value that is returned in the last call to the ListTagResources operation. Leave this parameter empty the first time you call this operation.
        self.next_token = next_token  # type: str
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str
        # The IDs of Anti-DDoS Origin Instances to query.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances.
        self.resource_id = resource_id  # type: list[str]
        # The type of the resource to query. Set the value to **INSTANCE**, which indicates instances.
        self.resource_type = resource_type  # type: str
        # The tags to query.
        self.tag = tag  # type: list[ListTagResourcesRequestTag]

    def validate(self):
        if self.tag:
            for k in self.tag:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(ListTagResourcesRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.next_token is not None:
            result['NextToken'] = self.next_token
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.resource_id is not None:
            result['ResourceId'] = self.resource_id
        if self.resource_type is not None:
            result['ResourceType'] = self.resource_type
        result['Tag'] = []
        if self.tag is not None:
            for k in self.tag:
                result['Tag'].append(k.to_map() if k else None)
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('NextToken') is not None:
            self.next_token = m.get('NextToken')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('ResourceId') is not None:
            self.resource_id = m.get('ResourceId')
        if m.get('ResourceType') is not None:
            self.resource_type = m.get('ResourceType')
        self.tag = []
        if m.get('Tag') is not None:
            for k in m.get('Tag'):
                temp_model = ListTagResourcesRequestTag()
                self.tag.append(temp_model.from_map(k))
        return self


class ListTagResourcesResponseBodyTagResourcesTagResource(TeaModel):
    def __init__(self, resource_id=None, resource_type=None, tag_key=None, tag_value=None):
        # The ID of the Anti-DDoS Origin instance.
        self.resource_id = resource_id  # type: str
        # The type of the resource. The value is fixed as **INSTANCE**, which indicates instances.
        self.resource_type = resource_type  # type: str
        # The key of the tag that is added to the instance.
        self.tag_key = tag_key  # type: str
        # The value of the tag that is added to the instance.
        self.tag_value = tag_value  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ListTagResourcesResponseBodyTagResourcesTagResource, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.resource_id is not None:
            result['ResourceId'] = self.resource_id
        if self.resource_type is not None:
            result['ResourceType'] = self.resource_type
        if self.tag_key is not None:
            result['TagKey'] = self.tag_key
        if self.tag_value is not None:
            result['TagValue'] = self.tag_value
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('ResourceId') is not None:
            self.resource_id = m.get('ResourceId')
        if m.get('ResourceType') is not None:
            self.resource_type = m.get('ResourceType')
        if m.get('TagKey') is not None:
            self.tag_key = m.get('TagKey')
        if m.get('TagValue') is not None:
            self.tag_value = m.get('TagValue')
        return self


class ListTagResourcesResponseBodyTagResources(TeaModel):
    def __init__(self, tag_resource=None):
        self.tag_resource = tag_resource  # type: list[ListTagResourcesResponseBodyTagResourcesTagResource]

    def validate(self):
        if self.tag_resource:
            for k in self.tag_resource:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(ListTagResourcesResponseBodyTagResources, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        result['TagResource'] = []
        if self.tag_resource is not None:
            for k in self.tag_resource:
                result['TagResource'].append(k.to_map() if k else None)
        return result

    def from_map(self, m=None):
        m = m or dict()
        self.tag_resource = []
        if m.get('TagResource') is not None:
            for k in m.get('TagResource'):
                temp_model = ListTagResourcesResponseBodyTagResourcesTagResource()
                self.tag_resource.append(temp_model.from_map(k))
        return self


class ListTagResourcesResponseBody(TeaModel):
    def __init__(self, next_token=None, request_id=None, tag_resources=None):
        # The query token that is returned in this call.
        self.next_token = next_token  # type: str
        # The ID of the request.
        self.request_id = request_id  # type: str
        # The list of tags that are added to the Anti-DDoS Origin instance.
        self.tag_resources = tag_resources  # type: ListTagResourcesResponseBodyTagResources

    def validate(self):
        if self.tag_resources:
            self.tag_resources.validate()

    def to_map(self):
        _map = super(ListTagResourcesResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.next_token is not None:
            result['NextToken'] = self.next_token
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        if self.tag_resources is not None:
            result['TagResources'] = self.tag_resources.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('NextToken') is not None:
            self.next_token = m.get('NextToken')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        if m.get('TagResources') is not None:
            temp_model = ListTagResourcesResponseBodyTagResources()
            self.tag_resources = temp_model.from_map(m['TagResources'])
        return self


class ListTagResourcesResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: ListTagResourcesResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(ListTagResourcesResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ListTagResourcesResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ModifyRemarkRequest(TeaModel):
    def __init__(self, instance_id=None, region_id=None, remark=None, resource_group_id=None):
        # The ID of the Anti-DDoS Origin instance for which you want to add remarks.
        # 
        # >  You can call the [DescribeInstanceList](~~118698~~) operation to query the IDs of all Anti-DDoS Origin instances.
        self.instance_id = instance_id  # type: str
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The remarks for the Anti-DDoS Origin instance.
        self.remark = remark  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ModifyRemarkRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.remark is not None:
            result['Remark'] = self.remark
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('Remark') is not None:
            self.remark = m.get('Remark')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        return self


class ModifyRemarkResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ModifyRemarkResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class ModifyRemarkResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: ModifyRemarkResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(ModifyRemarkResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ModifyRemarkResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class QuerySchedruleOnDemandRequest(TeaModel):
    def __init__(self, instance_id=None, region_id=None):
        # The ID of the on-demand instance.
        # 
        # >  You can call the [DescribeOnDemandInstance](~~152120~~) operation to query the IDs of all on-demand instances.
        self.instance_id = instance_id  # type: str
        # The region ID of the on-demand instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(QuerySchedruleOnDemandRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        return self


class QuerySchedruleOnDemandResponseBodyRuleConfig(TeaModel):
    def __init__(self, rule_action=None, rule_condition_cnt=None, rule_condition_kpps=None,
                 rule_condition_mbps=None, rule_name=None, rule_switch=None, rule_undo_begin_time=None, rule_undo_end_time=None,
                 rule_undo_mode=None, time_zone=None):
        # The scheduling action. Set the value to **declare**, which indicates that the route is advertised.
        self.rule_action = rule_action  # type: str
        # If the inbound bandwidth or packets consecutively exceed the threshold for the specified number of times, the scheduling rule is triggered and traffic is rerouted to the on-demand instance. The specified number of times is the value of this parameter.
        # 
        # >  The threshold of inbound bandwidth is the value of **RuleConditionMbps**. The threshold of inbound packets is the value of **RuleConditionKpps**.
        self.rule_condition_cnt = rule_condition_cnt  # type: str
        # The threshold of inbound packets. Unit: Kpps. Minimum value: **10**.
        self.rule_condition_kpps = rule_condition_kpps  # type: str
        # The threshold of inbound bandwidth. Unit: Mbit/s. Minimum value: **100**.
        self.rule_condition_mbps = rule_condition_mbps  # type: str
        # The name of the scheduling rule.
        self.rule_name = rule_name  # type: str
        # Indicates whether the scheduling rule is enabled. Valid values:
        # 
        # *   **on**: enabled
        # *   **off**: disabled
        self.rule_switch = rule_switch  # type: str
        # The start time of the period during which the scheduling rule is automatically stopped. The time must be in the 24-hour clock and in the `hh:mm` format.
        # 
        # If the system detects that DDoS attacks stop, the system no longer reroutes traffic to the on-demand instance from the time you specified. We recommend that you set this parameter to a value that is defined as off-peak hours.
        # 
        # >  This parameter takes effect only when the **RuleUndoMode** parameter is set to **auto**.
        self.rule_undo_begin_time = rule_undo_begin_time  # type: str
        # The end time of the period during which the scheduling rule is automatically stopped. The time must be in the 24-hour clock and in the `hh:mm` format.
        self.rule_undo_end_time = rule_undo_end_time  # type: str
        # The stop method of the scheduling rule. Valid values:
        # 
        # *   **auto**: The scheduling rule automatically stops.
        # *   **manual**: The scheduling rule is manually stopped.
        self.rule_undo_mode = rule_undo_mode  # type: str
        # The time zone of the time when the scheduling rule automatically stops. The time zone must be in the `GMT-hh:mm` format.
        # 
        # For example, the value `GMT-08:00` indicates that the time zone is UTC+8.
        # 
        # >  This parameter takes effect only when the **RuleUndoMode** parameter is set to **auto**.
        self.time_zone = time_zone  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(QuerySchedruleOnDemandResponseBodyRuleConfig, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.rule_action is not None:
            result['RuleAction'] = self.rule_action
        if self.rule_condition_cnt is not None:
            result['RuleConditionCnt'] = self.rule_condition_cnt
        if self.rule_condition_kpps is not None:
            result['RuleConditionKpps'] = self.rule_condition_kpps
        if self.rule_condition_mbps is not None:
            result['RuleConditionMbps'] = self.rule_condition_mbps
        if self.rule_name is not None:
            result['RuleName'] = self.rule_name
        if self.rule_switch is not None:
            result['RuleSwitch'] = self.rule_switch
        if self.rule_undo_begin_time is not None:
            result['RuleUndoBeginTime'] = self.rule_undo_begin_time
        if self.rule_undo_end_time is not None:
            result['RuleUndoEndTime'] = self.rule_undo_end_time
        if self.rule_undo_mode is not None:
            result['RuleUndoMode'] = self.rule_undo_mode
        if self.time_zone is not None:
            result['TimeZone'] = self.time_zone
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RuleAction') is not None:
            self.rule_action = m.get('RuleAction')
        if m.get('RuleConditionCnt') is not None:
            self.rule_condition_cnt = m.get('RuleConditionCnt')
        if m.get('RuleConditionKpps') is not None:
            self.rule_condition_kpps = m.get('RuleConditionKpps')
        if m.get('RuleConditionMbps') is not None:
            self.rule_condition_mbps = m.get('RuleConditionMbps')
        if m.get('RuleName') is not None:
            self.rule_name = m.get('RuleName')
        if m.get('RuleSwitch') is not None:
            self.rule_switch = m.get('RuleSwitch')
        if m.get('RuleUndoBeginTime') is not None:
            self.rule_undo_begin_time = m.get('RuleUndoBeginTime')
        if m.get('RuleUndoEndTime') is not None:
            self.rule_undo_end_time = m.get('RuleUndoEndTime')
        if m.get('RuleUndoMode') is not None:
            self.rule_undo_mode = m.get('RuleUndoMode')
        if m.get('TimeZone') is not None:
            self.time_zone = m.get('TimeZone')
        return self


class QuerySchedruleOnDemandResponseBodyRuleStatus(TeaModel):
    def __init__(self, net=None, rule_sched_status=None):
        # The CIDR block of the on-demand instance.
        self.net = net  # type: str
        # The scheduling status. Valid values:
        # 
        # *   **scheduled**\
        # *   **unscheduled**\
        self.rule_sched_status = rule_sched_status  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(QuerySchedruleOnDemandResponseBodyRuleStatus, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.net is not None:
            result['Net'] = self.net
        if self.rule_sched_status is not None:
            result['RuleSchedStatus'] = self.rule_sched_status
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Net') is not None:
            self.net = m.get('Net')
        if m.get('RuleSchedStatus') is not None:
            self.rule_sched_status = m.get('RuleSchedStatus')
        return self


class QuerySchedruleOnDemandResponseBody(TeaModel):
    def __init__(self, instance_id=None, request_id=None, rule_config=None, rule_status=None, user_id=None):
        # The ID of the on-demand instance.
        self.instance_id = instance_id  # type: str
        # The ID of the request.
        self.request_id = request_id  # type: str
        # The configurations of the scheduling rule.
        self.rule_config = rule_config  # type: list[QuerySchedruleOnDemandResponseBodyRuleConfig]
        # The status of the scheduling rule.
        self.rule_status = rule_status  # type: list[QuerySchedruleOnDemandResponseBodyRuleStatus]
        # The ID of the Alibaba Cloud account.
        self.user_id = user_id  # type: str

    def validate(self):
        if self.rule_config:
            for k in self.rule_config:
                if k:
                    k.validate()
        if self.rule_status:
            for k in self.rule_status:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(QuerySchedruleOnDemandResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        result['RuleConfig'] = []
        if self.rule_config is not None:
            for k in self.rule_config:
                result['RuleConfig'].append(k.to_map() if k else None)
        result['RuleStatus'] = []
        if self.rule_status is not None:
            for k in self.rule_status:
                result['RuleStatus'].append(k.to_map() if k else None)
        if self.user_id is not None:
            result['UserId'] = self.user_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        self.rule_config = []
        if m.get('RuleConfig') is not None:
            for k in m.get('RuleConfig'):
                temp_model = QuerySchedruleOnDemandResponseBodyRuleConfig()
                self.rule_config.append(temp_model.from_map(k))
        self.rule_status = []
        if m.get('RuleStatus') is not None:
            for k in m.get('RuleStatus'):
                temp_model = QuerySchedruleOnDemandResponseBodyRuleStatus()
                self.rule_status.append(temp_model.from_map(k))
        if m.get('UserId') is not None:
            self.user_id = m.get('UserId')
        return self


class QuerySchedruleOnDemandResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: QuerySchedruleOnDemandResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(QuerySchedruleOnDemandResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = QuerySchedruleOnDemandResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class ReleaseDdosOriginInstanceRequest(TeaModel):
    def __init__(self, instance_id=None):
        self.instance_id = instance_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ReleaseDdosOriginInstanceRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id is not None:
            result['InstanceId'] = self.instance_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceId') is not None:
            self.instance_id = m.get('InstanceId')
        return self


class ReleaseDdosOriginInstanceResponseBody(TeaModel):
    def __init__(self, request_id=None):
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(ReleaseDdosOriginInstanceResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class ReleaseDdosOriginInstanceResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: ReleaseDdosOriginInstanceResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(ReleaseDdosOriginInstanceResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = ReleaseDdosOriginInstanceResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class SetInstanceModeOnDemandRequest(TeaModel):
    def __init__(self, instance_id_list=None, mode=None, region_id=None):
        # The IDs of on-demand instances.
        # 
        # >  You can call the [DescribeOnDemandInstance](~~152120~~) operation to query the IDs of all on-demand instances.
        self.instance_id_list = instance_id_list  # type: list[str]
        # The scheduling mode of the on-demand instance. Valid values:
        # 
        # *   **manual**: manual scheduling
        # *   **netflow-auto**: automatic scheduling
        self.mode = mode  # type: str
        # The region ID of the on-demand instance.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query all regions supported by Anti-DDoS Origin.
        self.region_id = region_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(SetInstanceModeOnDemandRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.instance_id_list is not None:
            result['InstanceIdList'] = self.instance_id_list
        if self.mode is not None:
            result['Mode'] = self.mode
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('InstanceIdList') is not None:
            self.instance_id_list = m.get('InstanceIdList')
        if m.get('Mode') is not None:
            self.mode = m.get('Mode')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        return self


class SetInstanceModeOnDemandResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(SetInstanceModeOnDemandResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class SetInstanceModeOnDemandResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: SetInstanceModeOnDemandResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(SetInstanceModeOnDemandResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = SetInstanceModeOnDemandResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class TagResourcesRequestTag(TeaModel):
    def __init__(self, key=None, value=None):
        # The key of the tag to add.
        # 
        # >  If the specified key does not exist, a key is created.
        self.key = key  # type: str
        # The value of the tag to add.
        # 
        # >  If the specified value does not exist, a value is created.
        self.value = value  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(TagResourcesRequestTag, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.key is not None:
            result['Key'] = self.key
        if self.value is not None:
            result['Value'] = self.value
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('Key') is not None:
            self.key = m.get('Key')
        if m.get('Value') is not None:
            self.value = m.get('Value')
        return self


class TagResourcesRequest(TeaModel):
    def __init__(self, region_id=None, resource_group_id=None, resource_id=None, resource_type=None, tag=None):
        # The ID of the region where the Anti-DDoS Origin instance resides.
        # 
        # >  You can call the [DescribeRegions](~~118703~~) operation to query the most recent region list.
        self.region_id = region_id  # type: str
        # The ID of the resource group to which the Anti-DDoS Origin instance belongs in Resource Management.
        # 
        # If you do not specify this parameter, the instance belongs to the default resource group.
        self.resource_group_id = resource_group_id  # type: str
        self.resource_id = resource_id  # type: list[str]
        # The type of the resource to which you want to add tags. Set the value to **INSTANCE**, which indicates instances.
        self.resource_type = resource_type  # type: str
        self.tag = tag  # type: list[TagResourcesRequestTag]

    def validate(self):
        if self.tag:
            for k in self.tag:
                if k:
                    k.validate()

    def to_map(self):
        _map = super(TagResourcesRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.resource_id is not None:
            result['ResourceId'] = self.resource_id
        if self.resource_type is not None:
            result['ResourceType'] = self.resource_type
        result['Tag'] = []
        if self.tag is not None:
            for k in self.tag:
                result['Tag'].append(k.to_map() if k else None)
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('ResourceId') is not None:
            self.resource_id = m.get('ResourceId')
        if m.get('ResourceType') is not None:
            self.resource_type = m.get('ResourceType')
        self.tag = []
        if m.get('Tag') is not None:
            for k in m.get('Tag'):
                temp_model = TagResourcesRequestTag()
                self.tag.append(temp_model.from_map(k))
        return self


class TagResourcesResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(TagResourcesResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class TagResourcesResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: TagResourcesResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(TagResourcesResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = TagResourcesResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


class UntagResourcesRequest(TeaModel):
    def __init__(self, all=None, region_id=None, resource_group_id=None, resource_id=None, resource_type=None,
                 tag_key=None):
        # Specifies whether to remove all tags from the specified Anti-DDoS Origin Enterprise instances.
        self.all = all  # type: bool
        # The ID of the region where the Anti-DDoS Origin Enterprise instances reside.
        self.region_id = region_id  # type: str
        # The ID of the resource group.
        self.resource_group_id = resource_group_id  # type: str
        self.resource_id = resource_id  # type: list[str]
        # The type of the specified resource. Set the value to **INSTANCE**.
        self.resource_type = resource_type  # type: str
        self.tag_key = tag_key  # type: list[str]

    def validate(self):
        pass

    def to_map(self):
        _map = super(UntagResourcesRequest, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.all is not None:
            result['All'] = self.all
        if self.region_id is not None:
            result['RegionId'] = self.region_id
        if self.resource_group_id is not None:
            result['ResourceGroupId'] = self.resource_group_id
        if self.resource_id is not None:
            result['ResourceId'] = self.resource_id
        if self.resource_type is not None:
            result['ResourceType'] = self.resource_type
        if self.tag_key is not None:
            result['TagKey'] = self.tag_key
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('All') is not None:
            self.all = m.get('All')
        if m.get('RegionId') is not None:
            self.region_id = m.get('RegionId')
        if m.get('ResourceGroupId') is not None:
            self.resource_group_id = m.get('ResourceGroupId')
        if m.get('ResourceId') is not None:
            self.resource_id = m.get('ResourceId')
        if m.get('ResourceType') is not None:
            self.resource_type = m.get('ResourceType')
        if m.get('TagKey') is not None:
            self.tag_key = m.get('TagKey')
        return self


class UntagResourcesResponseBody(TeaModel):
    def __init__(self, request_id=None):
        # The ID of the request.
        self.request_id = request_id  # type: str

    def validate(self):
        pass

    def to_map(self):
        _map = super(UntagResourcesResponseBody, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.request_id is not None:
            result['RequestId'] = self.request_id
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('RequestId') is not None:
            self.request_id = m.get('RequestId')
        return self


class UntagResourcesResponse(TeaModel):
    def __init__(self, headers=None, status_code=None, body=None):
        self.headers = headers  # type: dict[str, str]
        self.status_code = status_code  # type: int
        self.body = body  # type: UntagResourcesResponseBody

    def validate(self):
        if self.body:
            self.body.validate()

    def to_map(self):
        _map = super(UntagResourcesResponse, self).to_map()
        if _map is not None:
            return _map

        result = dict()
        if self.headers is not None:
            result['headers'] = self.headers
        if self.status_code is not None:
            result['statusCode'] = self.status_code
        if self.body is not None:
            result['body'] = self.body.to_map()
        return result

    def from_map(self, m=None):
        m = m or dict()
        if m.get('headers') is not None:
            self.headers = m.get('headers')
        if m.get('statusCode') is not None:
            self.status_code = m.get('statusCode')
        if m.get('body') is not None:
            temp_model = UntagResourcesResponseBody()
            self.body = temp_model.from_map(m['body'])
        return self


