#compdef mullvad

autoload -U is-at-least

_mullvad() {
    typeset -A opt_args
    typeset -a _arguments_options
    local ret=1

    if is-at-least 5.2; then
        _arguments_options=(-s -S -C)
    else
        _arguments_options=(-s -C)
    fi

    local context curcontext="$curcontext" state line
    _arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad_commands" \
"*::: :->mullvad" \
&& ret=0
    case $state in
    (mullvad)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-command-$line[1]:"
        case $line[1] in
            (split-tunnel)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__split-tunnel_commands" \
"*::: :->split-tunnel" \
&& ret=0

    case $state in
    (split-tunnel)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-split-tunnel-command-$line[1]:"
        case $line[1] in
            (pid)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__split-tunnel__pid_commands" \
"*::: :->pid" \
&& ret=0

    case $state in
    (pid)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-split-tunnel-pid-command-$line[1]:"
        case $line[1] in
            (add)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':pid:' \
&& ret=0
;;
(delete)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':pid:' \
&& ret=0
;;
(clear)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(list)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
        esac
    ;;
esac
;;
(account)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__account_commands" \
"*::: :->account" \
&& ret=0

    case $state in
    (account)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-account-command-$line[1]:"
        case $line[1] in
            (create)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(login)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
'::account -- The Mullvad account token to configure the client with:' \
&& ret=0
;;
(logout)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-v[Enables verbose output]' \
'--verbose[Enables verbose output]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(list-devices)
_arguments "${_arguments_options[@]}" \
'--account=[Mullvad account number]: : ' \
'--version[Print version information]' \
'-v[Enables verbose output]' \
'--verbose[Enables verbose output]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(revoke-device)
_arguments "${_arguments_options[@]}" \
'--account=[Mullvad account number]: : ' \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
':device -- Name or ID of the device to revoke:' \
&& ret=0
;;
(redeem)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
':voucher -- The Mullvad voucher code to be submitted:' \
&& ret=0
;;
        esac
    ;;
esac
;;
(beta-program)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__beta-program_commands" \
"*::: :->beta-program" \
&& ret=0

    case $state in
    (beta-program)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-beta-program-command-$line[1]:"
        case $line[1] in
            (set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
':policy:(on off)' \
&& ret=0
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(connect)
_arguments "${_arguments_options[@]}" \
'-w[Wait until connected before exiting]' \
'--wait[Wait until connected before exiting]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(relay)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__relay_commands" \
"*::: :->relay" \
&& ret=0

    case $state in
    (relay)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-relay-command-$line[1]:"
        case $line[1] in
            (set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__relay__set_commands" \
"*::: :->set" \
&& ret=0

    case $state in
    (set)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-relay-set-command-$line[1]:"
        case $line[1] in
            (custom)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__relay__set__custom_commands" \
"*::: :->custom" \
&& ret=0

    case $state in
    (custom)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-relay-set-custom-command-$line[1]:"
        case $line[1] in
            (wireguard)
_arguments "${_arguments_options[@]}" \
'--v6-gateway=[IPv6 gateway address]: : ' \
'--help[Print help information]' \
'--version[Print version information]' \
':host -- Hostname or IP:' \
':port -- Remote network port:' \
':peer-pubkey -- Base64 encoded peer public key:' \
':v4-gateway -- IPv4 gateway address:' \
'*::addr -- Local address of wireguard tunnel:' \
&& ret=0
;;
(openvpn)
_arguments "${_arguments_options[@]}" \
'--protocol=[Transport protocol]: :(udp tcp)' \
'--help[Print help information]' \
'--version[Print version information]' \
':host -- Hostname or IP:' \
':port -- Remote network port:' \
':username -- Username to be used with the OpenVpn relay:' \
':password -- Password to be used with the OpenVpn relay:' \
&& ret=0
;;
        esac
    ;;
esac
;;
(location)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':country -- The two letter country code, or '\''any'\'' for no preference.:' \
'::city -- The three letter city code:' \
'::hostname -- The hostname:' \
&& ret=0
;;
(hostname)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':hostname -- The hostname:' \
&& ret=0
;;
(provider)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
'*::provider -- The hosting provider(s) to use, or '\''any'\'' for no preference.:' \
&& ret=0
;;
(ownership)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':ownership -- Ownership preference, or '\''any'\'' for no preference.:(any owned rented)' \
&& ret=0
;;
(tunnel)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__relay__set__tunnel_commands" \
"*::: :->tunnel" \
&& ret=0

    case $state in
    (tunnel)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-relay-set-tunnel-command-$line[1]:"
        case $line[1] in
            (openvpn)
_arguments "${_arguments_options[@]}" \
'--port=[Port to use. Either '\''any'\'' or a specific port]: : ' \
'--protocol=[Transport protocol]: :(any udp tcp)' \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(wireguard)
_arguments "${_arguments_options[@]}" \
'--port=[Port to use. Either '\''any'\'' or a specific port]: : ' \
'--ipv=[]: :(any 4 6)' \
'--entry-location=[Entry endpoint to use. This can be '\''any'\'', '\''none'\'', or any location that is valid with '\''set location'\'', such as '\''se got'\''.]: : ' \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(tunnel-protocol)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':tunnel protocol:(any wireguard openvpn)' \
&& ret=0
;;
        esac
    ;;
esac
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(list)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(update)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(factory-reset)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(obfuscation)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__obfuscation_commands" \
"*::: :->obfuscation" \
&& ret=0

    case $state in
    (obfuscation)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-obfuscation-command-$line[1]:"
        case $line[1] in
            (set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__obfuscation__set_commands" \
"*::: :->set" \
&& ret=0

    case $state in
    (set)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-obfuscation-set-command-$line[1]:"
        case $line[1] in
            (mode)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':mode -- Specifies if obfuscation should be used with WireGuard connections. And if so, what obfuscation protocol it should use.:(auto off udp2tcp)' \
&& ret=0
;;
(udp2tcp)
_arguments "${_arguments_options[@]}" \
'--port=[TCP port of remote endpoint. Either '\''any'\'' or a specific port]: : ' \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(always-require-vpn)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__always-require-vpn_commands" \
"*::: :->always-require-vpn" \
&& ret=0

    case $state in
    (always-require-vpn)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-always-require-vpn-command-$line[1]:"
        case $line[1] in
            (set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
':policy:(on off)' \
&& ret=0
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(tunnel)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__tunnel_commands" \
"*::: :->tunnel" \
&& ret=0

    case $state in
    (tunnel)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-command-$line[1]:"
        case $line[1] in
            (openvpn)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__tunnel__openvpn_commands" \
"*::: :->openvpn" \
&& ret=0

    case $state in
    (openvpn)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-openvpn-command-$line[1]:"
        case $line[1] in
            (mssfix)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__tunnel__openvpn__mssfix_commands" \
"*::: :->mssfix" \
&& ret=0

    case $state in
    (mssfix)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-openvpn-mssfix-command-$line[1]:"
        case $line[1] in
            (get)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(unset)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':mssfix:' \
&& ret=0
;;
        esac
    ;;
esac
;;
        esac
    ;;
esac
;;
(wireguard)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__tunnel__wireguard_commands" \
"*::: :->wireguard" \
&& ret=0

    case $state in
    (wireguard)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-wireguard-command-$line[1]:"
        case $line[1] in
            (mtu)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__tunnel__wireguard__mtu_commands" \
"*::: :->mtu" \
&& ret=0

    case $state in
    (mtu)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-wireguard-mtu-command-$line[1]:"
        case $line[1] in
            (get)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(unset)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':mtu:' \
&& ret=0
;;
        esac
    ;;
esac
;;
(quantum-resistant-tunnel)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__tunnel__wireguard__quantum-resistant-tunnel_commands" \
"*::: :->quantum-resistant-tunnel" \
&& ret=0

    case $state in
    (quantum-resistant-tunnel)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-wireguard-quantum-resistant-tunnel-command-$line[1]:"
        case $line[1] in
            (get)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':policy:' \
&& ret=0
;;
        esac
    ;;
esac
;;
(key)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__tunnel__wireguard__key_commands" \
"*::: :->key" \
&& ret=0

    case $state in
    (key)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-wireguard-key-command-$line[1]:"
        case $line[1] in
            (check)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(regenerate)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(rotation-interval)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__tunnel__wireguard__key__rotation-interval_commands" \
"*::: :->rotation-interval" \
&& ret=0

    case $state in
    (rotation-interval)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-wireguard-key-rotation-interval-command-$line[1]:"
        case $line[1] in
            (get)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(reset)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':interval:' \
&& ret=0
;;
        esac
    ;;
esac
;;
        esac
    ;;
esac
;;
        esac
    ;;
esac
;;
(ipv6)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__tunnel__ipv6_commands" \
"*::: :->ipv6" \
&& ret=0

    case $state in
    (ipv6)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-tunnel-ipv6-command-$line[1]:"
        case $line[1] in
            (get)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':policy:(on off)' \
&& ret=0
;;
        esac
    ;;
esac
;;
        esac
    ;;
esac
;;
(reconnect)
_arguments "${_arguments_options[@]}" \
'-w[Wait until reconnected before exiting]' \
'--wait[Wait until reconnected before exiting]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(dns)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__dns_commands" \
"*::: :->dns" \
&& ret=0

    case $state in
    (dns)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-dns-command-$line[1]:"
        case $line[1] in
            (get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__dns__set_commands" \
"*::: :->set" \
&& ret=0

    case $state in
    (set)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-dns-set-command-$line[1]:"
        case $line[1] in
            (default)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
'--block-ads[Block domain names used for ads]' \
'--block-trackers[Block domain names used for tracking]' \
'--block-malware[Block domains known to be used by malware]' \
'--block-adult-content[Block domains known to be used for adult content]' \
'--block-gambling[Block domains known to be used for gambling]' \
&& ret=0
;;
(custom)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
'*::servers -- One or more IP addresses pointing to DNS resolvers.:' \
&& ret=0
;;
        esac
    ;;
esac
;;
        esac
    ;;
esac
;;
(auto-connect)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__auto-connect_commands" \
"*::: :->auto-connect" \
&& ret=0

    case $state in
    (auto-connect)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-auto-connect-command-$line[1]:"
        case $line[1] in
            (set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
':policy:(on off)' \
&& ret=0
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(bridge)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__bridge_commands" \
"*::: :->bridge" \
&& ret=0

    case $state in
    (bridge)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-bridge-command-$line[1]:"
        case $line[1] in
            (set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__bridge__set_commands" \
"*::: :->set" \
&& ret=0

    case $state in
    (set)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-bridge-set-command-$line[1]:"
        case $line[1] in
            (state)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':policy -- Specifies whether a bridge should be used:(auto on off)' \
&& ret=0
;;
(custom)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
":: :_mullvad__bridge__set__custom_commands" \
"*::: :->custom" \
&& ret=0

    case $state in
    (custom)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-bridge-set-custom-command-$line[1]:"
        case $line[1] in
            (local)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':local-port -- Specifies the port the local proxy server is listening on:' \
':remote-ip -- Specifies the IP of the proxy server peer:' \
':remote-port -- Specifies the port of the proxy server peer:' \
&& ret=0
;;
(remote)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':remote-ip -- Specifies the IP of the remote proxy server:' \
':remote-port -- Specifies the port the remote proxy server is listening on:' \
':username -- Specifies the username for remote authentication:' \
':password -- Specifies the password for remote authentication:' \
&& ret=0
;;
(shadowsocks)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':remote-ip -- Specifies the IP of the remote Shadowsocks server:' \
'::remote-port -- Specifies the port of the remote Shadowsocks server:' \
'::password -- Specifies the password on the remote Shadowsocks server:' \
'::cipher -- Specifies the cipher to use:(aes-128-cfb aes-128-cfb1 aes-128-cfb8 aes-128-cfb128 aes-256-cfb aes-256-cfb1 aes-256-cfb8 aes-256-cfb128 rc4 rc4-md5 chacha20 salsa20 chacha20-ietf aes-128-gcm aes-256-gcm chacha20-ietf-poly1305 xchacha20-ietf-poly1305 aes-128-pmac-siv aes-256-pmac-siv)' \
&& ret=0
;;
        esac
    ;;
esac
;;
(provider)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
'*::provider -- The hosting provider(s) to use, or '\''any'\'' for no preference.:' \
&& ret=0
;;
(ownership)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':ownership -- Ownership preference, or '\''any'\'' for no preference.:(any owned rented)' \
&& ret=0
;;
(location)
_arguments "${_arguments_options[@]}" \
'--help[Print help information]' \
'--version[Print version information]' \
':country -- The two letter country code, or '\''any'\'' for no preference.:' \
'::city -- The three letter city code:' \
'::hostname -- The hostname:' \
&& ret=0
;;
        esac
    ;;
esac
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(list)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(disconnect)
_arguments "${_arguments_options[@]}" \
'-w[Wait until disconnected before exiting]' \
'--wait[Wait until disconnected before exiting]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
(lan)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__lan_commands" \
"*::: :->lan" \
&& ret=0

    case $state in
    (lan)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-lan-command-$line[1]:"
        case $line[1] in
            (set)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
':policy:(allow block)' \
&& ret=0
;;
(get)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(status)
_arguments "${_arguments_options[@]}" \
'-v[Enables verbose output]' \
'-l[Prints the current location and IP. Based on GeoIP lookups]' \
'--location[Prints the current location and IP. Based on GeoIP lookups]' \
'--debug[Enables debug output]' \
'-h[Print help information]' \
'--help[Print help information]' \
":: :_mullvad__status_commands" \
"*::: :->status" \
&& ret=0

    case $state in
    (status)
        words=($line[1] "${words[@]}")
        (( CURRENT += 1 ))
        curcontext="${curcontext%:*:*}:mullvad-status-command-$line[1]:"
        case $line[1] in
            (listen)
_arguments "${_arguments_options[@]}" \
'--version[Print version information]' \
'--debug[Enables debug output]' \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
;;
(version)
_arguments "${_arguments_options[@]}" \
'-h[Print help information]' \
'--help[Print help information]' \
&& ret=0
;;
        esac
    ;;
esac
}

(( $+functions[_mullvad_commands] )) ||
_mullvad_commands() {
    local commands; commands=(
'split-tunnel:Manage split tunneling. To launch applications outside the tunnel, use the program '\''mullvad-exclude'\'' instead of this command.' \
'account:Control and display information about your Mullvad account' \
'beta-program:Receive notifications about beta updates' \
'connect:Command the client to start establishing a VPN tunnel' \
'relay:Manage relay and tunnel constraints' \
'factory-reset:Reset settings, caches and logs' \
'obfuscation:Manage use of obfuscation protocols for WireGuard. Can make WireGuard traffic look like something else on the network. Helps circumvent censorship and to establish a tunnel when on restricted networks' \
'always-require-vpn:Control if the system service should block network access when disconnected from VPN' \
'tunnel:Manage tunnel specific options' \
'reconnect:Command the client to reconnect' \
'dns:Configure DNS servers to use when connected' \
'auto-connect:Control the daemon auto-connect setting' \
'bridge:Manage use of bridges, socks proxies and Shadowsocks for OpenVPN. Can make OpenVPN tunnels use Shadowsocks via one of the Mullvad bridge servers. Can also make OpenVPN connect through any custom SOCKS5 proxy. These settings also affect how the app reaches the API over Shadowsocks.' \
'disconnect:Command the client to disconnect the VPN tunnel' \
'lan:Control the allow local network sharing setting' \
'status:View the state of the VPN tunnel' \
'version:Shows current version, and the currently supported versions' \
    )
    _describe -t commands 'mullvad commands' commands "$@"
}
(( $+functions[_mullvad__account_commands] )) ||
_mullvad__account_commands() {
    local commands; commands=(
'create:Create and log in to a new account' \
'login:Log in to an account' \
'logout:Log out of the current account' \
'get:Display information about the current account' \
'list-devices:List devices associated with an account' \
'revoke-device:Revoke a device associated with an account' \
'redeem:Redeems a voucher' \
    )
    _describe -t commands 'mullvad account commands' commands "$@"
}
(( $+functions[_mullvad__split-tunnel__pid__add_commands] )) ||
_mullvad__split-tunnel__pid__add_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad split-tunnel pid add commands' commands "$@"
}
(( $+functions[_mullvad__always-require-vpn_commands] )) ||
_mullvad__always-require-vpn_commands() {
    local commands; commands=(
'set:Change the always require VPN setting' \
'get:Display the current always require VPN setting' \
    )
    _describe -t commands 'mullvad always-require-vpn commands' commands "$@"
}
(( $+functions[_mullvad__auto-connect_commands] )) ||
_mullvad__auto-connect_commands() {
    local commands; commands=(
'set:Change auto-connect setting' \
'get:Display the current auto-connect setting' \
    )
    _describe -t commands 'mullvad auto-connect commands' commands "$@"
}
(( $+functions[_mullvad__beta-program_commands] )) ||
_mullvad__beta-program_commands() {
    local commands; commands=(
'set:Change beta notifications setting' \
'get:Get beta notifications setting' \
    )
    _describe -t commands 'mullvad beta-program commands' commands "$@"
}
(( $+functions[_mullvad__bridge_commands] )) ||
_mullvad__bridge_commands() {
    local commands; commands=(
'set:Set bridge state and settings' \
'get:Get current bridge settings and state' \
'list:List bridge relays' \
    )
    _describe -t commands 'mullvad bridge commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__key__check_commands] )) ||
_mullvad__tunnel__wireguard__key__check_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard key check commands' commands "$@"
}
(( $+functions[_mullvad__split-tunnel__pid__clear_commands] )) ||
_mullvad__split-tunnel__pid__clear_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad split-tunnel pid clear commands' commands "$@"
}
(( $+functions[_mullvad__connect_commands] )) ||
_mullvad__connect_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad connect commands' commands "$@"
}
(( $+functions[_mullvad__account__create_commands] )) ||
_mullvad__account__create_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad account create commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__custom_commands] )) ||
_mullvad__bridge__set__custom_commands() {
    local commands; commands=(
'local:Registers a local SOCKS5 proxy. The server must be excluded using '\''mullvad-exclude'\'', or `SO_MARK` must be set to '\''0x6d6f6c65'\'', in order to bypass firewall restrictions' \
'remote:Registers a remote SOCKS5 proxy' \
'shadowsocks:Configure bundled Shadowsocks proxy' \
    )
    _describe -t commands 'mullvad bridge set custom commands' commands "$@"
}
(( $+functions[_mullvad__dns__set__custom_commands] )) ||
_mullvad__dns__set__custom_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad dns set custom commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__custom_commands] )) ||
_mullvad__relay__set__custom_commands() {
    local commands; commands=(
'wireguard:' \
'openvpn:' \
    )
    _describe -t commands 'mullvad relay set custom commands' commands "$@"
}
(( $+functions[_mullvad__dns__set__default_commands] )) ||
_mullvad__dns__set__default_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad dns set default commands' commands "$@"
}
(( $+functions[_mullvad__split-tunnel__pid__delete_commands] )) ||
_mullvad__split-tunnel__pid__delete_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad split-tunnel pid delete commands' commands "$@"
}
(( $+functions[_mullvad__disconnect_commands] )) ||
_mullvad__disconnect_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad disconnect commands' commands "$@"
}
(( $+functions[_mullvad__dns_commands] )) ||
_mullvad__dns_commands() {
    local commands; commands=(
'get:Display the current DNS settings' \
'set:Set DNS servers to use' \
    )
    _describe -t commands 'mullvad dns commands' commands "$@"
}
(( $+functions[_mullvad__factory-reset_commands] )) ||
_mullvad__factory-reset_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad factory-reset commands' commands "$@"
}
(( $+functions[_mullvad__account__get_commands] )) ||
_mullvad__account__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad account get commands' commands "$@"
}
(( $+functions[_mullvad__always-require-vpn__get_commands] )) ||
_mullvad__always-require-vpn__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad always-require-vpn get commands' commands "$@"
}
(( $+functions[_mullvad__auto-connect__get_commands] )) ||
_mullvad__auto-connect__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad auto-connect get commands' commands "$@"
}
(( $+functions[_mullvad__beta-program__get_commands] )) ||
_mullvad__beta-program__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad beta-program get commands' commands "$@"
}
(( $+functions[_mullvad__bridge__get_commands] )) ||
_mullvad__bridge__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge get commands' commands "$@"
}
(( $+functions[_mullvad__dns__get_commands] )) ||
_mullvad__dns__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad dns get commands' commands "$@"
}
(( $+functions[_mullvad__lan__get_commands] )) ||
_mullvad__lan__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad lan get commands' commands "$@"
}
(( $+functions[_mullvad__obfuscation__get_commands] )) ||
_mullvad__obfuscation__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad obfuscation get commands' commands "$@"
}
(( $+functions[_mullvad__relay__get_commands] )) ||
_mullvad__relay__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay get commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__ipv6__get_commands] )) ||
_mullvad__tunnel__ipv6__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel ipv6 get commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__openvpn__mssfix__get_commands] )) ||
_mullvad__tunnel__openvpn__mssfix__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel openvpn mssfix get commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__key__rotation-interval__get_commands] )) ||
_mullvad__tunnel__wireguard__key__rotation-interval__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard key rotation-interval get commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__mtu__get_commands] )) ||
_mullvad__tunnel__wireguard__mtu__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard mtu get commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__quantum-resistant-tunnel__get_commands] )) ||
_mullvad__tunnel__wireguard__quantum-resistant-tunnel__get_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard quantum-resistant-tunnel get commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__hostname_commands] )) ||
_mullvad__relay__set__hostname_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set hostname commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__ipv6_commands] )) ||
_mullvad__tunnel__ipv6_commands() {
    local commands; commands=(
'get:' \
'set:' \
    )
    _describe -t commands 'mullvad tunnel ipv6 commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__key_commands] )) ||
_mullvad__tunnel__wireguard__key_commands() {
    local commands; commands=(
'check:' \
'regenerate:' \
'rotation-interval:Manage automatic key rotation (given in hours)' \
    )
    _describe -t commands 'mullvad tunnel wireguard key commands' commands "$@"
}
(( $+functions[_mullvad__lan_commands] )) ||
_mullvad__lan_commands() {
    local commands; commands=(
'set:Change allow LAN setting' \
'get:Display the current local network sharing setting' \
    )
    _describe -t commands 'mullvad lan commands' commands "$@"
}
(( $+functions[_mullvad__bridge__list_commands] )) ||
_mullvad__bridge__list_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge list commands' commands "$@"
}
(( $+functions[_mullvad__relay__list_commands] )) ||
_mullvad__relay__list_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay list commands' commands "$@"
}
(( $+functions[_mullvad__split-tunnel__pid__list_commands] )) ||
_mullvad__split-tunnel__pid__list_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad split-tunnel pid list commands' commands "$@"
}
(( $+functions[_mullvad__account__list-devices_commands] )) ||
_mullvad__account__list-devices_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad account list-devices commands' commands "$@"
}
(( $+functions[_mullvad__status__listen_commands] )) ||
_mullvad__status__listen_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad status listen commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__custom__local_commands] )) ||
_mullvad__bridge__set__custom__local_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge set custom local commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__location_commands] )) ||
_mullvad__bridge__set__location_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge set location commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__location_commands] )) ||
_mullvad__relay__set__location_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set location commands' commands "$@"
}
(( $+functions[_mullvad__account__login_commands] )) ||
_mullvad__account__login_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad account login commands' commands "$@"
}
(( $+functions[_mullvad__account__logout_commands] )) ||
_mullvad__account__logout_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad account logout commands' commands "$@"
}
(( $+functions[_mullvad__obfuscation__set__mode_commands] )) ||
_mullvad__obfuscation__set__mode_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad obfuscation set mode commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__openvpn__mssfix_commands] )) ||
_mullvad__tunnel__openvpn__mssfix_commands() {
    local commands; commands=(
'get:' \
'unset:' \
'set:' \
    )
    _describe -t commands 'mullvad tunnel openvpn mssfix commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__mtu_commands] )) ||
_mullvad__tunnel__wireguard__mtu_commands() {
    local commands; commands=(
'get:' \
'unset:' \
'set:' \
    )
    _describe -t commands 'mullvad tunnel wireguard mtu commands' commands "$@"
}
(( $+functions[_mullvad__obfuscation_commands] )) ||
_mullvad__obfuscation_commands() {
    local commands; commands=(
'set:Set obfuscation settings' \
'get:Get current obfuscation settings' \
    )
    _describe -t commands 'mullvad obfuscation commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__custom__openvpn_commands] )) ||
_mullvad__relay__set__custom__openvpn_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set custom openvpn commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__tunnel__openvpn_commands] )) ||
_mullvad__relay__set__tunnel__openvpn_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set tunnel openvpn commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__openvpn_commands] )) ||
_mullvad__tunnel__openvpn_commands() {
    local commands; commands=(
'mssfix:Configure the optional mssfix parameter' \
    )
    _describe -t commands 'mullvad tunnel openvpn commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__ownership_commands] )) ||
_mullvad__bridge__set__ownership_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge set ownership commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__ownership_commands] )) ||
_mullvad__relay__set__ownership_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set ownership commands' commands "$@"
}
(( $+functions[_mullvad__split-tunnel__pid_commands] )) ||
_mullvad__split-tunnel__pid_commands() {
    local commands; commands=(
'add:' \
'delete:' \
'clear:' \
'list:' \
    )
    _describe -t commands 'mullvad split-tunnel pid commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__provider_commands] )) ||
_mullvad__bridge__set__provider_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge set provider commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__provider_commands] )) ||
_mullvad__relay__set__provider_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set provider commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__quantum-resistant-tunnel_commands] )) ||
_mullvad__tunnel__wireguard__quantum-resistant-tunnel_commands() {
    local commands; commands=(
'get:' \
'set:' \
    )
    _describe -t commands 'mullvad tunnel wireguard quantum-resistant-tunnel commands' commands "$@"
}
(( $+functions[_mullvad__reconnect_commands] )) ||
_mullvad__reconnect_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad reconnect commands' commands "$@"
}
(( $+functions[_mullvad__account__redeem_commands] )) ||
_mullvad__account__redeem_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad account redeem commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__key__regenerate_commands] )) ||
_mullvad__tunnel__wireguard__key__regenerate_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard key regenerate commands' commands "$@"
}
(( $+functions[_mullvad__relay_commands] )) ||
_mullvad__relay_commands() {
    local commands; commands=(
'set:Set relay server selection parameters. Such as location and port/protocol' \
'get:' \
'list:List available countries and cities' \
'update:Update the list of available countries and cities' \
    )
    _describe -t commands 'mullvad relay commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__custom__remote_commands] )) ||
_mullvad__bridge__set__custom__remote_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge set custom remote commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__key__rotation-interval__reset_commands] )) ||
_mullvad__tunnel__wireguard__key__rotation-interval__reset_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard key rotation-interval reset commands' commands "$@"
}
(( $+functions[_mullvad__account__revoke-device_commands] )) ||
_mullvad__account__revoke-device_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad account revoke-device commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__key__rotation-interval_commands] )) ||
_mullvad__tunnel__wireguard__key__rotation-interval_commands() {
    local commands; commands=(
'get:' \
'reset:Use the default rotation interval' \
'set:' \
    )
    _describe -t commands 'mullvad tunnel wireguard key rotation-interval commands' commands "$@"
}
(( $+functions[_mullvad__always-require-vpn__set_commands] )) ||
_mullvad__always-require-vpn__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad always-require-vpn set commands' commands "$@"
}
(( $+functions[_mullvad__auto-connect__set_commands] )) ||
_mullvad__auto-connect__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad auto-connect set commands' commands "$@"
}
(( $+functions[_mullvad__beta-program__set_commands] )) ||
_mullvad__beta-program__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad beta-program set commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set_commands] )) ||
_mullvad__bridge__set_commands() {
    local commands; commands=(
'state:Set bridge state' \
'custom:Configure a SOCKS5 proxy' \
'provider:Set hosting provider(s) to select bridge relays from. The '\''list'\'' command shows the available relays and their providers.' \
'ownership:Filters bridges based on ownership. The '\''list'\'' command shows the available relays and whether they'\''re rented.' \
'location:Set country or city to select bridge relays from. Use the '\''list'\'' command to show available alternatives.' \
    )
    _describe -t commands 'mullvad bridge set commands' commands "$@"
}
(( $+functions[_mullvad__dns__set_commands] )) ||
_mullvad__dns__set_commands() {
    local commands; commands=(
'default:Use default DNS servers' \
'custom:Set a list of custom DNS servers' \
    )
    _describe -t commands 'mullvad dns set commands' commands "$@"
}
(( $+functions[_mullvad__lan__set_commands] )) ||
_mullvad__lan__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad lan set commands' commands "$@"
}
(( $+functions[_mullvad__obfuscation__set_commands] )) ||
_mullvad__obfuscation__set_commands() {
    local commands; commands=(
'mode:Set obfuscation mode' \
'udp2tcp:Specifies the config for the udp2tcp obfuscator' \
    )
    _describe -t commands 'mullvad obfuscation set commands' commands "$@"
}
(( $+functions[_mullvad__relay__set_commands] )) ||
_mullvad__relay__set_commands() {
    local commands; commands=(
'custom:Set a custom VPN relay' \
'location:Set country or city to select relays from. Use the '\''list'\'' command to show available alternatives.' \
'hostname:Set the exact relay to use via its hostname. Shortcut for '\''location <country> <city> <hostname>'\''.' \
'provider:Set hosting provider(s) to select relays from. The '\''list'\'' command shows the available relays and their providers.' \
'ownership:Filters relays based on ownership. The '\''list'\'' command shows the available relays and whether they'\''re rented.' \
'tunnel:Set tunnel protocol-specific constraints.' \
'tunnel-protocol:Set tunnel protocol' \
    )
    _describe -t commands 'mullvad relay set commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__ipv6__set_commands] )) ||
_mullvad__tunnel__ipv6__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel ipv6 set commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__openvpn__mssfix__set_commands] )) ||
_mullvad__tunnel__openvpn__mssfix__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel openvpn mssfix set commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__key__rotation-interval__set_commands] )) ||
_mullvad__tunnel__wireguard__key__rotation-interval__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard key rotation-interval set commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__mtu__set_commands] )) ||
_mullvad__tunnel__wireguard__mtu__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard mtu set commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__quantum-resistant-tunnel__set_commands] )) ||
_mullvad__tunnel__wireguard__quantum-resistant-tunnel__set_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard quantum-resistant-tunnel set commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__custom__shadowsocks_commands] )) ||
_mullvad__bridge__set__custom__shadowsocks_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge set custom shadowsocks commands' commands "$@"
}
(( $+functions[_mullvad__split-tunnel_commands] )) ||
_mullvad__split-tunnel_commands() {
    local commands; commands=(
'pid:Manage processes to exclude from the tunnel' \
    )
    _describe -t commands 'mullvad split-tunnel commands' commands "$@"
}
(( $+functions[_mullvad__bridge__set__state_commands] )) ||
_mullvad__bridge__set__state_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad bridge set state commands' commands "$@"
}
(( $+functions[_mullvad__status_commands] )) ||
_mullvad__status_commands() {
    local commands; commands=(
'listen:Listen for VPN tunnel state changes' \
    )
    _describe -t commands 'mullvad status commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__tunnel_commands] )) ||
_mullvad__relay__set__tunnel_commands() {
    local commands; commands=(
'openvpn:Set OpenVPN-specific constraints' \
'wireguard:Set WireGuard-specific constraints' \
    )
    _describe -t commands 'mullvad relay set tunnel commands' commands "$@"
}
(( $+functions[_mullvad__tunnel_commands] )) ||
_mullvad__tunnel_commands() {
    local commands; commands=(
'openvpn:Manage options for OpenVPN tunnels' \
'wireguard:Manage options for Wireguard tunnels' \
'ipv6:' \
    )
    _describe -t commands 'mullvad tunnel commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__tunnel-protocol_commands] )) ||
_mullvad__relay__set__tunnel-protocol_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set tunnel-protocol commands' commands "$@"
}
(( $+functions[_mullvad__obfuscation__set__udp2tcp_commands] )) ||
_mullvad__obfuscation__set__udp2tcp_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad obfuscation set udp2tcp commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__openvpn__mssfix__unset_commands] )) ||
_mullvad__tunnel__openvpn__mssfix__unset_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel openvpn mssfix unset commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard__mtu__unset_commands] )) ||
_mullvad__tunnel__wireguard__mtu__unset_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad tunnel wireguard mtu unset commands' commands "$@"
}
(( $+functions[_mullvad__relay__update_commands] )) ||
_mullvad__relay__update_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay update commands' commands "$@"
}
(( $+functions[_mullvad__version_commands] )) ||
_mullvad__version_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad version commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__custom__wireguard_commands] )) ||
_mullvad__relay__set__custom__wireguard_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set custom wireguard commands' commands "$@"
}
(( $+functions[_mullvad__relay__set__tunnel__wireguard_commands] )) ||
_mullvad__relay__set__tunnel__wireguard_commands() {
    local commands; commands=()
    _describe -t commands 'mullvad relay set tunnel wireguard commands' commands "$@"
}
(( $+functions[_mullvad__tunnel__wireguard_commands] )) ||
_mullvad__tunnel__wireguard_commands() {
    local commands; commands=(
'mtu:Configure the MTU of the wireguard tunnel' \
'quantum-resistant-tunnel:EXPERIMENTAL: Enables quantum-resistant PSK exchange in the tunnel' \
'key:Manage your wireguard key' \
    )
    _describe -t commands 'mullvad tunnel wireguard commands' commands "$@"
}

_mullvad "$@"
