// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace Pulumiverse.Fortios
{
    /// <summary>
    /// Configure consolidated IPv4/IPv6 policies. Applies to FortiOS Version `&lt;= 6.4.0`.
    /// 
    /// ## Import
    /// 
    /// FirewallConsolidated Policy can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallconsolidatedPolicy:FirewallconsolidatedPolicy labelname {{policyid}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/firewallconsolidatedPolicy:FirewallconsolidatedPolicy labelname {{policyid}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/firewallconsolidatedPolicy:FirewallconsolidatedPolicy")]
    public partial class FirewallconsolidatedPolicy : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Policy action (allow/deny/ipsec). Valid values: `accept`, `deny`, `ipsec`.
        /// </summary>
        [Output("action")]
        public Output<string> Action { get; private set; } = null!;

        /// <summary>
        /// Application category ID list. The structure of `app_category` block is documented below.
        /// </summary>
        [Output("appCategories")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyAppCategory>> AppCategories { get; private set; } = null!;

        /// <summary>
        /// Application group names. The structure of `app_group` block is documented below.
        /// </summary>
        [Output("appGroups")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyAppGroup>> AppGroups { get; private set; } = null!;

        /// <summary>
        /// Name of an existing Application list.
        /// </summary>
        [Output("applicationList")]
        public Output<string> ApplicationList { get; private set; } = null!;

        /// <summary>
        /// Application ID list. The structure of `application` block is documented below.
        /// </summary>
        [Output("applications")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyApplication>> Applications { get; private set; } = null!;

        /// <summary>
        /// Enable/disable policy traffic ASIC offloading. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("autoAsicOffload")]
        public Output<string> AutoAsicOffload { get; private set; } = null!;

        /// <summary>
        /// Name of an existing Antivirus profile.
        /// </summary>
        [Output("avProfile")]
        public Output<string> AvProfile { get; private set; } = null!;

        /// <summary>
        /// Enable exemption of some users from the captive portal. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("captivePortalExempt")]
        public Output<string> CaptivePortalExempt { get; private set; } = null!;

        /// <summary>
        /// Name of an existing CIFS profile.
        /// </summary>
        [Output("cifsProfile")]
        public Output<string> CifsProfile { get; private set; } = null!;

        /// <summary>
        /// Comment.
        /// </summary>
        [Output("comments")]
        public Output<string?> Comments { get; private set; } = null!;

        /// <summary>
        /// Enable to change packet's DiffServ values to the specified diffservcode-forward value. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("diffservForward")]
        public Output<string> DiffservForward { get; private set; } = null!;

        /// <summary>
        /// Enable to change packet's reverse (reply) DiffServ values to the specified diffservcode-rev value.  Valid values: `enable`, `disable`.
        /// </summary>
        [Output("diffservReverse")]
        public Output<string> DiffservReverse { get; private set; } = null!;

        /// <summary>
        /// Change packet's DiffServ to this value.
        /// </summary>
        [Output("diffservcodeForward")]
        public Output<string> DiffservcodeForward { get; private set; } = null!;

        /// <summary>
        /// Change packet's reverse (reply) DiffServ to this value.
        /// </summary>
        [Output("diffservcodeRev")]
        public Output<string> DiffservcodeRev { get; private set; } = null!;

        /// <summary>
        /// Name of an existing DLP sensor.
        /// </summary>
        [Output("dlpSensor")]
        public Output<string> DlpSensor { get; private set; } = null!;

        /// <summary>
        /// Name of an existing DNS filter profile.
        /// </summary>
        [Output("dnsfilterProfile")]
        public Output<string> DnsfilterProfile { get; private set; } = null!;

        /// <summary>
        /// Destination IPv4 address name and address group names. The structure of `dstaddr4` block is documented below.
        /// </summary>
        [Output("dstaddr4s")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyDstaddr4>> Dstaddr4s { get; private set; } = null!;

        /// <summary>
        /// Destination IPv6 address name and address group names. The structure of `dstaddr6` block is documented below.
        /// </summary>
        [Output("dstaddr6s")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyDstaddr6>> Dstaddr6s { get; private set; } = null!;

        /// <summary>
        /// When enabled dstaddr specifies what the destination address must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("dstaddrNegate")]
        public Output<string> DstaddrNegate { get; private set; } = null!;

        /// <summary>
        /// Outgoing (egress) interface. The structure of `dstintf` block is documented below.
        /// </summary>
        [Output("dstintfs")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyDstintf>> Dstintfs { get; private set; } = null!;

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Output("dynamicSortSubtable")]
        public Output<string?> DynamicSortSubtable { get; private set; } = null!;

        /// <summary>
        /// Name of an existing email filter profile.
        /// </summary>
        [Output("emailfilterProfile")]
        public Output<string> EmailfilterProfile { get; private set; } = null!;

        /// <summary>
        /// Enable to prevent source NAT from changing a session's source port. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("fixedport")]
        public Output<string> Fixedport { get; private set; } = null!;

        /// <summary>
        /// Names of FSSO groups. The structure of `fsso_groups` block is documented below.
        /// </summary>
        [Output("fssoGroups")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyFssoGroup>> FssoGroups { get; private set; } = null!;

        /// <summary>
        /// Names of user groups that can authenticate with this policy. The structure of `groups` block is documented below.
        /// </summary>
        [Output("groups")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyGroup>> Groups { get; private set; } = null!;

        /// <summary>
        /// Redirect HTTP(S) traffic to matching transparent web proxy policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("httpPolicyRedirect")]
        public Output<string> HttpPolicyRedirect { get; private set; } = null!;

        /// <summary>
        /// Name of an existing ICAP profile.
        /// </summary>
        [Output("icapProfile")]
        public Output<string> IcapProfile { get; private set; } = null!;

        /// <summary>
        /// Policy-based IPsec VPN: only traffic from the remote network can initiate a VPN. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("inbound")]
        public Output<string> Inbound { get; private set; } = null!;

        /// <summary>
        /// Policy inspection mode (Flow/proxy). Default is Flow mode. Valid values: `proxy`, `flow`.
        /// </summary>
        [Output("inspectionMode")]
        public Output<string> InspectionMode { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of Internet Services for this policy. If enabled, destination address and service are not used.  Valid values: `enable`, `disable`.
        /// </summary>
        [Output("internetService")]
        public Output<string> InternetService { get; private set; } = null!;

        /// <summary>
        /// Custom Internet Service group name. The structure of `internet_service_custom_group` block is documented below.
        /// </summary>
        [Output("internetServiceCustomGroups")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceCustomGroup>> InternetServiceCustomGroups { get; private set; } = null!;

        /// <summary>
        /// Custom Internet Service name. The structure of `internet_service_custom` block is documented below.
        /// </summary>
        [Output("internetServiceCustoms")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceCustom>> InternetServiceCustoms { get; private set; } = null!;

        /// <summary>
        /// Internet Service group name. The structure of `internet_service_group` block is documented below.
        /// </summary>
        [Output("internetServiceGroups")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceGroup>> InternetServiceGroups { get; private set; } = null!;

        /// <summary>
        /// Internet Service ID. The structure of `internet_service_id` block is documented below.
        /// </summary>
        [Output("internetServiceIds")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceId>> InternetServiceIds { get; private set; } = null!;

        /// <summary>
        /// Internet Service name. The structure of `internet_service_name` block is documented below.
        /// </summary>
        [Output("internetServiceNames")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceName>> InternetServiceNames { get; private set; } = null!;

        /// <summary>
        /// When enabled internet-service specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("internetServiceNegate")]
        public Output<string> InternetServiceNegate { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of Internet Services in source for this policy. If enabled, source address is not used.  Valid values: `enable`, `disable`.
        /// </summary>
        [Output("internetServiceSrc")]
        public Output<string> InternetServiceSrc { get; private set; } = null!;

        /// <summary>
        /// Custom Internet Service source group name. The structure of `internet_service_src_custom_group` block is documented below.
        /// </summary>
        [Output("internetServiceSrcCustomGroups")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGroup>> InternetServiceSrcCustomGroups { get; private set; } = null!;

        /// <summary>
        /// Custom Internet Service source name. The structure of `internet_service_src_custom` block is documented below.
        /// </summary>
        [Output("internetServiceSrcCustoms")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceSrcCustom>> InternetServiceSrcCustoms { get; private set; } = null!;

        /// <summary>
        /// Internet Service source group name. The structure of `internet_service_src_group` block is documented below.
        /// </summary>
        [Output("internetServiceSrcGroups")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceSrcGroup>> InternetServiceSrcGroups { get; private set; } = null!;

        /// <summary>
        /// Internet Service source ID. The structure of `internet_service_src_id` block is documented below.
        /// </summary>
        [Output("internetServiceSrcIds")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceSrcId>> InternetServiceSrcIds { get; private set; } = null!;

        /// <summary>
        /// Internet Service source name. The structure of `internet_service_src_name` block is documented below.
        /// </summary>
        [Output("internetServiceSrcNames")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyInternetServiceSrcName>> InternetServiceSrcNames { get; private set; } = null!;

        /// <summary>
        /// When enabled internet-service-src specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("internetServiceSrcNegate")]
        public Output<string> InternetServiceSrcNegate { get; private set; } = null!;

        /// <summary>
        /// Enable to use IP Pools for source NAT. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ippool")]
        public Output<string> Ippool { get; private set; } = null!;

        /// <summary>
        /// Name of an existing IPS sensor.
        /// </summary>
        [Output("ipsSensor")]
        public Output<string> IpsSensor { get; private set; } = null!;

        /// <summary>
        /// Enable or disable logging. Log all sessions or security profile sessions. Valid values: `all`, `utm`, `disable`.
        /// </summary>
        [Output("logtraffic")]
        public Output<string> Logtraffic { get; private set; } = null!;

        /// <summary>
        /// Record logs when a session starts. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("logtrafficStart")]
        public Output<string> LogtrafficStart { get; private set; } = null!;

        /// <summary>
        /// Policy name.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// Enable/disable source NAT. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("nat")]
        public Output<string> Nat { get; private set; } = null!;

        /// <summary>
        /// Policy-based IPsec VPN: only traffic from the internal network can initiate a VPN. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("outbound")]
        public Output<string> Outbound { get; private set; } = null!;

        /// <summary>
        /// Per-IP traffic shaper.
        /// </summary>
        [Output("perIpShaper")]
        public Output<string> PerIpShaper { get; private set; } = null!;

        /// <summary>
        /// Policy ID.
        /// </summary>
        [Output("policyid")]
        public Output<int> Policyid { get; private set; } = null!;

        /// <summary>
        /// IPv4 pool names. The structure of `poolname4` block is documented below.
        /// </summary>
        [Output("poolname4s")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyPoolname4>> Poolname4s { get; private set; } = null!;

        /// <summary>
        /// IPv6 pool names. The structure of `poolname6` block is documented below.
        /// </summary>
        [Output("poolname6s")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyPoolname6>> Poolname6s { get; private set; } = null!;

        /// <summary>
        /// Name of profile group.
        /// </summary>
        [Output("profileGroup")]
        public Output<string> ProfileGroup { get; private set; } = null!;

        /// <summary>
        /// Name of an existing Protocol options profile.
        /// </summary>
        [Output("profileProtocolOptions")]
        public Output<string> ProfileProtocolOptions { get; private set; } = null!;

        /// <summary>
        /// Determine whether the firewall policy allows security profile groups or single profiles only. Valid values: `single`, `group`.
        /// </summary>
        [Output("profileType")]
        public Output<string> ProfileType { get; private set; } = null!;

        /// <summary>
        /// Schedule name.
        /// </summary>
        [Output("schedule")]
        public Output<string> Schedule { get; private set; } = null!;

        /// <summary>
        /// When enabled service specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("serviceNegate")]
        public Output<string> ServiceNegate { get; private set; } = null!;

        /// <summary>
        /// Service and service group names. The structure of `service` block is documented below.
        /// </summary>
        [Output("services")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyService>> Services { get; private set; } = null!;

        /// <summary>
        /// TTL in seconds for sessions accepted by this policy (0 means use the system default session TTL).
        /// </summary>
        [Output("sessionTtl")]
        public Output<int> SessionTtl { get; private set; } = null!;

        /// <summary>
        /// Name of an existing Spam filter profile.
        /// </summary>
        [Output("spamfilterProfile")]
        public Output<string> SpamfilterProfile { get; private set; } = null!;

        /// <summary>
        /// Source IPv4 address name and address group names. The structure of `srcaddr4` block is documented below.
        /// </summary>
        [Output("srcaddr4s")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicySrcaddr4>> Srcaddr4s { get; private set; } = null!;

        /// <summary>
        /// Source IPv6 address name and address group names. The structure of `srcaddr6` block is documented below.
        /// </summary>
        [Output("srcaddr6s")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicySrcaddr6>> Srcaddr6s { get; private set; } = null!;

        /// <summary>
        /// When enabled srcaddr specifies what the source address must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("srcaddrNegate")]
        public Output<string> SrcaddrNegate { get; private set; } = null!;

        /// <summary>
        /// Incoming (ingress) interface. The structure of `srcintf` block is documented below.
        /// </summary>
        [Output("srcintfs")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicySrcintf>> Srcintfs { get; private set; } = null!;

        /// <summary>
        /// Name of an existing SSH filter profile.
        /// </summary>
        [Output("sshFilterProfile")]
        public Output<string> SshFilterProfile { get; private set; } = null!;

        /// <summary>
        /// Redirect SSH traffic to matching transparent proxy policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("sshPolicyRedirect")]
        public Output<string> SshPolicyRedirect { get; private set; } = null!;

        /// <summary>
        /// Name of an existing SSL SSH profile.
        /// </summary>
        [Output("sslSshProfile")]
        public Output<string> SslSshProfile { get; private set; } = null!;

        /// <summary>
        /// Enable or disable this policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// Receiver TCP maximum segment size (MSS).
        /// </summary>
        [Output("tcpMssReceiver")]
        public Output<int> TcpMssReceiver { get; private set; } = null!;

        /// <summary>
        /// Sender TCP maximum segment size (MSS).
        /// </summary>
        [Output("tcpMssSender")]
        public Output<int> TcpMssSender { get; private set; } = null!;

        /// <summary>
        /// Traffic shaper.
        /// </summary>
        [Output("trafficShaper")]
        public Output<string> TrafficShaper { get; private set; } = null!;

        /// <summary>
        /// Reverse traffic shaper.
        /// </summary>
        [Output("trafficShaperReverse")]
        public Output<string> TrafficShaperReverse { get; private set; } = null!;

        /// <summary>
        /// URL category ID list. The structure of `url_category` block is documented below.
        /// </summary>
        [Output("urlCategories")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyUrlCategory>> UrlCategories { get; private set; } = null!;

        /// <summary>
        /// Names of individual users that can authenticate with this policy. The structure of `users` block is documented below.
        /// </summary>
        [Output("users")]
        public Output<ImmutableArray<Outputs.FirewallconsolidatedPolicyUser>> Users { get; private set; } = null!;

        /// <summary>
        /// Enable to add one or more security profiles (AV, IPS, etc.) to the firewall policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("utmStatus")]
        public Output<string> UtmStatus { get; private set; } = null!;

        /// <summary>
        /// Universally Unique Identifier (UUID; automatically assigned but can be manually reset).
        /// </summary>
        [Output("uuid")]
        public Output<string> Uuid { get; private set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;

        /// <summary>
        /// Name of an existing VoIP profile.
        /// </summary>
        [Output("voipProfile")]
        public Output<string> VoipProfile { get; private set; } = null!;

        /// <summary>
        /// Policy-based IPsec VPN: name of the IPsec VPN Phase 1.
        /// </summary>
        [Output("vpntunnel")]
        public Output<string> Vpntunnel { get; private set; } = null!;

        /// <summary>
        /// Name of an existing Web application firewall profile.
        /// </summary>
        [Output("wafProfile")]
        public Output<string> WafProfile { get; private set; } = null!;

        /// <summary>
        /// Enable/disable WAN optimization. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("wanopt")]
        public Output<string> Wanopt { get; private set; } = null!;

        /// <summary>
        /// WAN optimization auto-detection mode. Valid values: `active`, `passive`, `off`.
        /// </summary>
        [Output("wanoptDetection")]
        public Output<string> WanoptDetection { get; private set; } = null!;

        /// <summary>
        /// WAN optimization passive mode options. This option decides what IP address will be used to connect to server. Valid values: `default`, `transparent`, `non-transparent`.
        /// </summary>
        [Output("wanoptPassiveOpt")]
        public Output<string> WanoptPassiveOpt { get; private set; } = null!;

        /// <summary>
        /// WAN optimization peer.
        /// </summary>
        [Output("wanoptPeer")]
        public Output<string> WanoptPeer { get; private set; } = null!;

        /// <summary>
        /// WAN optimization profile.
        /// </summary>
        [Output("wanoptProfile")]
        public Output<string> WanoptProfile { get; private set; } = null!;

        /// <summary>
        /// Enable/disable web cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("webcache")]
        public Output<string> Webcache { get; private set; } = null!;

        /// <summary>
        /// Enable/disable web cache for HTTPS. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("webcacheHttps")]
        public Output<string> WebcacheHttps { get; private set; } = null!;

        /// <summary>
        /// Name of an existing Web filter profile.
        /// </summary>
        [Output("webfilterProfile")]
        public Output<string> WebfilterProfile { get; private set; } = null!;

        /// <summary>
        /// Webproxy forward server name.
        /// </summary>
        [Output("webproxyForwardServer")]
        public Output<string> WebproxyForwardServer { get; private set; } = null!;

        /// <summary>
        /// Webproxy profile name.
        /// </summary>
        [Output("webproxyProfile")]
        public Output<string> WebproxyProfile { get; private set; } = null!;


        /// <summary>
        /// Create a FirewallconsolidatedPolicy resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public FirewallconsolidatedPolicy(string name, FirewallconsolidatedPolicyArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/firewallconsolidatedPolicy:FirewallconsolidatedPolicy", name, args ?? new FirewallconsolidatedPolicyArgs(), MakeResourceOptions(options, ""))
        {
        }

        private FirewallconsolidatedPolicy(string name, Input<string> id, FirewallconsolidatedPolicyState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/firewallconsolidatedPolicy:FirewallconsolidatedPolicy", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/pulumiverse/pulumi-fortios",
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing FirewallconsolidatedPolicy resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static FirewallconsolidatedPolicy Get(string name, Input<string> id, FirewallconsolidatedPolicyState? state = null, CustomResourceOptions? options = null)
        {
            return new FirewallconsolidatedPolicy(name, id, state, options);
        }
    }

    public sealed class FirewallconsolidatedPolicyArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Policy action (allow/deny/ipsec). Valid values: `accept`, `deny`, `ipsec`.
        /// </summary>
        [Input("action")]
        public Input<string>? Action { get; set; }

        [Input("appCategories")]
        private InputList<Inputs.FirewallconsolidatedPolicyAppCategoryArgs>? _appCategories;

        /// <summary>
        /// Application category ID list. The structure of `app_category` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyAppCategoryArgs> AppCategories
        {
            get => _appCategories ?? (_appCategories = new InputList<Inputs.FirewallconsolidatedPolicyAppCategoryArgs>());
            set => _appCategories = value;
        }

        [Input("appGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyAppGroupArgs>? _appGroups;

        /// <summary>
        /// Application group names. The structure of `app_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyAppGroupArgs> AppGroups
        {
            get => _appGroups ?? (_appGroups = new InputList<Inputs.FirewallconsolidatedPolicyAppGroupArgs>());
            set => _appGroups = value;
        }

        /// <summary>
        /// Name of an existing Application list.
        /// </summary>
        [Input("applicationList")]
        public Input<string>? ApplicationList { get; set; }

        [Input("applications")]
        private InputList<Inputs.FirewallconsolidatedPolicyApplicationArgs>? _applications;

        /// <summary>
        /// Application ID list. The structure of `application` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyApplicationArgs> Applications
        {
            get => _applications ?? (_applications = new InputList<Inputs.FirewallconsolidatedPolicyApplicationArgs>());
            set => _applications = value;
        }

        /// <summary>
        /// Enable/disable policy traffic ASIC offloading. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoAsicOffload")]
        public Input<string>? AutoAsicOffload { get; set; }

        /// <summary>
        /// Name of an existing Antivirus profile.
        /// </summary>
        [Input("avProfile")]
        public Input<string>? AvProfile { get; set; }

        /// <summary>
        /// Enable exemption of some users from the captive portal. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("captivePortalExempt")]
        public Input<string>? CaptivePortalExempt { get; set; }

        /// <summary>
        /// Name of an existing CIFS profile.
        /// </summary>
        [Input("cifsProfile")]
        public Input<string>? CifsProfile { get; set; }

        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comments")]
        public Input<string>? Comments { get; set; }

        /// <summary>
        /// Enable to change packet's DiffServ values to the specified diffservcode-forward value. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("diffservForward")]
        public Input<string>? DiffservForward { get; set; }

        /// <summary>
        /// Enable to change packet's reverse (reply) DiffServ values to the specified diffservcode-rev value.  Valid values: `enable`, `disable`.
        /// </summary>
        [Input("diffservReverse")]
        public Input<string>? DiffservReverse { get; set; }

        /// <summary>
        /// Change packet's DiffServ to this value.
        /// </summary>
        [Input("diffservcodeForward")]
        public Input<string>? DiffservcodeForward { get; set; }

        /// <summary>
        /// Change packet's reverse (reply) DiffServ to this value.
        /// </summary>
        [Input("diffservcodeRev")]
        public Input<string>? DiffservcodeRev { get; set; }

        /// <summary>
        /// Name of an existing DLP sensor.
        /// </summary>
        [Input("dlpSensor")]
        public Input<string>? DlpSensor { get; set; }

        /// <summary>
        /// Name of an existing DNS filter profile.
        /// </summary>
        [Input("dnsfilterProfile")]
        public Input<string>? DnsfilterProfile { get; set; }

        [Input("dstaddr4s")]
        private InputList<Inputs.FirewallconsolidatedPolicyDstaddr4Args>? _dstaddr4s;

        /// <summary>
        /// Destination IPv4 address name and address group names. The structure of `dstaddr4` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyDstaddr4Args> Dstaddr4s
        {
            get => _dstaddr4s ?? (_dstaddr4s = new InputList<Inputs.FirewallconsolidatedPolicyDstaddr4Args>());
            set => _dstaddr4s = value;
        }

        [Input("dstaddr6s")]
        private InputList<Inputs.FirewallconsolidatedPolicyDstaddr6Args>? _dstaddr6s;

        /// <summary>
        /// Destination IPv6 address name and address group names. The structure of `dstaddr6` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyDstaddr6Args> Dstaddr6s
        {
            get => _dstaddr6s ?? (_dstaddr6s = new InputList<Inputs.FirewallconsolidatedPolicyDstaddr6Args>());
            set => _dstaddr6s = value;
        }

        /// <summary>
        /// When enabled dstaddr specifies what the destination address must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dstaddrNegate")]
        public Input<string>? DstaddrNegate { get; set; }

        [Input("dstintfs")]
        private InputList<Inputs.FirewallconsolidatedPolicyDstintfArgs>? _dstintfs;

        /// <summary>
        /// Outgoing (egress) interface. The structure of `dstintf` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyDstintfArgs> Dstintfs
        {
            get => _dstintfs ?? (_dstintfs = new InputList<Inputs.FirewallconsolidatedPolicyDstintfArgs>());
            set => _dstintfs = value;
        }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Name of an existing email filter profile.
        /// </summary>
        [Input("emailfilterProfile")]
        public Input<string>? EmailfilterProfile { get; set; }

        /// <summary>
        /// Enable to prevent source NAT from changing a session's source port. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fixedport")]
        public Input<string>? Fixedport { get; set; }

        [Input("fssoGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyFssoGroupArgs>? _fssoGroups;

        /// <summary>
        /// Names of FSSO groups. The structure of `fsso_groups` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyFssoGroupArgs> FssoGroups
        {
            get => _fssoGroups ?? (_fssoGroups = new InputList<Inputs.FirewallconsolidatedPolicyFssoGroupArgs>());
            set => _fssoGroups = value;
        }

        [Input("groups")]
        private InputList<Inputs.FirewallconsolidatedPolicyGroupArgs>? _groups;

        /// <summary>
        /// Names of user groups that can authenticate with this policy. The structure of `groups` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyGroupArgs> Groups
        {
            get => _groups ?? (_groups = new InputList<Inputs.FirewallconsolidatedPolicyGroupArgs>());
            set => _groups = value;
        }

        /// <summary>
        /// Redirect HTTP(S) traffic to matching transparent web proxy policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpPolicyRedirect")]
        public Input<string>? HttpPolicyRedirect { get; set; }

        /// <summary>
        /// Name of an existing ICAP profile.
        /// </summary>
        [Input("icapProfile")]
        public Input<string>? IcapProfile { get; set; }

        /// <summary>
        /// Policy-based IPsec VPN: only traffic from the remote network can initiate a VPN. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("inbound")]
        public Input<string>? Inbound { get; set; }

        /// <summary>
        /// Policy inspection mode (Flow/proxy). Default is Flow mode. Valid values: `proxy`, `flow`.
        /// </summary>
        [Input("inspectionMode")]
        public Input<string>? InspectionMode { get; set; }

        /// <summary>
        /// Enable/disable use of Internet Services for this policy. If enabled, destination address and service are not used.  Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetService")]
        public Input<string>? InternetService { get; set; }

        [Input("internetServiceCustomGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGroupArgs>? _internetServiceCustomGroups;

        /// <summary>
        /// Custom Internet Service group name. The structure of `internet_service_custom_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGroupArgs> InternetServiceCustomGroups
        {
            get => _internetServiceCustomGroups ?? (_internetServiceCustomGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGroupArgs>());
            set => _internetServiceCustomGroups = value;
        }

        [Input("internetServiceCustoms")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomArgs>? _internetServiceCustoms;

        /// <summary>
        /// Custom Internet Service name. The structure of `internet_service_custom` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomArgs> InternetServiceCustoms
        {
            get => _internetServiceCustoms ?? (_internetServiceCustoms = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomArgs>());
            set => _internetServiceCustoms = value;
        }

        [Input("internetServiceGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceGroupArgs>? _internetServiceGroups;

        /// <summary>
        /// Internet Service group name. The structure of `internet_service_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceGroupArgs> InternetServiceGroups
        {
            get => _internetServiceGroups ?? (_internetServiceGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceGroupArgs>());
            set => _internetServiceGroups = value;
        }

        [Input("internetServiceIds")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceIdArgs>? _internetServiceIds;

        /// <summary>
        /// Internet Service ID. The structure of `internet_service_id` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceIdArgs> InternetServiceIds
        {
            get => _internetServiceIds ?? (_internetServiceIds = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceIdArgs>());
            set => _internetServiceIds = value;
        }

        [Input("internetServiceNames")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceNameArgs>? _internetServiceNames;

        /// <summary>
        /// Internet Service name. The structure of `internet_service_name` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceNameArgs> InternetServiceNames
        {
            get => _internetServiceNames ?? (_internetServiceNames = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceNameArgs>());
            set => _internetServiceNames = value;
        }

        /// <summary>
        /// When enabled internet-service specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetServiceNegate")]
        public Input<string>? InternetServiceNegate { get; set; }

        /// <summary>
        /// Enable/disable use of Internet Services in source for this policy. If enabled, source address is not used.  Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetServiceSrc")]
        public Input<string>? InternetServiceSrc { get; set; }

        [Input("internetServiceSrcCustomGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGroupArgs>? _internetServiceSrcCustomGroups;

        /// <summary>
        /// Custom Internet Service source group name. The structure of `internet_service_src_custom_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGroupArgs> InternetServiceSrcCustomGroups
        {
            get => _internetServiceSrcCustomGroups ?? (_internetServiceSrcCustomGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGroupArgs>());
            set => _internetServiceSrcCustomGroups = value;
        }

        [Input("internetServiceSrcCustoms")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomArgs>? _internetServiceSrcCustoms;

        /// <summary>
        /// Custom Internet Service source name. The structure of `internet_service_src_custom` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomArgs> InternetServiceSrcCustoms
        {
            get => _internetServiceSrcCustoms ?? (_internetServiceSrcCustoms = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomArgs>());
            set => _internetServiceSrcCustoms = value;
        }

        [Input("internetServiceSrcGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcGroupArgs>? _internetServiceSrcGroups;

        /// <summary>
        /// Internet Service source group name. The structure of `internet_service_src_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcGroupArgs> InternetServiceSrcGroups
        {
            get => _internetServiceSrcGroups ?? (_internetServiceSrcGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcGroupArgs>());
            set => _internetServiceSrcGroups = value;
        }

        [Input("internetServiceSrcIds")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcIdArgs>? _internetServiceSrcIds;

        /// <summary>
        /// Internet Service source ID. The structure of `internet_service_src_id` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcIdArgs> InternetServiceSrcIds
        {
            get => _internetServiceSrcIds ?? (_internetServiceSrcIds = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcIdArgs>());
            set => _internetServiceSrcIds = value;
        }

        [Input("internetServiceSrcNames")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcNameArgs>? _internetServiceSrcNames;

        /// <summary>
        /// Internet Service source name. The structure of `internet_service_src_name` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcNameArgs> InternetServiceSrcNames
        {
            get => _internetServiceSrcNames ?? (_internetServiceSrcNames = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcNameArgs>());
            set => _internetServiceSrcNames = value;
        }

        /// <summary>
        /// When enabled internet-service-src specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetServiceSrcNegate")]
        public Input<string>? InternetServiceSrcNegate { get; set; }

        /// <summary>
        /// Enable to use IP Pools for source NAT. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ippool")]
        public Input<string>? Ippool { get; set; }

        /// <summary>
        /// Name of an existing IPS sensor.
        /// </summary>
        [Input("ipsSensor")]
        public Input<string>? IpsSensor { get; set; }

        /// <summary>
        /// Enable or disable logging. Log all sessions or security profile sessions. Valid values: `all`, `utm`, `disable`.
        /// </summary>
        [Input("logtraffic")]
        public Input<string>? Logtraffic { get; set; }

        /// <summary>
        /// Record logs when a session starts. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("logtrafficStart")]
        public Input<string>? LogtrafficStart { get; set; }

        /// <summary>
        /// Policy name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable source NAT. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nat")]
        public Input<string>? Nat { get; set; }

        /// <summary>
        /// Policy-based IPsec VPN: only traffic from the internal network can initiate a VPN. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("outbound")]
        public Input<string>? Outbound { get; set; }

        /// <summary>
        /// Per-IP traffic shaper.
        /// </summary>
        [Input("perIpShaper")]
        public Input<string>? PerIpShaper { get; set; }

        /// <summary>
        /// Policy ID.
        /// </summary>
        [Input("policyid")]
        public Input<int>? Policyid { get; set; }

        [Input("poolname4s")]
        private InputList<Inputs.FirewallconsolidatedPolicyPoolname4Args>? _poolname4s;

        /// <summary>
        /// IPv4 pool names. The structure of `poolname4` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyPoolname4Args> Poolname4s
        {
            get => _poolname4s ?? (_poolname4s = new InputList<Inputs.FirewallconsolidatedPolicyPoolname4Args>());
            set => _poolname4s = value;
        }

        [Input("poolname6s")]
        private InputList<Inputs.FirewallconsolidatedPolicyPoolname6Args>? _poolname6s;

        /// <summary>
        /// IPv6 pool names. The structure of `poolname6` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyPoolname6Args> Poolname6s
        {
            get => _poolname6s ?? (_poolname6s = new InputList<Inputs.FirewallconsolidatedPolicyPoolname6Args>());
            set => _poolname6s = value;
        }

        /// <summary>
        /// Name of profile group.
        /// </summary>
        [Input("profileGroup")]
        public Input<string>? ProfileGroup { get; set; }

        /// <summary>
        /// Name of an existing Protocol options profile.
        /// </summary>
        [Input("profileProtocolOptions")]
        public Input<string>? ProfileProtocolOptions { get; set; }

        /// <summary>
        /// Determine whether the firewall policy allows security profile groups or single profiles only. Valid values: `single`, `group`.
        /// </summary>
        [Input("profileType")]
        public Input<string>? ProfileType { get; set; }

        /// <summary>
        /// Schedule name.
        /// </summary>
        [Input("schedule")]
        public Input<string>? Schedule { get; set; }

        /// <summary>
        /// When enabled service specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("serviceNegate")]
        public Input<string>? ServiceNegate { get; set; }

        [Input("services")]
        private InputList<Inputs.FirewallconsolidatedPolicyServiceArgs>? _services;

        /// <summary>
        /// Service and service group names. The structure of `service` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyServiceArgs> Services
        {
            get => _services ?? (_services = new InputList<Inputs.FirewallconsolidatedPolicyServiceArgs>());
            set => _services = value;
        }

        /// <summary>
        /// TTL in seconds for sessions accepted by this policy (0 means use the system default session TTL).
        /// </summary>
        [Input("sessionTtl")]
        public Input<int>? SessionTtl { get; set; }

        /// <summary>
        /// Name of an existing Spam filter profile.
        /// </summary>
        [Input("spamfilterProfile")]
        public Input<string>? SpamfilterProfile { get; set; }

        [Input("srcaddr4s")]
        private InputList<Inputs.FirewallconsolidatedPolicySrcaddr4Args>? _srcaddr4s;

        /// <summary>
        /// Source IPv4 address name and address group names. The structure of `srcaddr4` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicySrcaddr4Args> Srcaddr4s
        {
            get => _srcaddr4s ?? (_srcaddr4s = new InputList<Inputs.FirewallconsolidatedPolicySrcaddr4Args>());
            set => _srcaddr4s = value;
        }

        [Input("srcaddr6s")]
        private InputList<Inputs.FirewallconsolidatedPolicySrcaddr6Args>? _srcaddr6s;

        /// <summary>
        /// Source IPv6 address name and address group names. The structure of `srcaddr6` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicySrcaddr6Args> Srcaddr6s
        {
            get => _srcaddr6s ?? (_srcaddr6s = new InputList<Inputs.FirewallconsolidatedPolicySrcaddr6Args>());
            set => _srcaddr6s = value;
        }

        /// <summary>
        /// When enabled srcaddr specifies what the source address must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("srcaddrNegate")]
        public Input<string>? SrcaddrNegate { get; set; }

        [Input("srcintfs")]
        private InputList<Inputs.FirewallconsolidatedPolicySrcintfArgs>? _srcintfs;

        /// <summary>
        /// Incoming (ingress) interface. The structure of `srcintf` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicySrcintfArgs> Srcintfs
        {
            get => _srcintfs ?? (_srcintfs = new InputList<Inputs.FirewallconsolidatedPolicySrcintfArgs>());
            set => _srcintfs = value;
        }

        /// <summary>
        /// Name of an existing SSH filter profile.
        /// </summary>
        [Input("sshFilterProfile")]
        public Input<string>? SshFilterProfile { get; set; }

        /// <summary>
        /// Redirect SSH traffic to matching transparent proxy policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sshPolicyRedirect")]
        public Input<string>? SshPolicyRedirect { get; set; }

        /// <summary>
        /// Name of an existing SSL SSH profile.
        /// </summary>
        [Input("sslSshProfile")]
        public Input<string>? SslSshProfile { get; set; }

        /// <summary>
        /// Enable or disable this policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Receiver TCP maximum segment size (MSS).
        /// </summary>
        [Input("tcpMssReceiver")]
        public Input<int>? TcpMssReceiver { get; set; }

        /// <summary>
        /// Sender TCP maximum segment size (MSS).
        /// </summary>
        [Input("tcpMssSender")]
        public Input<int>? TcpMssSender { get; set; }

        /// <summary>
        /// Traffic shaper.
        /// </summary>
        [Input("trafficShaper")]
        public Input<string>? TrafficShaper { get; set; }

        /// <summary>
        /// Reverse traffic shaper.
        /// </summary>
        [Input("trafficShaperReverse")]
        public Input<string>? TrafficShaperReverse { get; set; }

        [Input("urlCategories")]
        private InputList<Inputs.FirewallconsolidatedPolicyUrlCategoryArgs>? _urlCategories;

        /// <summary>
        /// URL category ID list. The structure of `url_category` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyUrlCategoryArgs> UrlCategories
        {
            get => _urlCategories ?? (_urlCategories = new InputList<Inputs.FirewallconsolidatedPolicyUrlCategoryArgs>());
            set => _urlCategories = value;
        }

        [Input("users")]
        private InputList<Inputs.FirewallconsolidatedPolicyUserArgs>? _users;

        /// <summary>
        /// Names of individual users that can authenticate with this policy. The structure of `users` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyUserArgs> Users
        {
            get => _users ?? (_users = new InputList<Inputs.FirewallconsolidatedPolicyUserArgs>());
            set => _users = value;
        }

        /// <summary>
        /// Enable to add one or more security profiles (AV, IPS, etc.) to the firewall policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("utmStatus")]
        public Input<string>? UtmStatus { get; set; }

        /// <summary>
        /// Universally Unique Identifier (UUID; automatically assigned but can be manually reset).
        /// </summary>
        [Input("uuid")]
        public Input<string>? Uuid { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Name of an existing VoIP profile.
        /// </summary>
        [Input("voipProfile")]
        public Input<string>? VoipProfile { get; set; }

        /// <summary>
        /// Policy-based IPsec VPN: name of the IPsec VPN Phase 1.
        /// </summary>
        [Input("vpntunnel")]
        public Input<string>? Vpntunnel { get; set; }

        /// <summary>
        /// Name of an existing Web application firewall profile.
        /// </summary>
        [Input("wafProfile")]
        public Input<string>? WafProfile { get; set; }

        /// <summary>
        /// Enable/disable WAN optimization. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wanopt")]
        public Input<string>? Wanopt { get; set; }

        /// <summary>
        /// WAN optimization auto-detection mode. Valid values: `active`, `passive`, `off`.
        /// </summary>
        [Input("wanoptDetection")]
        public Input<string>? WanoptDetection { get; set; }

        /// <summary>
        /// WAN optimization passive mode options. This option decides what IP address will be used to connect to server. Valid values: `default`, `transparent`, `non-transparent`.
        /// </summary>
        [Input("wanoptPassiveOpt")]
        public Input<string>? WanoptPassiveOpt { get; set; }

        /// <summary>
        /// WAN optimization peer.
        /// </summary>
        [Input("wanoptPeer")]
        public Input<string>? WanoptPeer { get; set; }

        /// <summary>
        /// WAN optimization profile.
        /// </summary>
        [Input("wanoptProfile")]
        public Input<string>? WanoptProfile { get; set; }

        /// <summary>
        /// Enable/disable web cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webcache")]
        public Input<string>? Webcache { get; set; }

        /// <summary>
        /// Enable/disable web cache for HTTPS. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("webcacheHttps")]
        public Input<string>? WebcacheHttps { get; set; }

        /// <summary>
        /// Name of an existing Web filter profile.
        /// </summary>
        [Input("webfilterProfile")]
        public Input<string>? WebfilterProfile { get; set; }

        /// <summary>
        /// Webproxy forward server name.
        /// </summary>
        [Input("webproxyForwardServer")]
        public Input<string>? WebproxyForwardServer { get; set; }

        /// <summary>
        /// Webproxy profile name.
        /// </summary>
        [Input("webproxyProfile")]
        public Input<string>? WebproxyProfile { get; set; }

        public FirewallconsolidatedPolicyArgs()
        {
        }
        public static new FirewallconsolidatedPolicyArgs Empty => new FirewallconsolidatedPolicyArgs();
    }

    public sealed class FirewallconsolidatedPolicyState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Policy action (allow/deny/ipsec). Valid values: `accept`, `deny`, `ipsec`.
        /// </summary>
        [Input("action")]
        public Input<string>? Action { get; set; }

        [Input("appCategories")]
        private InputList<Inputs.FirewallconsolidatedPolicyAppCategoryGetArgs>? _appCategories;

        /// <summary>
        /// Application category ID list. The structure of `app_category` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyAppCategoryGetArgs> AppCategories
        {
            get => _appCategories ?? (_appCategories = new InputList<Inputs.FirewallconsolidatedPolicyAppCategoryGetArgs>());
            set => _appCategories = value;
        }

        [Input("appGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyAppGroupGetArgs>? _appGroups;

        /// <summary>
        /// Application group names. The structure of `app_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyAppGroupGetArgs> AppGroups
        {
            get => _appGroups ?? (_appGroups = new InputList<Inputs.FirewallconsolidatedPolicyAppGroupGetArgs>());
            set => _appGroups = value;
        }

        /// <summary>
        /// Name of an existing Application list.
        /// </summary>
        [Input("applicationList")]
        public Input<string>? ApplicationList { get; set; }

        [Input("applications")]
        private InputList<Inputs.FirewallconsolidatedPolicyApplicationGetArgs>? _applications;

        /// <summary>
        /// Application ID list. The structure of `application` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyApplicationGetArgs> Applications
        {
            get => _applications ?? (_applications = new InputList<Inputs.FirewallconsolidatedPolicyApplicationGetArgs>());
            set => _applications = value;
        }

        /// <summary>
        /// Enable/disable policy traffic ASIC offloading. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoAsicOffload")]
        public Input<string>? AutoAsicOffload { get; set; }

        /// <summary>
        /// Name of an existing Antivirus profile.
        /// </summary>
        [Input("avProfile")]
        public Input<string>? AvProfile { get; set; }

        /// <summary>
        /// Enable exemption of some users from the captive portal. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("captivePortalExempt")]
        public Input<string>? CaptivePortalExempt { get; set; }

        /// <summary>
        /// Name of an existing CIFS profile.
        /// </summary>
        [Input("cifsProfile")]
        public Input<string>? CifsProfile { get; set; }

        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comments")]
        public Input<string>? Comments { get; set; }

        /// <summary>
        /// Enable to change packet's DiffServ values to the specified diffservcode-forward value. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("diffservForward")]
        public Input<string>? DiffservForward { get; set; }

        /// <summary>
        /// Enable to change packet's reverse (reply) DiffServ values to the specified diffservcode-rev value.  Valid values: `enable`, `disable`.
        /// </summary>
        [Input("diffservReverse")]
        public Input<string>? DiffservReverse { get; set; }

        /// <summary>
        /// Change packet's DiffServ to this value.
        /// </summary>
        [Input("diffservcodeForward")]
        public Input<string>? DiffservcodeForward { get; set; }

        /// <summary>
        /// Change packet's reverse (reply) DiffServ to this value.
        /// </summary>
        [Input("diffservcodeRev")]
        public Input<string>? DiffservcodeRev { get; set; }

        /// <summary>
        /// Name of an existing DLP sensor.
        /// </summary>
        [Input("dlpSensor")]
        public Input<string>? DlpSensor { get; set; }

        /// <summary>
        /// Name of an existing DNS filter profile.
        /// </summary>
        [Input("dnsfilterProfile")]
        public Input<string>? DnsfilterProfile { get; set; }

        [Input("dstaddr4s")]
        private InputList<Inputs.FirewallconsolidatedPolicyDstaddr4GetArgs>? _dstaddr4s;

        /// <summary>
        /// Destination IPv4 address name and address group names. The structure of `dstaddr4` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyDstaddr4GetArgs> Dstaddr4s
        {
            get => _dstaddr4s ?? (_dstaddr4s = new InputList<Inputs.FirewallconsolidatedPolicyDstaddr4GetArgs>());
            set => _dstaddr4s = value;
        }

        [Input("dstaddr6s")]
        private InputList<Inputs.FirewallconsolidatedPolicyDstaddr6GetArgs>? _dstaddr6s;

        /// <summary>
        /// Destination IPv6 address name and address group names. The structure of `dstaddr6` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyDstaddr6GetArgs> Dstaddr6s
        {
            get => _dstaddr6s ?? (_dstaddr6s = new InputList<Inputs.FirewallconsolidatedPolicyDstaddr6GetArgs>());
            set => _dstaddr6s = value;
        }

        /// <summary>
        /// When enabled dstaddr specifies what the destination address must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("dstaddrNegate")]
        public Input<string>? DstaddrNegate { get; set; }

        [Input("dstintfs")]
        private InputList<Inputs.FirewallconsolidatedPolicyDstintfGetArgs>? _dstintfs;

        /// <summary>
        /// Outgoing (egress) interface. The structure of `dstintf` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyDstintfGetArgs> Dstintfs
        {
            get => _dstintfs ?? (_dstintfs = new InputList<Inputs.FirewallconsolidatedPolicyDstintfGetArgs>());
            set => _dstintfs = value;
        }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Name of an existing email filter profile.
        /// </summary>
        [Input("emailfilterProfile")]
        public Input<string>? EmailfilterProfile { get; set; }

        /// <summary>
        /// Enable to prevent source NAT from changing a session's source port. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fixedport")]
        public Input<string>? Fixedport { get; set; }

        [Input("fssoGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyFssoGroupGetArgs>? _fssoGroups;

        /// <summary>
        /// Names of FSSO groups. The structure of `fsso_groups` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyFssoGroupGetArgs> FssoGroups
        {
            get => _fssoGroups ?? (_fssoGroups = new InputList<Inputs.FirewallconsolidatedPolicyFssoGroupGetArgs>());
            set => _fssoGroups = value;
        }

        [Input("groups")]
        private InputList<Inputs.FirewallconsolidatedPolicyGroupGetArgs>? _groups;

        /// <summary>
        /// Names of user groups that can authenticate with this policy. The structure of `groups` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyGroupGetArgs> Groups
        {
            get => _groups ?? (_groups = new InputList<Inputs.FirewallconsolidatedPolicyGroupGetArgs>());
            set => _groups = value;
        }

        /// <summary>
        /// Redirect HTTP(S) traffic to matching transparent web proxy policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("httpPolicyRedirect")]
        public Input<string>? HttpPolicyRedirect { get; set; }

        /// <summary>
        /// Name of an existing ICAP profile.
        /// </summary>
        [Input("icapProfile")]
        public Input<string>? IcapProfile { get; set; }

        /// <summary>
        /// Policy-based IPsec VPN: only traffic from the remote network can initiate a VPN. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("inbound")]
        public Input<string>? Inbound { get; set; }

        /// <summary>
        /// Policy inspection mode (Flow/proxy). Default is Flow mode. Valid values: `proxy`, `flow`.
        /// </summary>
        [Input("inspectionMode")]
        public Input<string>? InspectionMode { get; set; }

        /// <summary>
        /// Enable/disable use of Internet Services for this policy. If enabled, destination address and service are not used.  Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetService")]
        public Input<string>? InternetService { get; set; }

        [Input("internetServiceCustomGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGroupGetArgs>? _internetServiceCustomGroups;

        /// <summary>
        /// Custom Internet Service group name. The structure of `internet_service_custom_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGroupGetArgs> InternetServiceCustomGroups
        {
            get => _internetServiceCustomGroups ?? (_internetServiceCustomGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGroupGetArgs>());
            set => _internetServiceCustomGroups = value;
        }

        [Input("internetServiceCustoms")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGetArgs>? _internetServiceCustoms;

        /// <summary>
        /// Custom Internet Service name. The structure of `internet_service_custom` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGetArgs> InternetServiceCustoms
        {
            get => _internetServiceCustoms ?? (_internetServiceCustoms = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceCustomGetArgs>());
            set => _internetServiceCustoms = value;
        }

        [Input("internetServiceGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceGroupGetArgs>? _internetServiceGroups;

        /// <summary>
        /// Internet Service group name. The structure of `internet_service_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceGroupGetArgs> InternetServiceGroups
        {
            get => _internetServiceGroups ?? (_internetServiceGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceGroupGetArgs>());
            set => _internetServiceGroups = value;
        }

        [Input("internetServiceIds")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceIdGetArgs>? _internetServiceIds;

        /// <summary>
        /// Internet Service ID. The structure of `internet_service_id` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceIdGetArgs> InternetServiceIds
        {
            get => _internetServiceIds ?? (_internetServiceIds = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceIdGetArgs>());
            set => _internetServiceIds = value;
        }

        [Input("internetServiceNames")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceNameGetArgs>? _internetServiceNames;

        /// <summary>
        /// Internet Service name. The structure of `internet_service_name` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceNameGetArgs> InternetServiceNames
        {
            get => _internetServiceNames ?? (_internetServiceNames = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceNameGetArgs>());
            set => _internetServiceNames = value;
        }

        /// <summary>
        /// When enabled internet-service specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetServiceNegate")]
        public Input<string>? InternetServiceNegate { get; set; }

        /// <summary>
        /// Enable/disable use of Internet Services in source for this policy. If enabled, source address is not used.  Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetServiceSrc")]
        public Input<string>? InternetServiceSrc { get; set; }

        [Input("internetServiceSrcCustomGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGroupGetArgs>? _internetServiceSrcCustomGroups;

        /// <summary>
        /// Custom Internet Service source group name. The structure of `internet_service_src_custom_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGroupGetArgs> InternetServiceSrcCustomGroups
        {
            get => _internetServiceSrcCustomGroups ?? (_internetServiceSrcCustomGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGroupGetArgs>());
            set => _internetServiceSrcCustomGroups = value;
        }

        [Input("internetServiceSrcCustoms")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGetArgs>? _internetServiceSrcCustoms;

        /// <summary>
        /// Custom Internet Service source name. The structure of `internet_service_src_custom` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGetArgs> InternetServiceSrcCustoms
        {
            get => _internetServiceSrcCustoms ?? (_internetServiceSrcCustoms = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcCustomGetArgs>());
            set => _internetServiceSrcCustoms = value;
        }

        [Input("internetServiceSrcGroups")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcGroupGetArgs>? _internetServiceSrcGroups;

        /// <summary>
        /// Internet Service source group name. The structure of `internet_service_src_group` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcGroupGetArgs> InternetServiceSrcGroups
        {
            get => _internetServiceSrcGroups ?? (_internetServiceSrcGroups = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcGroupGetArgs>());
            set => _internetServiceSrcGroups = value;
        }

        [Input("internetServiceSrcIds")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcIdGetArgs>? _internetServiceSrcIds;

        /// <summary>
        /// Internet Service source ID. The structure of `internet_service_src_id` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcIdGetArgs> InternetServiceSrcIds
        {
            get => _internetServiceSrcIds ?? (_internetServiceSrcIds = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcIdGetArgs>());
            set => _internetServiceSrcIds = value;
        }

        [Input("internetServiceSrcNames")]
        private InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcNameGetArgs>? _internetServiceSrcNames;

        /// <summary>
        /// Internet Service source name. The structure of `internet_service_src_name` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcNameGetArgs> InternetServiceSrcNames
        {
            get => _internetServiceSrcNames ?? (_internetServiceSrcNames = new InputList<Inputs.FirewallconsolidatedPolicyInternetServiceSrcNameGetArgs>());
            set => _internetServiceSrcNames = value;
        }

        /// <summary>
        /// When enabled internet-service-src specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("internetServiceSrcNegate")]
        public Input<string>? InternetServiceSrcNegate { get; set; }

        /// <summary>
        /// Enable to use IP Pools for source NAT. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ippool")]
        public Input<string>? Ippool { get; set; }

        /// <summary>
        /// Name of an existing IPS sensor.
        /// </summary>
        [Input("ipsSensor")]
        public Input<string>? IpsSensor { get; set; }

        /// <summary>
        /// Enable or disable logging. Log all sessions or security profile sessions. Valid values: `all`, `utm`, `disable`.
        /// </summary>
        [Input("logtraffic")]
        public Input<string>? Logtraffic { get; set; }

        /// <summary>
        /// Record logs when a session starts. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("logtrafficStart")]
        public Input<string>? LogtrafficStart { get; set; }

        /// <summary>
        /// Policy name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable source NAT. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("nat")]
        public Input<string>? Nat { get; set; }

        /// <summary>
        /// Policy-based IPsec VPN: only traffic from the internal network can initiate a VPN. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("outbound")]
        public Input<string>? Outbound { get; set; }

        /// <summary>
        /// Per-IP traffic shaper.
        /// </summary>
        [Input("perIpShaper")]
        public Input<string>? PerIpShaper { get; set; }

        /// <summary>
        /// Policy ID.
        /// </summary>
        [Input("policyid")]
        public Input<int>? Policyid { get; set; }

        [Input("poolname4s")]
        private InputList<Inputs.FirewallconsolidatedPolicyPoolname4GetArgs>? _poolname4s;

        /// <summary>
        /// IPv4 pool names. The structure of `poolname4` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyPoolname4GetArgs> Poolname4s
        {
            get => _poolname4s ?? (_poolname4s = new InputList<Inputs.FirewallconsolidatedPolicyPoolname4GetArgs>());
            set => _poolname4s = value;
        }

        [Input("poolname6s")]
        private InputList<Inputs.FirewallconsolidatedPolicyPoolname6GetArgs>? _poolname6s;

        /// <summary>
        /// IPv6 pool names. The structure of `poolname6` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyPoolname6GetArgs> Poolname6s
        {
            get => _poolname6s ?? (_poolname6s = new InputList<Inputs.FirewallconsolidatedPolicyPoolname6GetArgs>());
            set => _poolname6s = value;
        }

        /// <summary>
        /// Name of profile group.
        /// </summary>
        [Input("profileGroup")]
        public Input<string>? ProfileGroup { get; set; }

        /// <summary>
        /// Name of an existing Protocol options profile.
        /// </summary>
        [Input("profileProtocolOptions")]
        public Input<string>? ProfileProtocolOptions { get; set; }

        /// <summary>
        /// Determine whether the firewall policy allows security profile groups or single profiles only. Valid values: `single`, `group`.
        /// </summary>
        [Input("profileType")]
        public Input<string>? ProfileType { get; set; }

        /// <summary>
        /// Schedule name.
        /// </summary>
        [Input("schedule")]
        public Input<string>? Schedule { get; set; }

        /// <summary>
        /// When enabled service specifies what the service must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("serviceNegate")]
        public Input<string>? ServiceNegate { get; set; }

        [Input("services")]
        private InputList<Inputs.FirewallconsolidatedPolicyServiceGetArgs>? _services;

        /// <summary>
        /// Service and service group names. The structure of `service` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyServiceGetArgs> Services
        {
            get => _services ?? (_services = new InputList<Inputs.FirewallconsolidatedPolicyServiceGetArgs>());
            set => _services = value;
        }

        /// <summary>
        /// TTL in seconds for sessions accepted by this policy (0 means use the system default session TTL).
        /// </summary>
        [Input("sessionTtl")]
        public Input<int>? SessionTtl { get; set; }

        /// <summary>
        /// Name of an existing Spam filter profile.
        /// </summary>
        [Input("spamfilterProfile")]
        public Input<string>? SpamfilterProfile { get; set; }

        [Input("srcaddr4s")]
        private InputList<Inputs.FirewallconsolidatedPolicySrcaddr4GetArgs>? _srcaddr4s;

        /// <summary>
        /// Source IPv4 address name and address group names. The structure of `srcaddr4` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicySrcaddr4GetArgs> Srcaddr4s
        {
            get => _srcaddr4s ?? (_srcaddr4s = new InputList<Inputs.FirewallconsolidatedPolicySrcaddr4GetArgs>());
            set => _srcaddr4s = value;
        }

        [Input("srcaddr6s")]
        private InputList<Inputs.FirewallconsolidatedPolicySrcaddr6GetArgs>? _srcaddr6s;

        /// <summary>
        /// Source IPv6 address name and address group names. The structure of `srcaddr6` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicySrcaddr6GetArgs> Srcaddr6s
        {
            get => _srcaddr6s ?? (_srcaddr6s = new InputList<Inputs.FirewallconsolidatedPolicySrcaddr6GetArgs>());
            set => _srcaddr6s = value;
        }

        /// <summary>
        /// When enabled srcaddr specifies what the source address must NOT be. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("srcaddrNegate")]
        public Input<string>? SrcaddrNegate { get; set; }

        [Input("srcintfs")]
        private InputList<Inputs.FirewallconsolidatedPolicySrcintfGetArgs>? _srcintfs;

        /// <summary>
        /// Incoming (ingress) interface. The structure of `srcintf` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicySrcintfGetArgs> Srcintfs
        {
            get => _srcintfs ?? (_srcintfs = new InputList<Inputs.FirewallconsolidatedPolicySrcintfGetArgs>());
            set => _srcintfs = value;
        }

        /// <summary>
        /// Name of an existing SSH filter profile.
        /// </summary>
        [Input("sshFilterProfile")]
        public Input<string>? SshFilterProfile { get; set; }

        /// <summary>
        /// Redirect SSH traffic to matching transparent proxy policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sshPolicyRedirect")]
        public Input<string>? SshPolicyRedirect { get; set; }

        /// <summary>
        /// Name of an existing SSL SSH profile.
        /// </summary>
        [Input("sslSshProfile")]
        public Input<string>? SslSshProfile { get; set; }

        /// <summary>
        /// Enable or disable this policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Receiver TCP maximum segment size (MSS).
        /// </summary>
        [Input("tcpMssReceiver")]
        public Input<int>? TcpMssReceiver { get; set; }

        /// <summary>
        /// Sender TCP maximum segment size (MSS).
        /// </summary>
        [Input("tcpMssSender")]
        public Input<int>? TcpMssSender { get; set; }

        /// <summary>
        /// Traffic shaper.
        /// </summary>
        [Input("trafficShaper")]
        public Input<string>? TrafficShaper { get; set; }

        /// <summary>
        /// Reverse traffic shaper.
        /// </summary>
        [Input("trafficShaperReverse")]
        public Input<string>? TrafficShaperReverse { get; set; }

        [Input("urlCategories")]
        private InputList<Inputs.FirewallconsolidatedPolicyUrlCategoryGetArgs>? _urlCategories;

        /// <summary>
        /// URL category ID list. The structure of `url_category` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyUrlCategoryGetArgs> UrlCategories
        {
            get => _urlCategories ?? (_urlCategories = new InputList<Inputs.FirewallconsolidatedPolicyUrlCategoryGetArgs>());
            set => _urlCategories = value;
        }

        [Input("users")]
        private InputList<Inputs.FirewallconsolidatedPolicyUserGetArgs>? _users;

        /// <summary>
        /// Names of individual users that can authenticate with this policy. The structure of `users` block is documented below.
        /// </summary>
        public InputList<Inputs.FirewallconsolidatedPolicyUserGetArgs> Users
        {
            get => _users ?? (_users = new InputList<Inputs.FirewallconsolidatedPolicyUserGetArgs>());
            set => _users = value;
        }

        /// <summary>
        /// Enable to add one or more security profiles (AV, IPS, etc.) to the firewall policy. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("utmStatus")]
        public Input<string>? UtmStatus { get; set; }

        /// <summary>
        /// Universally Unique Identifier (UUID; automatically assigned but can be manually reset).
        /// </summary>
        [Input("uuid")]
        public Input<string>? Uuid { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Name of an existing VoIP profile.
        /// </summary>
        [Input("voipProfile")]
        public Input<string>? VoipProfile { get; set; }

        /// <summary>
        /// Policy-based IPsec VPN: name of the IPsec VPN Phase 1.
        /// </summary>
        [Input("vpntunnel")]
        public Input<string>? Vpntunnel { get; set; }

        /// <summary>
        /// Name of an existing Web application firewall profile.
        /// </summary>
        [Input("wafProfile")]
        public Input<string>? WafProfile { get; set; }

        /// <summary>
        /// Enable/disable WAN optimization. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wanopt")]
        public Input<string>? Wanopt { get; set; }

        /// <summary>
        /// WAN optimization auto-detection mode. Valid values: `active`, `passive`, `off`.
        /// </summary>
        [Input("wanoptDetection")]
        public Input<string>? WanoptDetection { get; set; }

        /// <summary>
        /// WAN optimization passive mode options. This option decides what IP address will be used to connect to server. Valid values: `default`, `transparent`, `non-transparent`.
        /// </summary>
        [Input("wanoptPassiveOpt")]
        public Input<string>? WanoptPassiveOpt { get; set; }

        /// <summary>
        /// WAN optimization peer.
        /// </summary>
        [Input("wanoptPeer")]
        public Input<string>? WanoptPeer { get; set; }

        /// <summary>
        /// WAN optimization profile.
        /// </summary>
        [Input("wanoptProfile")]
        public Input<string>? WanoptProfile { get; set; }

        /// <summary>
        /// Enable/disable web cache. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webcache")]
        public Input<string>? Webcache { get; set; }

        /// <summary>
        /// Enable/disable web cache for HTTPS. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("webcacheHttps")]
        public Input<string>? WebcacheHttps { get; set; }

        /// <summary>
        /// Name of an existing Web filter profile.
        /// </summary>
        [Input("webfilterProfile")]
        public Input<string>? WebfilterProfile { get; set; }

        /// <summary>
        /// Webproxy forward server name.
        /// </summary>
        [Input("webproxyForwardServer")]
        public Input<string>? WebproxyForwardServer { get; set; }

        /// <summary>
        /// Webproxy profile name.
        /// </summary>
        [Input("webproxyProfile")]
        public Input<string>? WebproxyProfile { get; set; }

        public FirewallconsolidatedPolicyState()
        {
        }
        public static new FirewallconsolidatedPolicyState Empty => new FirewallconsolidatedPolicyState();
    }
}
