// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: prediction_service_messages.proto
// Protobuf C++ Version: 7.35.1

#include "prediction_service_messages.pb.h"

#include <algorithm>
#include <type_traits>
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/generated_message_tctable_impl.h"
#include "google/protobuf/internal_visibility.h"
#include "google/protobuf/extension_set.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/wire_format_lite.h"
#include "google/protobuf/io/zero_copy_stream_impl_lite.h"
// @@protoc_insertion_point(includes)

// Must be included last.
#include "google/protobuf/port_def.inc"
PROTOBUF_PRAGMA_INIT_SEG
namespace _pb = ::google::protobuf;
namespace _pbi = ::google::protobuf::internal;
namespace _fl = ::google::protobuf::internal::field_layout;
namespace permissions {
class StatsFeatures::_Internal {
 public:
  using HasBits = decltype(::std::declval<StatsFeatures>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_._has_bits_);
};

constexpr StatsFeatures::ParseTableT_ StatsFeatures::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_._has_bits_),
      0, // no _extensions_
      5, 56,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967264,  // skipmap
      offsetof(ParseTableT_, field_entries),
      5,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::StatsFeatures>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
      // optional float avg_deny_rate = 1;
      {::_pbi::TcParser::FastF32S1,
       {13, 0, 0,
        PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_deny_rate_)}},
      // optional float avg_grant_rate = 2;
      {::_pbi::TcParser::FastF32S1,
       {21, 1, 0,
        PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_grant_rate_)}},
      // optional float avg_dismiss_rate = 3;
      {::_pbi::TcParser::FastF32S1,
       {29, 2, 0,
        PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_dismiss_rate_)}},
      // optional float avg_ignore_rate = 4;
      {::_pbi::TcParser::FastF32S1,
       {37, 3, 0,
        PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_ignore_rate_)}},
      // optional int32 prompts_count = 5;
      {::_pbi::TcParser::FastV32S1,
       {40, 4, 0,
        PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.prompts_count_)}},
      {::_pbi::TcParser::MiniParse, {}},
      {::_pbi::TcParser::MiniParse, {}},
    }}, {{
      65535, 65535
    }}, {{
      // optional float avg_deny_rate = 1;
      {PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_deny_rate_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kFloat)},
      // optional float avg_grant_rate = 2;
      {PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_grant_rate_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kFloat)},
      // optional float avg_dismiss_rate = 3;
      {PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_dismiss_rate_), _Internal::kHasBitsOffset + 2, 0, (0 | ::_fl::kFcOptional | ::_fl::kFloat)},
      // optional float avg_ignore_rate = 4;
      {PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_ignore_rate_), _Internal::kHasBitsOffset + 3, 0, (0 | ::_fl::kFcOptional | ::_fl::kFloat)},
      // optional int32 prompts_count = 5;
      {PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.prompts_count_), _Internal::kHasBitsOffset + 4, 0, (0 | ::_fl::kFcOptional | ::_fl::kInt32)},
    }},
    // no aux_entries
    {{
    }},
  };
}


inline constexpr StatsFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        avg_deny_rate_{0},
        avg_grant_rate_{0},
        avg_dismiss_rate_{0},
        avg_ignore_rate_{0},
        prompts_count_{0} {}

template <typename>
constexpr StatsFeatures::StatsFeatures(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL StatsFeatures::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) StatsFeatures(arena);
}
constexpr auto StatsFeatures::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(StatsFeatures), alignof(StatsFeatures));
}
constexpr auto StatsFeatures::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &StatsFeatures::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<StatsFeatures>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &StatsFeatures::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<StatsFeatures>(), &StatsFeatures::ByteSizeLong,
              &StatsFeatures::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_._cached_size_),
          true,
      },
      "permissions.StatsFeatures",
  };
}
struct StatsFeaturesGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr StatsFeaturesGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 StatsFeatures_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(StatsFeatures::InternalGenerateClassData_(
            _default, &StatsFeatures_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<StatsFeatures>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~StatsFeaturesGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) StatsFeatures _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<StatsFeatures>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(StatsFeaturesGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST StatsFeaturesGlobalsTypeInternal StatsFeatures_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* StatsFeatures_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return StatsFeatures_globals_.GetClassData();
#else
  return StatsFeatures_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class SiteFeatures::_Internal {
 public:
  using HasBits = decltype(::std::declval<SiteFeatures>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(SiteFeatures, _impl_._has_bits_);
};

constexpr SiteFeatures::ParseTableT_ SiteFeatures::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(SiteFeatures, _impl_._has_bits_),
      0, // no _extensions_
      1, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967294,  // skipmap
      offsetof(ParseTableT_, field_entries),
      1,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::SiteFeatures>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // optional string origin = 1;
      {::_pbi::TcParser::FastBS1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(SiteFeatures, _impl_.origin_)}},
    }}, {{
      65535, 65535
    }}, {{
      // optional string origin = 1;
      {PROTOBUF_FIELD_OFFSET(SiteFeatures, _impl_.origin_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kBytes | ::_fl::kRepAString)},
    }},
    // no aux_entries
    {{
    }},
  };
}


inline constexpr SiteFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        origin_(
            &::google::protobuf::internal::fixed_address_empty_string,
            ::_pbi::ConstantInitialized()) {}

template <typename>
constexpr SiteFeatures::SiteFeatures(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL SiteFeatures::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) SiteFeatures(arena);
}
constexpr auto SiteFeatures::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(SiteFeatures), alignof(SiteFeatures));
}
constexpr auto SiteFeatures::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &SiteFeatures::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<SiteFeatures>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &SiteFeatures::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<SiteFeatures>(), &SiteFeatures::ByteSizeLong,
              &SiteFeatures::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(SiteFeatures, _impl_._cached_size_),
          true,
      },
      "permissions.SiteFeatures",
  };
}
struct SiteFeaturesGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr SiteFeaturesGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 SiteFeatures_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(SiteFeatures::InternalGenerateClassData_(
            _default, &SiteFeatures_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<SiteFeatures>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~SiteFeaturesGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) SiteFeatures _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<SiteFeatures>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(SiteFeaturesGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST SiteFeaturesGlobalsTypeInternal SiteFeatures_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* SiteFeatures_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return SiteFeatures_globals_.GetClassData();
#else
  return SiteFeatures_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class PermissionPrediction_NotificationPrediction::_Internal {
 public:
};

constexpr PermissionPrediction_NotificationPrediction::ParseTableT_ PermissionPrediction_NotificationPrediction::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(PermissionPrediction_NotificationPrediction,
                            _impl_._cached_size_),  // no hasbits
      0, // no _extensions_
      0, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967295,  // skipmap
      offsetof(ParseTableT_, field_names),  // no field_entries
      0,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::PermissionPrediction_NotificationPrediction>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
    }}, {{
      65535, 65535
    }}, // no field_entries, or aux_entries
    {{
    }},
  };
}


inline constexpr PermissionPrediction_NotificationPrediction::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0} {}

template <typename>
constexpr PermissionPrediction_NotificationPrediction::PermissionPrediction_NotificationPrediction(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL PermissionPrediction_NotificationPrediction::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) PermissionPrediction_NotificationPrediction(arena);
}
constexpr auto PermissionPrediction_NotificationPrediction::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(PermissionPrediction_NotificationPrediction), alignof(PermissionPrediction_NotificationPrediction));
}
constexpr auto PermissionPrediction_NotificationPrediction::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &PermissionPrediction_NotificationPrediction::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<PermissionPrediction_NotificationPrediction>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &PermissionPrediction_NotificationPrediction::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<PermissionPrediction_NotificationPrediction>(), &PermissionPrediction_NotificationPrediction::ByteSizeLong,
              &PermissionPrediction_NotificationPrediction::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(PermissionPrediction_NotificationPrediction, _impl_._cached_size_),
          true,
      },
      "permissions.PermissionPrediction.NotificationPrediction",
  };
}
struct PermissionPrediction_NotificationPredictionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr PermissionPrediction_NotificationPredictionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 PermissionPrediction_NotificationPrediction_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(PermissionPrediction_NotificationPrediction::InternalGenerateClassData_(
            _default, &PermissionPrediction_NotificationPrediction_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction_NotificationPrediction>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~PermissionPrediction_NotificationPredictionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) PermissionPrediction_NotificationPrediction _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction_NotificationPrediction>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(PermissionPrediction_NotificationPredictionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST PermissionPrediction_NotificationPredictionGlobalsTypeInternal PermissionPrediction_NotificationPrediction_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* PermissionPrediction_NotificationPrediction_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return PermissionPrediction_NotificationPrediction_globals_.GetClassData();
#else
  return PermissionPrediction_NotificationPrediction_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class PermissionPrediction_Likelihood::_Internal {
 public:
  using HasBits = decltype(::std::declval<PermissionPrediction_Likelihood>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(PermissionPrediction_Likelihood, _impl_._has_bits_);
};

constexpr PermissionPrediction_Likelihood::ParseTableT_ PermissionPrediction_Likelihood::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(PermissionPrediction_Likelihood, _impl_._has_bits_),
      0, // no _extensions_
      1, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967294,  // skipmap
      offsetof(ParseTableT_, field_entries),
      1,  // num_field_entries
      1,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::PermissionPrediction_Likelihood>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // optional .permissions.PermissionPrediction.Likelihood.DiscretizedLikelihood discretized_likelihood = 1;
      {::_pbi::TcParser::FastEr0S1,
       {8, 0, 5,
        PROTOBUF_FIELD_OFFSET(PermissionPrediction_Likelihood, _impl_.discretized_likelihood_)}},
    }}, {{
      65535, 65535
    }}, {{
      // optional .permissions.PermissionPrediction.Likelihood.DiscretizedLikelihood discretized_likelihood = 1;
      {PROTOBUF_FIELD_OFFSET(PermissionPrediction_Likelihood, _impl_.discretized_likelihood_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
    }},
    {{
        {0, 5},
    }},
    {{
    }},
  };
}


inline constexpr PermissionPrediction_Likelihood::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        discretized_likelihood_{static_cast< ::permissions::PermissionPrediction_Likelihood_DiscretizedLikelihood >(0)} {}

template <typename>
constexpr PermissionPrediction_Likelihood::PermissionPrediction_Likelihood(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL PermissionPrediction_Likelihood::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) PermissionPrediction_Likelihood(arena);
}
constexpr auto PermissionPrediction_Likelihood::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(PermissionPrediction_Likelihood), alignof(PermissionPrediction_Likelihood));
}
constexpr auto PermissionPrediction_Likelihood::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &PermissionPrediction_Likelihood::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<PermissionPrediction_Likelihood>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &PermissionPrediction_Likelihood::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<PermissionPrediction_Likelihood>(), &PermissionPrediction_Likelihood::ByteSizeLong,
              &PermissionPrediction_Likelihood::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(PermissionPrediction_Likelihood, _impl_._cached_size_),
          true,
      },
      "permissions.PermissionPrediction.Likelihood",
  };
}
struct PermissionPrediction_LikelihoodGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr PermissionPrediction_LikelihoodGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 PermissionPrediction_Likelihood_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(PermissionPrediction_Likelihood::InternalGenerateClassData_(
            _default, &PermissionPrediction_Likelihood_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction_Likelihood>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~PermissionPrediction_LikelihoodGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) PermissionPrediction_Likelihood _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction_Likelihood>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(PermissionPrediction_LikelihoodGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST PermissionPrediction_LikelihoodGlobalsTypeInternal PermissionPrediction_Likelihood_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* PermissionPrediction_Likelihood_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return PermissionPrediction_Likelihood_globals_.GetClassData();
#else
  return PermissionPrediction_Likelihood_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class PermissionPrediction_GeolocationPrediction::_Internal {
 public:
  using HasBits = decltype(::std::declval<PermissionPrediction_GeolocationPrediction>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(PermissionPrediction_GeolocationPrediction, _impl_._has_bits_);
};

constexpr PermissionPrediction_GeolocationPrediction::ParseTableT_ PermissionPrediction_GeolocationPrediction::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(PermissionPrediction_GeolocationPrediction, _impl_._has_bits_),
      0, // no _extensions_
      1, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967294,  // skipmap
      offsetof(ParseTableT_, field_entries),
      1,  // num_field_entries
      1,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::PermissionPrediction_GeolocationPrediction>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // optional .permissions.PermissionPrediction.GeolocationPrediction.Accuracy accuracy = 1;
      {::_pbi::TcParser::FastEr0S1,
       {8, 0, 2,
        PROTOBUF_FIELD_OFFSET(PermissionPrediction_GeolocationPrediction, _impl_.accuracy_)}},
    }}, {{
      65535, 65535
    }}, {{
      // optional .permissions.PermissionPrediction.GeolocationPrediction.Accuracy accuracy = 1;
      {PROTOBUF_FIELD_OFFSET(PermissionPrediction_GeolocationPrediction, _impl_.accuracy_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
    }},
    {{
        {0, 2},
    }},
    {{
    }},
  };
}


inline constexpr PermissionPrediction_GeolocationPrediction::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        accuracy_{static_cast< ::permissions::PermissionPrediction_GeolocationPrediction_Accuracy >(0)} {}

template <typename>
constexpr PermissionPrediction_GeolocationPrediction::PermissionPrediction_GeolocationPrediction(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL PermissionPrediction_GeolocationPrediction::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) PermissionPrediction_GeolocationPrediction(arena);
}
constexpr auto PermissionPrediction_GeolocationPrediction::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(PermissionPrediction_GeolocationPrediction), alignof(PermissionPrediction_GeolocationPrediction));
}
constexpr auto PermissionPrediction_GeolocationPrediction::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &PermissionPrediction_GeolocationPrediction::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<PermissionPrediction_GeolocationPrediction>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &PermissionPrediction_GeolocationPrediction::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<PermissionPrediction_GeolocationPrediction>(), &PermissionPrediction_GeolocationPrediction::ByteSizeLong,
              &PermissionPrediction_GeolocationPrediction::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(PermissionPrediction_GeolocationPrediction, _impl_._cached_size_),
          true,
      },
      "permissions.PermissionPrediction.GeolocationPrediction",
  };
}
struct PermissionPrediction_GeolocationPredictionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr PermissionPrediction_GeolocationPredictionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 PermissionPrediction_GeolocationPrediction_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(PermissionPrediction_GeolocationPrediction::InternalGenerateClassData_(
            _default, &PermissionPrediction_GeolocationPrediction_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction_GeolocationPrediction>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~PermissionPrediction_GeolocationPredictionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) PermissionPrediction_GeolocationPrediction _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction_GeolocationPrediction>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(PermissionPrediction_GeolocationPredictionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST PermissionPrediction_GeolocationPredictionGlobalsTypeInternal PermissionPrediction_GeolocationPrediction_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* PermissionPrediction_GeolocationPrediction_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return PermissionPrediction_GeolocationPrediction_globals_.GetClassData();
#else
  return PermissionPrediction_GeolocationPrediction_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class PermissionFeatures_NotificationPermission::_Internal {
 public:
};

constexpr PermissionFeatures_NotificationPermission::ParseTableT_ PermissionFeatures_NotificationPermission::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(PermissionFeatures_NotificationPermission,
                            _impl_._cached_size_),  // no hasbits
      0, // no _extensions_
      0, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967295,  // skipmap
      offsetof(ParseTableT_, field_names),  // no field_entries
      0,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::PermissionFeatures_NotificationPermission>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
    }}, {{
      65535, 65535
    }}, // no field_entries, or aux_entries
    {{
    }},
  };
}


inline constexpr PermissionFeatures_NotificationPermission::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0} {}

template <typename>
constexpr PermissionFeatures_NotificationPermission::PermissionFeatures_NotificationPermission(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL PermissionFeatures_NotificationPermission::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) PermissionFeatures_NotificationPermission(arena);
}
constexpr auto PermissionFeatures_NotificationPermission::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(PermissionFeatures_NotificationPermission), alignof(PermissionFeatures_NotificationPermission));
}
constexpr auto PermissionFeatures_NotificationPermission::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &PermissionFeatures_NotificationPermission::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<PermissionFeatures_NotificationPermission>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &PermissionFeatures_NotificationPermission::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<PermissionFeatures_NotificationPermission>(), &PermissionFeatures_NotificationPermission::ByteSizeLong,
              &PermissionFeatures_NotificationPermission::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(PermissionFeatures_NotificationPermission, _impl_._cached_size_),
          true,
      },
      "permissions.PermissionFeatures.NotificationPermission",
  };
}
struct PermissionFeatures_NotificationPermissionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr PermissionFeatures_NotificationPermissionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 PermissionFeatures_NotificationPermission_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(PermissionFeatures_NotificationPermission::InternalGenerateClassData_(
            _default, &PermissionFeatures_NotificationPermission_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<PermissionFeatures_NotificationPermission>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~PermissionFeatures_NotificationPermissionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) PermissionFeatures_NotificationPermission _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<PermissionFeatures_NotificationPermission>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(PermissionFeatures_NotificationPermissionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST PermissionFeatures_NotificationPermissionGlobalsTypeInternal PermissionFeatures_NotificationPermission_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* PermissionFeatures_NotificationPermission_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return PermissionFeatures_NotificationPermission_globals_.GetClassData();
#else
  return PermissionFeatures_NotificationPermission_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class PermissionFeatures_GeolocationPermission::_Internal {
 public:
};

constexpr PermissionFeatures_GeolocationPermission::ParseTableT_ PermissionFeatures_GeolocationPermission::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(PermissionFeatures_GeolocationPermission,
                            _impl_._cached_size_),  // no hasbits
      0, // no _extensions_
      0, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967295,  // skipmap
      offsetof(ParseTableT_, field_names),  // no field_entries
      0,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::PermissionFeatures_GeolocationPermission>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
    }}, {{
      65535, 65535
    }}, // no field_entries, or aux_entries
    {{
    }},
  };
}


inline constexpr PermissionFeatures_GeolocationPermission::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0} {}

template <typename>
constexpr PermissionFeatures_GeolocationPermission::PermissionFeatures_GeolocationPermission(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL PermissionFeatures_GeolocationPermission::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) PermissionFeatures_GeolocationPermission(arena);
}
constexpr auto PermissionFeatures_GeolocationPermission::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(PermissionFeatures_GeolocationPermission), alignof(PermissionFeatures_GeolocationPermission));
}
constexpr auto PermissionFeatures_GeolocationPermission::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &PermissionFeatures_GeolocationPermission::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<PermissionFeatures_GeolocationPermission>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &PermissionFeatures_GeolocationPermission::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<PermissionFeatures_GeolocationPermission>(), &PermissionFeatures_GeolocationPermission::ByteSizeLong,
              &PermissionFeatures_GeolocationPermission::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(PermissionFeatures_GeolocationPermission, _impl_._cached_size_),
          true,
      },
      "permissions.PermissionFeatures.GeolocationPermission",
  };
}
struct PermissionFeatures_GeolocationPermissionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr PermissionFeatures_GeolocationPermissionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 PermissionFeatures_GeolocationPermission_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(PermissionFeatures_GeolocationPermission::InternalGenerateClassData_(
            _default, &PermissionFeatures_GeolocationPermission_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<PermissionFeatures_GeolocationPermission>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~PermissionFeatures_GeolocationPermissionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) PermissionFeatures_GeolocationPermission _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<PermissionFeatures_GeolocationPermission>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(PermissionFeatures_GeolocationPermissionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST PermissionFeatures_GeolocationPermissionGlobalsTypeInternal PermissionFeatures_GeolocationPermission_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* PermissionFeatures_GeolocationPermission_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return PermissionFeatures_GeolocationPermission_globals_.GetClassData();
#else
  return PermissionFeatures_GeolocationPermission_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ClientFeatures_ExperimentConfig::_Internal {
 public:
  using HasBits = decltype(::std::declval<ClientFeatures_ExperimentConfig>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ClientFeatures_ExperimentConfig, _impl_._has_bits_);
};

constexpr ClientFeatures_ExperimentConfig::ParseTableT_ ClientFeatures_ExperimentConfig::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ClientFeatures_ExperimentConfig, _impl_._has_bits_),
      0, // no _extensions_
      1, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967294,  // skipmap
      offsetof(ParseTableT_, field_entries),
      1,  // num_field_entries
      0,  // num_aux_entries
      offsetof(ParseTableT_, field_names),  // no aux_entries
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::ClientFeatures_ExperimentConfig>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // optional int32 experiment_id = 1;
      {::_pbi::TcParser::FastV32S1,
       {8, 0, 0,
        PROTOBUF_FIELD_OFFSET(ClientFeatures_ExperimentConfig, _impl_.experiment_id_)}},
    }}, {{
      65535, 65535
    }}, {{
      // optional int32 experiment_id = 1;
      {PROTOBUF_FIELD_OFFSET(ClientFeatures_ExperimentConfig, _impl_.experiment_id_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kInt32)},
    }},
    // no aux_entries
    {{
    }},
  };
}


inline constexpr ClientFeatures_ExperimentConfig::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        experiment_id_{0} {}

template <typename>
constexpr ClientFeatures_ExperimentConfig::ClientFeatures_ExperimentConfig(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ClientFeatures_ExperimentConfig::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ClientFeatures_ExperimentConfig(arena);
}
constexpr auto ClientFeatures_ExperimentConfig::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(ClientFeatures_ExperimentConfig), alignof(ClientFeatures_ExperimentConfig));
}
constexpr auto ClientFeatures_ExperimentConfig::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ClientFeatures_ExperimentConfig::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ClientFeatures_ExperimentConfig>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ClientFeatures_ExperimentConfig::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ClientFeatures_ExperimentConfig>(), &ClientFeatures_ExperimentConfig::ByteSizeLong,
              &ClientFeatures_ExperimentConfig::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ClientFeatures_ExperimentConfig, _impl_._cached_size_),
          true,
      },
      "permissions.ClientFeatures.ExperimentConfig",
  };
}
struct ClientFeatures_ExperimentConfigGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ClientFeatures_ExperimentConfigGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ClientFeatures_ExperimentConfig_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ClientFeatures_ExperimentConfig::InternalGenerateClassData_(
            _default, &ClientFeatures_ExperimentConfig_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ClientFeatures_ExperimentConfig>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ClientFeatures_ExperimentConfigGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ClientFeatures_ExperimentConfig _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ClientFeatures_ExperimentConfig>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ClientFeatures_ExperimentConfigGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ClientFeatures_ExperimentConfigGlobalsTypeInternal ClientFeatures_ExperimentConfig_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ClientFeatures_ExperimentConfig_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ClientFeatures_ExperimentConfig_globals_.GetClassData();
#else
  return ClientFeatures_ExperimentConfig_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class PermissionPrediction::_Internal {
 public:
  using HasBits = decltype(::std::declval<PermissionPrediction>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(PermissionPrediction, _impl_._has_bits_);
  static constexpr ::int32_t kOneofCaseOffset =
      PROTOBUF_FIELD_OFFSET(::permissions::PermissionPrediction, _impl_._oneof_case_);
};

constexpr PermissionPrediction::ParseTableT_ PermissionPrediction::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(PermissionPrediction, _impl_._has_bits_),
      0, // no _extensions_
      3, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967288,  // skipmap
      offsetof(ParseTableT_, field_entries),
      3,  // num_field_entries
      3,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::PermissionPrediction>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // optional .permissions.PermissionPrediction.Likelihood grant_likelihood = 2;
      {::_pbi::TcParser::FastMtS1,
       {18, 0, 1,
        PROTOBUF_FIELD_OFFSET(PermissionPrediction, _impl_.grant_likelihood_)}},
    }}, {{
      65535, 65535
    }}, {{
      // .permissions.PermissionPrediction.NotificationPrediction notification_prediction = 1;
      {PROTOBUF_FIELD_OFFSET(PermissionPrediction, _impl_.prediction_type_.notification_prediction_), _Internal::kOneofCaseOffset + 0, 0, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional .permissions.PermissionPrediction.Likelihood grant_likelihood = 2;
      {PROTOBUF_FIELD_OFFSET(PermissionPrediction, _impl_.grant_likelihood_), _Internal::kHasBitsOffset + 0, 1, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // .permissions.PermissionPrediction.GeolocationPrediction geolocation_prediction = 3;
      {PROTOBUF_FIELD_OFFSET(PermissionPrediction, _impl_.prediction_type_.geolocation_prediction_), _Internal::kOneofCaseOffset + 0, 2, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::PermissionPrediction_NotificationPrediction>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::PermissionPrediction_NotificationPrediction_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::PermissionPrediction_Likelihood>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::PermissionPrediction_Likelihood_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::PermissionPrediction_GeolocationPrediction>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::PermissionPrediction_GeolocationPrediction_globals_},
        #endif
    }},
    {{
    }},
  };
}


inline constexpr PermissionPrediction::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        grant_likelihood_{nullptr},
        prediction_type_{},
        _oneof_case_{} {}

template <typename>
constexpr PermissionPrediction::PermissionPrediction(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL PermissionPrediction::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) PermissionPrediction(arena);
}
constexpr auto PermissionPrediction::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(PermissionPrediction), alignof(PermissionPrediction));
}
constexpr auto PermissionPrediction::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &PermissionPrediction::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<PermissionPrediction>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &PermissionPrediction::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<PermissionPrediction>(), &PermissionPrediction::ByteSizeLong,
              &PermissionPrediction::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(PermissionPrediction, _impl_._cached_size_),
          true,
      },
      "permissions.PermissionPrediction",
  };
}
struct PermissionPredictionGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr PermissionPredictionGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 PermissionPrediction_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(PermissionPrediction::InternalGenerateClassData_(
            _default, &PermissionPrediction_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~PermissionPredictionGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) PermissionPrediction _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<PermissionPrediction>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(PermissionPredictionGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST PermissionPredictionGlobalsTypeInternal PermissionPrediction_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* PermissionPrediction_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return PermissionPrediction_globals_.GetClassData();
#else
  return PermissionPrediction_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class PermissionFeatures::_Internal {
 public:
  using HasBits = decltype(::std::declval<PermissionFeatures>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_._has_bits_);
  static constexpr ::int32_t kOneofCaseOffset =
      PROTOBUF_FIELD_OFFSET(::permissions::PermissionFeatures, _impl_._oneof_case_);
};

constexpr PermissionFeatures::ParseTableT_ PermissionFeatures::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_._has_bits_),
      0, // no _extensions_
      4, 8,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967280,  // skipmap
      offsetof(ParseTableT_, field_entries),
      4,  // num_field_entries
      4,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::PermissionFeatures>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // optional .permissions.PermissionFeatures.Relevance permission_relevance = 4;
      {::_pbi::TcParser::FastEr0S1,
       {32, 1, 5,
        PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_relevance_)}},
      // optional .permissions.StatsFeatures permission_stats = 1;
      {::_pbi::TcParser::FastMtS1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_stats_)}},
    }}, {{
      65535, 65535
    }}, {{
      // optional .permissions.StatsFeatures permission_stats = 1;
      {PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_stats_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // .permissions.PermissionFeatures.NotificationPermission notification_permission = 2;
      {PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_type_.notification_permission_), _Internal::kOneofCaseOffset + 0, 1, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // .permissions.PermissionFeatures.GeolocationPermission geolocation_permission = 3;
      {PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_type_.geolocation_permission_), _Internal::kOneofCaseOffset + 0, 2, (0 | ::_fl::kFcOneof | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional .permissions.PermissionFeatures.Relevance permission_relevance = 4;
      {PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_relevance_), _Internal::kHasBitsOffset + 1, 3, (0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::StatsFeatures>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::StatsFeatures_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::PermissionFeatures_NotificationPermission>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::PermissionFeatures_NotificationPermission_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::PermissionFeatures_GeolocationPermission>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::PermissionFeatures_GeolocationPermission_globals_},
        #endif
        {0, 5},
    }},
    {{
    }},
  };
}


inline constexpr PermissionFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        permission_stats_{nullptr},
        permission_relevance_{static_cast< ::permissions::PermissionFeatures_Relevance >(0)},
        permission_type_{},
        _oneof_case_{} {}

template <typename>
constexpr PermissionFeatures::PermissionFeatures(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL PermissionFeatures::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) PermissionFeatures(arena);
}
constexpr auto PermissionFeatures::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(PermissionFeatures), alignof(PermissionFeatures));
}
constexpr auto PermissionFeatures::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &PermissionFeatures::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<PermissionFeatures>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &PermissionFeatures::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<PermissionFeatures>(), &PermissionFeatures::ByteSizeLong,
              &PermissionFeatures::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_._cached_size_),
          true,
      },
      "permissions.PermissionFeatures",
  };
}
struct PermissionFeaturesGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr PermissionFeaturesGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 PermissionFeatures_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(PermissionFeatures::InternalGenerateClassData_(
            _default, &PermissionFeatures_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<PermissionFeatures>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~PermissionFeaturesGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) PermissionFeatures _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<PermissionFeatures>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(PermissionFeaturesGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST PermissionFeaturesGlobalsTypeInternal PermissionFeatures_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* PermissionFeatures_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return PermissionFeatures_globals_.GetClassData();
#else
  return PermissionFeatures_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class ClientFeatures::_Internal {
 public:
  using HasBits = decltype(::std::declval<ClientFeatures>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_._has_bits_);
};

constexpr ClientFeatures::ParseTableT_ ClientFeatures::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_._has_bits_),
      0, // no _extensions_
      6, 56,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967232,  // skipmap
      offsetof(ParseTableT_, field_entries),
      6,  // num_field_entries
      6,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::ClientFeatures>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
      // optional .permissions.StatsFeatures client_stats = 1;
      {::_pbi::TcParser::FastMtS1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.client_stats_)}},
      // optional .permissions.ClientFeatures.Platform platform = 2;
      {::_pbi::TcParser::FastEr0S1,
       {16, 2, 2,
        PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.platform_)}},
      // optional .permissions.ClientFeatures.Gesture gesture = 3;
      {::_pbi::TcParser::FastEr0S1,
       {24, 3, 2,
        PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.gesture_)}},
      // optional .permissions.ClientFeatures.GestureEnum gesture_enum = 4;
      {::_pbi::TcParser::FastEr0S1,
       {32, 4, 1,
        PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.gesture_enum_)}},
      // optional .permissions.ClientFeatures.PlatformEnum platform_enum = 5;
      {::_pbi::TcParser::FastEvS1,
       {40, 5, 5,
        PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.platform_enum_)}},
      // optional .permissions.ClientFeatures.ExperimentConfig experiment_config = 6;
      {::_pbi::TcParser::FastMtS1,
       {50, 1, 1,
        PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.experiment_config_)}},
      {::_pbi::TcParser::MiniParse, {}},
    }}, {{
      65535, 65535
    }}, {{
      // optional .permissions.StatsFeatures client_stats = 1;
      {PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.client_stats_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional .permissions.ClientFeatures.Platform platform = 2;
      {PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.platform_), _Internal::kHasBitsOffset + 2, 2, (0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
      // optional .permissions.ClientFeatures.Gesture gesture = 3;
      {PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.gesture_), _Internal::kHasBitsOffset + 3, 3, (0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
      // optional .permissions.ClientFeatures.GestureEnum gesture_enum = 4;
      {PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.gesture_enum_), _Internal::kHasBitsOffset + 4, 4, (0 | ::_fl::kFcOptional | ::_fl::kEnumRange)},
      // optional .permissions.ClientFeatures.PlatformEnum platform_enum = 5;
      {PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.platform_enum_), _Internal::kHasBitsOffset + 5, 5, (0 | ::_fl::kFcOptional | ::_fl::kEnum)},
      // optional .permissions.ClientFeatures.ExperimentConfig experiment_config = 6;
      {PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.experiment_config_), _Internal::kHasBitsOffset + 1, 1, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::StatsFeatures>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::StatsFeatures_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::ClientFeatures_ExperimentConfig>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::ClientFeatures_ExperimentConfig_globals_},
        #endif
        {0, 2},
        {0, 2},
        {0, 1},
        {::_pbi::FieldAuxEnumData{}, ::permissions::ClientFeatures_PlatformEnum_internal_data_},
    }},
    {{
    }},
  };
}


inline constexpr ClientFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        client_stats_{nullptr},
        experiment_config_{nullptr},
        platform_{static_cast< ::permissions::ClientFeatures_Platform >(0)},
        gesture_{static_cast< ::permissions::ClientFeatures_Gesture >(0)},
        gesture_enum_{static_cast< ::permissions::ClientFeatures_GestureEnum >(0)},
        platform_enum_{static_cast< ::permissions::ClientFeatures_PlatformEnum >(0)} {}

template <typename>
constexpr ClientFeatures::ClientFeatures(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL ClientFeatures::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) ClientFeatures(arena);
}
constexpr auto ClientFeatures::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(ClientFeatures), alignof(ClientFeatures));
}
constexpr auto ClientFeatures::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &ClientFeatures::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<ClientFeatures>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &ClientFeatures::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<ClientFeatures>(), &ClientFeatures::ByteSizeLong,
              &ClientFeatures::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_._cached_size_),
          true,
      },
      "permissions.ClientFeatures",
  };
}
struct ClientFeaturesGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr ClientFeaturesGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 ClientFeatures_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(ClientFeatures::InternalGenerateClassData_(
            _default, &ClientFeatures_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<ClientFeatures>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~ClientFeaturesGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) ClientFeatures _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<ClientFeatures>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(ClientFeaturesGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST ClientFeaturesGlobalsTypeInternal ClientFeatures_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* ClientFeatures_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return ClientFeatures_globals_.GetClassData();
#else
  return ClientFeatures_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class GeneratePredictionsResponse::_Internal {
 public:
  using HasBits = decltype(::std::declval<GeneratePredictionsResponse>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(GeneratePredictionsResponse, _impl_._has_bits_);
};

constexpr GeneratePredictionsResponse::ParseTableT_ GeneratePredictionsResponse::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(GeneratePredictionsResponse, _impl_._has_bits_),
      0, // no _extensions_
      1, 0,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967294,  // skipmap
      offsetof(ParseTableT_, field_entries),
      1,  // num_field_entries
      1,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::GeneratePredictionsResponse>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      // repeated .permissions.PermissionPrediction prediction = 1;
      {::_pbi::TcParser::FastMtR1,
       {10, 0, 0,
        PROTOBUF_FIELD_OFFSET(GeneratePredictionsResponse, _impl_.prediction_)}},
    }}, {{
      65535, 65535
    }}, {{
      // repeated .permissions.PermissionPrediction prediction = 1;
      {PROTOBUF_FIELD_OFFSET(GeneratePredictionsResponse, _impl_.prediction_), _Internal::kHasBitsOffset + 0, 0, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::PermissionPrediction>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::PermissionPrediction_globals_},
        #endif
    }},
    {{
    }},
  };
}


inline constexpr GeneratePredictionsResponse::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        prediction_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::permissions::GeneratePredictionsResponse,
            PROTOBUF_FIELD_OFFSET(::permissions::GeneratePredictionsResponse, _impl_.prediction_)>()
         }
     {}

template <typename>
constexpr GeneratePredictionsResponse::GeneratePredictionsResponse(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL GeneratePredictionsResponse::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) GeneratePredictionsResponse(arena);
}
constexpr auto GeneratePredictionsResponse::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(GeneratePredictionsResponse), alignof(GeneratePredictionsResponse));
}
constexpr auto GeneratePredictionsResponse::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &GeneratePredictionsResponse::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<GeneratePredictionsResponse>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &GeneratePredictionsResponse::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<GeneratePredictionsResponse>(), &GeneratePredictionsResponse::ByteSizeLong,
              &GeneratePredictionsResponse::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(GeneratePredictionsResponse, _impl_._cached_size_),
          true,
      },
      "permissions.GeneratePredictionsResponse",
  };
}
struct GeneratePredictionsResponseGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr GeneratePredictionsResponseGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 GeneratePredictionsResponse_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(GeneratePredictionsResponse::InternalGenerateClassData_(
            _default, &GeneratePredictionsResponse_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<GeneratePredictionsResponse>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~GeneratePredictionsResponseGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) GeneratePredictionsResponse _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<GeneratePredictionsResponse>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(GeneratePredictionsResponseGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST GeneratePredictionsResponseGlobalsTypeInternal GeneratePredictionsResponse_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* GeneratePredictionsResponse_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return GeneratePredictionsResponse_globals_.GetClassData();
#else
  return GeneratePredictionsResponse_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
class GeneratePredictionsRequest::_Internal {
 public:
  using HasBits = decltype(::std::declval<GeneratePredictionsRequest>()._impl_._has_bits_);
  static constexpr ::int32_t kHasBitsOffset =
      8 * PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_._has_bits_);
};

constexpr GeneratePredictionsRequest::ParseTableT_ GeneratePredictionsRequest::InternalGenerateParseTable_(const ::_pbi::ClassData* class_data) {
  return ParseTableT_{
    {
      PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_._has_bits_),
      0, // no _extensions_
      3, 24,  // max_field_number, fast_idx_mask
      offsetof(ParseTableT_, field_lookup_table),
      4294967288,  // skipmap
      offsetof(ParseTableT_, field_entries),
      3,  // num_field_entries
      3,  // num_aux_entries
      offsetof(ParseTableT_, aux_entries),
      class_data,
      nullptr,  // post_loop_handler
      ::_pbi::TcParser::GenericFallbackLite,  // fallback
      #ifdef PROTOBUF_PREFETCH_PARSE_TABLE
      ::_pbi::TcParser::GetTable<::permissions::GeneratePredictionsRequest>(),  // to_prefetch
      #endif  // PROTOBUF_PREFETCH_PARSE_TABLE
    }, {{
      {::_pbi::TcParser::MiniParse, {}},
      // optional .permissions.ClientFeatures client_features = 1;
      {::_pbi::TcParser::FastMtS1,
       {10, 1, 0,
        PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.client_features_)}},
      // optional .permissions.SiteFeatures site_features = 2;
      {::_pbi::TcParser::FastMtS1,
       {18, 2, 1,
        PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.site_features_)}},
      // repeated .permissions.PermissionFeatures permission_features = 3;
      {::_pbi::TcParser::FastMtR1,
       {26, 0, 2,
        PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.permission_features_)}},
    }}, {{
      65535, 65535
    }}, {{
      // optional .permissions.ClientFeatures client_features = 1;
      {PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.client_features_), _Internal::kHasBitsOffset + 1, 0, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // optional .permissions.SiteFeatures site_features = 2;
      {PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.site_features_), _Internal::kHasBitsOffset + 2, 1, (0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
      // repeated .permissions.PermissionFeatures permission_features = 3;
      {PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.permission_features_), _Internal::kHasBitsOffset + 0, 2, (0 | ::_fl::kFcRepeated | ::_fl::kMessage | ::_fl::kTvTable)},
    }},
    {{
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::ClientFeatures>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::ClientFeatures_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::SiteFeatures>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::SiteFeatures_globals_},
        #endif
        #ifndef PROTOBUF_MESSAGE_GLOBALS
        {::_pbi::TcParser::GetTable<::permissions::PermissionFeatures>()},
        #else
        {::_pbi::FieldAuxMessageGlobals(), &::permissions::PermissionFeatures_globals_},
        #endif
    }},
    {{
    }},
  };
}


inline constexpr GeneratePredictionsRequest::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    ::_pbi::ConstantInitialized) noexcept
      : _cached_size_{0},
        permission_features_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::permissions::GeneratePredictionsRequest,
            PROTOBUF_FIELD_OFFSET(::permissions::GeneratePredictionsRequest, _impl_.permission_features_)>()
         }
        ,
        client_features_{nullptr},
        site_features_{nullptr} {}

template <typename>
constexpr GeneratePredictionsRequest::GeneratePredictionsRequest(::_pbi::ConstantInitialized,
                       const ::_pbi::ClassData* PROTOBUF_NONNULL class_data)
    : ::google::protobuf::MessageLite(
#if defined(PROTOBUF_CUSTOM_VTABLE)
          class_data
#endif  // PROTOBUF_CUSTOM_VTABLE
          ),
      _impl_(internal_visibility(), ::_pbi::ConstantInitialized()) {
}
inline void* PROTOBUF_NONNULL GeneratePredictionsRequest::PlacementNew_(
    const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
  return ::new (mem) GeneratePredictionsRequest(arena);
}
constexpr auto GeneratePredictionsRequest::InternalNewImpl_() {
  return ::google::protobuf::internal::MessageCreator::CopyInit(sizeof(GeneratePredictionsRequest), alignof(GeneratePredictionsRequest));
}
constexpr auto GeneratePredictionsRequest::InternalGenerateClassData_(
    const MessageLite& prototype,
    const ::google::protobuf::internal::TcParseTableBase* tc_table) {
  return ::google::protobuf::internal::ClassDataLite{
      {
          &prototype,
#ifndef PROTOBUF_MESSAGE_GLOBALS
          &_table_.header,
#else
          tc_table,
#endif
          nullptr,  // IsInitialized
          &GeneratePredictionsRequest::MergeImpl,
          ::google::protobuf::MessageLite::GetNewImpl<GeneratePredictionsRequest>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
          &GeneratePredictionsRequest::SharedDtor,
          ::google::protobuf::MessageLite::GetClearImpl<GeneratePredictionsRequest>(), &GeneratePredictionsRequest::ByteSizeLong,
              &GeneratePredictionsRequest::_InternalSerialize,
#endif  // PROTOBUF_CUSTOM_VTABLE
          PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_._cached_size_),
          true,
      },
      "permissions.GeneratePredictionsRequest",
  };
}
struct GeneratePredictionsRequestGlobalsTypeInternal : ::_pbi::MessageGlobalsBase {
  constexpr GeneratePredictionsRequestGlobalsTypeInternal()
      :
#ifndef PROTOBUF_MESSAGE_GLOBALS
        _default(::_pbi::ConstantInitialized{},
                 GeneratePredictionsRequest_class_data_.base())
#else   // !PROTOBUF_MESSAGE_GLOBALS
        MessageGlobalsBase(GeneratePredictionsRequest::InternalGenerateClassData_(
            _default, &GeneratePredictionsRequest_globals_._table.header)),
        _default(::_pbi::ConstantInitialized{}, GetClassData()),
        _table(::_pbi::PrivateAccess::GenerateParseTable<GeneratePredictionsRequest>(
            GetClassData()))
#endif  // PROTOBUF_MESSAGE_GLOBALS
  {
  }
  ~GeneratePredictionsRequestGlobalsTypeInternal() {}
  union {
    alignas(::_pbi::kMaxMessageAlignment) GeneratePredictionsRequest _default;
  };
#ifdef PROTOBUF_MESSAGE_GLOBALS
  decltype(::_pbi::PrivateAccess::GenerateParseTable<GeneratePredictionsRequest>(
      ::std::declval<const ::_pbi::ClassData*>())) _table;
#endif
};
#ifdef PROTOBUF_MESSAGE_GLOBALS
static_assert(PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequestGlobalsTypeInternal, _default) ==
              ::_pbi::MessageGlobalsBase::OffsetToDefault());
#endif  // PROTOBUF_MESSAGE_GLOBALS

PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PROTOBUF_MESSAGE_GLOBALS_CONST GeneratePredictionsRequestGlobalsTypeInternal GeneratePredictionsRequest_globals_
        PROTOBUF_MESSAGE_GLOBALS_SECTION(.data.rel.ro);
#if defined(PROTOBUF_CUSTOM_VTABLE)
namespace {
const ::_pbi::ClassData* GeneratePredictionsRequest_get_class_data() {
#ifdef PROTOBUF_MESSAGE_GLOBALS
  return GeneratePredictionsRequest_globals_.GetClassData();
#else
  return GeneratePredictionsRequest_class_data_.base();
#endif  // PROTOBUF_MESSAGE_GLOBALS
}
}  // namespace
#endif  // PROTOBUF_CUSTOM_VTABLE
}  // namespace permissions
namespace permissions {
PROTOBUF_CONSTINIT const uint32_t ClientFeatures_Platform_internal_data_[] = {
    196608u, 0u, };
static const char ClientFeatures_Platform_names[] = {
    "PLATFORM_DESKTOP"
    "PLATFORM_MOBILE"
    "PLATFORM_UNSPECIFIED"
};

static const ::google::protobuf::internal::EnumEntry ClientFeatures_Platform_entries[] = {
    {{&ClientFeatures_Platform_names[0], 16}, 2},
    {{&ClientFeatures_Platform_names[16], 15}, 1},
    {{&ClientFeatures_Platform_names[31], 20}, 0},
};

static const int ClientFeatures_Platform_entries_by_number[] = {
    2,  // 0 -> PLATFORM_UNSPECIFIED
    1,  // 1 -> PLATFORM_MOBILE
    0,  // 2 -> PLATFORM_DESKTOP
};

bool ClientFeatures_Platform_Parse(::absl::string_view name,
                                  ClientFeatures_Platform* PROTOBUF_NONNULL value) {
  int int_value;
  bool success = ::google::protobuf::internal::LookUpEnumValue(
      ClientFeatures_Platform_entries, 3, name, &int_value);
  if (success) {
    *value = static_cast<ClientFeatures_Platform>(int_value);
  }
  return success;
}
static ::google::protobuf::internal::ExplicitlyConstructed<::std::string>
    ClientFeatures_Platform_strings[3] = {};

const ::std::string& ClientFeatures_Platform_Name(ClientFeatures_Platform value) {
  static const bool kDummy = ::google::protobuf::internal::InitializeEnumStrings(
      ClientFeatures_Platform_entries, ClientFeatures_Platform_entries_by_number, 3,
      ClientFeatures_Platform_strings);
  (void)kDummy;

  int idx = ::google::protobuf::internal::LookUpEnumName(ClientFeatures_Platform_entries,
                                  ClientFeatures_Platform_entries_by_number,
                                  3, value);
  return idx == -1 ? ::google::protobuf::internal::GetEmptyString() : ClientFeatures_Platform_strings[idx].get();
}
PROTOBUF_CONSTINIT const uint32_t ClientFeatures_Gesture_internal_data_[] = {
    196608u, 0u, };
static const char ClientFeatures_Gesture_names[] = {
    "GESTURE"
    "GESTURE_UNSPECIFIED"
    "NO_GESTURE"
};

static const ::google::protobuf::internal::EnumEntry ClientFeatures_Gesture_entries[] = {
    {{&ClientFeatures_Gesture_names[0], 7}, 2},
    {{&ClientFeatures_Gesture_names[7], 19}, 0},
    {{&ClientFeatures_Gesture_names[26], 10}, 1},
};

static const int ClientFeatures_Gesture_entries_by_number[] = {
    1,  // 0 -> GESTURE_UNSPECIFIED
    2,  // 1 -> NO_GESTURE
    0,  // 2 -> GESTURE
};

bool ClientFeatures_Gesture_Parse(::absl::string_view name,
                                  ClientFeatures_Gesture* PROTOBUF_NONNULL value) {
  int int_value;
  bool success = ::google::protobuf::internal::LookUpEnumValue(
      ClientFeatures_Gesture_entries, 3, name, &int_value);
  if (success) {
    *value = static_cast<ClientFeatures_Gesture>(int_value);
  }
  return success;
}
static ::google::protobuf::internal::ExplicitlyConstructed<::std::string>
    ClientFeatures_Gesture_strings[3] = {};

const ::std::string& ClientFeatures_Gesture_Name(ClientFeatures_Gesture value) {
  static const bool kDummy = ::google::protobuf::internal::InitializeEnumStrings(
      ClientFeatures_Gesture_entries, ClientFeatures_Gesture_entries_by_number, 3,
      ClientFeatures_Gesture_strings);
  (void)kDummy;

  int idx = ::google::protobuf::internal::LookUpEnumName(ClientFeatures_Gesture_entries,
                                  ClientFeatures_Gesture_entries_by_number,
                                  3, value);
  return idx == -1 ? ::google::protobuf::internal::GetEmptyString() : ClientFeatures_Gesture_strings[idx].get();
}
PROTOBUF_CONSTINIT const uint32_t ClientFeatures_GestureEnum_internal_data_[] = {
    131072u, 0u, };
static const char ClientFeatures_GestureEnum_names[] = {
    "GESTURE_UNSPECIFIED_V2"
    "GESTURE_V2"
};

static const ::google::protobuf::internal::EnumEntry ClientFeatures_GestureEnum_entries[] = {
    {{&ClientFeatures_GestureEnum_names[0], 22}, 1},
    {{&ClientFeatures_GestureEnum_names[22], 10}, 0},
};

static const int ClientFeatures_GestureEnum_entries_by_number[] = {
    1,  // 0 -> GESTURE_V2
    0,  // 1 -> GESTURE_UNSPECIFIED_V2
};

bool ClientFeatures_GestureEnum_Parse(::absl::string_view name,
                                  ClientFeatures_GestureEnum* PROTOBUF_NONNULL value) {
  int int_value;
  bool success = ::google::protobuf::internal::LookUpEnumValue(
      ClientFeatures_GestureEnum_entries, 2, name, &int_value);
  if (success) {
    *value = static_cast<ClientFeatures_GestureEnum>(int_value);
  }
  return success;
}
static ::google::protobuf::internal::ExplicitlyConstructed<::std::string>
    ClientFeatures_GestureEnum_strings[2] = {};

const ::std::string& ClientFeatures_GestureEnum_Name(ClientFeatures_GestureEnum value) {
  static const bool kDummy = ::google::protobuf::internal::InitializeEnumStrings(
      ClientFeatures_GestureEnum_entries, ClientFeatures_GestureEnum_entries_by_number, 2,
      ClientFeatures_GestureEnum_strings);
  (void)kDummy;

  int idx = ::google::protobuf::internal::LookUpEnumName(ClientFeatures_GestureEnum_entries,
                                  ClientFeatures_GestureEnum_entries_by_number,
                                  2, value);
  return idx == -1 ? ::google::protobuf::internal::GetEmptyString() : ClientFeatures_GestureEnum_strings[idx].get();
}
PROTOBUF_CONSTINIT const uint32_t ClientFeatures_PlatformEnum_internal_data_[] = {
    131072u, 32u, 2u, };
static const char ClientFeatures_PlatformEnum_names[] = {
    "PLATFORM_DESKTOP_V2"
    "PLATFORM_MOBILE_V2"
    "PLATFORM_UNSPECIFIED_V2"
};

static const ::google::protobuf::internal::EnumEntry ClientFeatures_PlatformEnum_entries[] = {
    {{&ClientFeatures_PlatformEnum_names[0], 19}, 1},
    {{&ClientFeatures_PlatformEnum_names[19], 18}, 0},
    {{&ClientFeatures_PlatformEnum_names[37], 23}, 3},
};

static const int ClientFeatures_PlatformEnum_entries_by_number[] = {
    1,  // 0 -> PLATFORM_MOBILE_V2
    0,  // 1 -> PLATFORM_DESKTOP_V2
    2,  // 3 -> PLATFORM_UNSPECIFIED_V2
};

bool ClientFeatures_PlatformEnum_Parse(::absl::string_view name,
                                  ClientFeatures_PlatformEnum* PROTOBUF_NONNULL value) {
  int int_value;
  bool success = ::google::protobuf::internal::LookUpEnumValue(
      ClientFeatures_PlatformEnum_entries, 3, name, &int_value);
  if (success) {
    *value = static_cast<ClientFeatures_PlatformEnum>(int_value);
  }
  return success;
}
static ::google::protobuf::internal::ExplicitlyConstructed<::std::string>
    ClientFeatures_PlatformEnum_strings[3] = {};

const ::std::string& ClientFeatures_PlatformEnum_Name(ClientFeatures_PlatformEnum value) {
  static const bool kDummy = ::google::protobuf::internal::InitializeEnumStrings(
      ClientFeatures_PlatformEnum_entries, ClientFeatures_PlatformEnum_entries_by_number, 3,
      ClientFeatures_PlatformEnum_strings);
  (void)kDummy;

  int idx = ::google::protobuf::internal::LookUpEnumName(ClientFeatures_PlatformEnum_entries,
                                  ClientFeatures_PlatformEnum_entries_by_number,
                                  3, value);
  return idx == -1 ? ::google::protobuf::internal::GetEmptyString() : ClientFeatures_PlatformEnum_strings[idx].get();
}
PROTOBUF_CONSTINIT const uint32_t PermissionFeatures_Relevance_internal_data_[] = {
    393216u, 0u, };
static const char PermissionFeatures_Relevance_names[] = {
    "RELEVANCE_HIGH"
    "RELEVANCE_LOW"
    "RELEVANCE_MEDIUM"
    "RELEVANCE_UNSPECIFIED"
    "RELEVANCE_VERY_HIGH"
    "RELEVANCE_VERY_LOW"
};

static const ::google::protobuf::internal::EnumEntry PermissionFeatures_Relevance_entries[] = {
    {{&PermissionFeatures_Relevance_names[0], 14}, 4},
    {{&PermissionFeatures_Relevance_names[14], 13}, 2},
    {{&PermissionFeatures_Relevance_names[27], 16}, 3},
    {{&PermissionFeatures_Relevance_names[43], 21}, 0},
    {{&PermissionFeatures_Relevance_names[64], 19}, 5},
    {{&PermissionFeatures_Relevance_names[83], 18}, 1},
};

static const int PermissionFeatures_Relevance_entries_by_number[] = {
    3,  // 0 -> RELEVANCE_UNSPECIFIED
    5,  // 1 -> RELEVANCE_VERY_LOW
    1,  // 2 -> RELEVANCE_LOW
    2,  // 3 -> RELEVANCE_MEDIUM
    0,  // 4 -> RELEVANCE_HIGH
    4,  // 5 -> RELEVANCE_VERY_HIGH
};

bool PermissionFeatures_Relevance_Parse(::absl::string_view name,
                                  PermissionFeatures_Relevance* PROTOBUF_NONNULL value) {
  int int_value;
  bool success = ::google::protobuf::internal::LookUpEnumValue(
      PermissionFeatures_Relevance_entries, 6, name, &int_value);
  if (success) {
    *value = static_cast<PermissionFeatures_Relevance>(int_value);
  }
  return success;
}
static ::google::protobuf::internal::ExplicitlyConstructed<::std::string>
    PermissionFeatures_Relevance_strings[6] = {};

const ::std::string& PermissionFeatures_Relevance_Name(PermissionFeatures_Relevance value) {
  static const bool kDummy = ::google::protobuf::internal::InitializeEnumStrings(
      PermissionFeatures_Relevance_entries, PermissionFeatures_Relevance_entries_by_number, 6,
      PermissionFeatures_Relevance_strings);
  (void)kDummy;

  int idx = ::google::protobuf::internal::LookUpEnumName(PermissionFeatures_Relevance_entries,
                                  PermissionFeatures_Relevance_entries_by_number,
                                  6, value);
  return idx == -1 ? ::google::protobuf::internal::GetEmptyString() : PermissionFeatures_Relevance_strings[idx].get();
}
PROTOBUF_CONSTINIT const uint32_t PermissionPrediction_GeolocationPrediction_Accuracy_internal_data_[] = {
    196608u, 0u, };
static const char PermissionPrediction_GeolocationPrediction_Accuracy_names[] = {
    "ACCURACY_APPROXIMATE"
    "ACCURACY_PRECISE"
    "ACCURACY_UNSPECIFIED"
};

static const ::google::protobuf::internal::EnumEntry PermissionPrediction_GeolocationPrediction_Accuracy_entries[] = {
    {{&PermissionPrediction_GeolocationPrediction_Accuracy_names[0], 20}, 2},
    {{&PermissionPrediction_GeolocationPrediction_Accuracy_names[20], 16}, 1},
    {{&PermissionPrediction_GeolocationPrediction_Accuracy_names[36], 20}, 0},
};

static const int PermissionPrediction_GeolocationPrediction_Accuracy_entries_by_number[] = {
    2,  // 0 -> ACCURACY_UNSPECIFIED
    1,  // 1 -> ACCURACY_PRECISE
    0,  // 2 -> ACCURACY_APPROXIMATE
};

bool PermissionPrediction_GeolocationPrediction_Accuracy_Parse(::absl::string_view name,
                                  PermissionPrediction_GeolocationPrediction_Accuracy* PROTOBUF_NONNULL value) {
  int int_value;
  bool success = ::google::protobuf::internal::LookUpEnumValue(
      PermissionPrediction_GeolocationPrediction_Accuracy_entries, 3, name, &int_value);
  if (success) {
    *value = static_cast<PermissionPrediction_GeolocationPrediction_Accuracy>(int_value);
  }
  return success;
}
static ::google::protobuf::internal::ExplicitlyConstructed<::std::string>
    PermissionPrediction_GeolocationPrediction_Accuracy_strings[3] = {};

const ::std::string& PermissionPrediction_GeolocationPrediction_Accuracy_Name(PermissionPrediction_GeolocationPrediction_Accuracy value) {
  static const bool kDummy = ::google::protobuf::internal::InitializeEnumStrings(
      PermissionPrediction_GeolocationPrediction_Accuracy_entries, PermissionPrediction_GeolocationPrediction_Accuracy_entries_by_number, 3,
      PermissionPrediction_GeolocationPrediction_Accuracy_strings);
  (void)kDummy;

  int idx = ::google::protobuf::internal::LookUpEnumName(PermissionPrediction_GeolocationPrediction_Accuracy_entries,
                                  PermissionPrediction_GeolocationPrediction_Accuracy_entries_by_number,
                                  3, value);
  return idx == -1 ? ::google::protobuf::internal::GetEmptyString() : PermissionPrediction_GeolocationPrediction_Accuracy_strings[idx].get();
}
PROTOBUF_CONSTINIT const uint32_t PermissionPrediction_Likelihood_DiscretizedLikelihood_internal_data_[] = {
    393216u, 0u, };
static const char PermissionPrediction_Likelihood_DiscretizedLikelihood_names[] = {
    "DISCRETIZED_LIKELIHOOD_UNSPECIFIED"
    "LIKELY"
    "NEUTRAL"
    "UNLIKELY"
    "VERY_LIKELY"
    "VERY_UNLIKELY"
};

static const ::google::protobuf::internal::EnumEntry PermissionPrediction_Likelihood_DiscretizedLikelihood_entries[] = {
    {{&PermissionPrediction_Likelihood_DiscretizedLikelihood_names[0], 34}, 0},
    {{&PermissionPrediction_Likelihood_DiscretizedLikelihood_names[34], 6}, 4},
    {{&PermissionPrediction_Likelihood_DiscretizedLikelihood_names[40], 7}, 3},
    {{&PermissionPrediction_Likelihood_DiscretizedLikelihood_names[47], 8}, 2},
    {{&PermissionPrediction_Likelihood_DiscretizedLikelihood_names[55], 11}, 5},
    {{&PermissionPrediction_Likelihood_DiscretizedLikelihood_names[66], 13}, 1},
};

static const int PermissionPrediction_Likelihood_DiscretizedLikelihood_entries_by_number[] = {
    0,  // 0 -> DISCRETIZED_LIKELIHOOD_UNSPECIFIED
    5,  // 1 -> VERY_UNLIKELY
    3,  // 2 -> UNLIKELY
    2,  // 3 -> NEUTRAL
    1,  // 4 -> LIKELY
    4,  // 5 -> VERY_LIKELY
};

bool PermissionPrediction_Likelihood_DiscretizedLikelihood_Parse(::absl::string_view name,
                                  PermissionPrediction_Likelihood_DiscretizedLikelihood* PROTOBUF_NONNULL value) {
  int int_value;
  bool success = ::google::protobuf::internal::LookUpEnumValue(
      PermissionPrediction_Likelihood_DiscretizedLikelihood_entries, 6, name, &int_value);
  if (success) {
    *value = static_cast<PermissionPrediction_Likelihood_DiscretizedLikelihood>(int_value);
  }
  return success;
}
static ::google::protobuf::internal::ExplicitlyConstructed<::std::string>
    PermissionPrediction_Likelihood_DiscretizedLikelihood_strings[6] = {};

const ::std::string& PermissionPrediction_Likelihood_DiscretizedLikelihood_Name(PermissionPrediction_Likelihood_DiscretizedLikelihood value) {
  static const bool kDummy = ::google::protobuf::internal::InitializeEnumStrings(
      PermissionPrediction_Likelihood_DiscretizedLikelihood_entries, PermissionPrediction_Likelihood_DiscretizedLikelihood_entries_by_number, 6,
      PermissionPrediction_Likelihood_DiscretizedLikelihood_strings);
  (void)kDummy;

  int idx = ::google::protobuf::internal::LookUpEnumName(PermissionPrediction_Likelihood_DiscretizedLikelihood_entries,
                                  PermissionPrediction_Likelihood_DiscretizedLikelihood_entries_by_number,
                                  6, value);
  return idx == -1 ? ::google::protobuf::internal::GetEmptyString() : PermissionPrediction_Likelihood_DiscretizedLikelihood_strings[idx].get();
}
// ===================================================================

SiteFeatures::SiteFeatures(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, SiteFeatures_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.SiteFeatures)
}
PROTOBUF_NDEBUG_INLINE SiteFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::permissions::SiteFeatures& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        origin_(arena, from.origin_) {}

SiteFeatures::SiteFeatures(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const SiteFeatures& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, SiteFeatures_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SiteFeatures* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:permissions.SiteFeatures)
}
PROTOBUF_NDEBUG_INLINE SiteFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        origin_(arena) {}

inline void SiteFeatures::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
SiteFeatures::~SiteFeatures() {
  // @@protoc_insertion_point(destructor:permissions.SiteFeatures)
  SharedDtor(*this);
}
inline void SiteFeatures::SharedDtor(MessageLite& self) {
  SiteFeatures& this_ = static_cast<SiteFeatures&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.origin_.Destroy();
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite SiteFeatures_class_data_ =
    SiteFeatures::InternalGenerateClassData_(SiteFeatures_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
SiteFeatures::GetClassData() const {
  return SiteFeatures_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
SiteFeatures::GetClassData() const {
  return SiteFeatures_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const SiteFeatures::ParseTableT_
    SiteFeatures::_table_ =
        SiteFeatures::InternalGenerateParseTable_(SiteFeatures_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void SiteFeatures::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.SiteFeatures)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _impl_.origin_.ClearNonDefaultToEmpty();
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL SiteFeatures::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const SiteFeatures& this_ = static_cast<const SiteFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL SiteFeatures::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const SiteFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.SiteFeatures)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional string origin = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    const ::std::string& _s = this_._internal_origin();
    target = stream->WriteStringMaybeAliased(1, _s, target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.SiteFeatures)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t SiteFeatures::ByteSizeLong(const MessageLite& base) {
  const SiteFeatures& this_ = static_cast<const SiteFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t SiteFeatures::ByteSizeLong() const {
  const SiteFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.SiteFeatures)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

   {
    // optional string origin = 1;
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
                                      this_._internal_origin());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void SiteFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<SiteFeatures*>(&to_msg);
  auto& from = static_cast<const SiteFeatures&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.SiteFeatures)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _this->_internal_set_origin(from._internal_origin());
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void SiteFeatures::CopyFrom(const SiteFeatures& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.SiteFeatures)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void SiteFeatures::InternalSwap(SiteFeatures* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  auto* arena = GetArena();
  ABSL_DCHECK_EQ(arena, other->GetArena());
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::_pbi::ArenaStringPtr::InternalSwap(&_impl_.origin_, &other->_impl_.origin_, arena);
}

// ===================================================================

StatsFeatures::StatsFeatures(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, StatsFeatures_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.StatsFeatures)
}
StatsFeatures::StatsFeatures(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const StatsFeatures& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, StatsFeatures_get_class_data()),
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena),
#endif  // PROTOBUF_CUSTOM_VTABLE
      _impl_(from._impl_) {
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE StatsFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void StatsFeatures::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  ::memset(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, avg_deny_rate_),
           0,
           offsetof(Impl_, prompts_count_) -
               offsetof(Impl_, avg_deny_rate_) +
               sizeof(Impl_::prompts_count_));
}
StatsFeatures::~StatsFeatures() {
  // @@protoc_insertion_point(destructor:permissions.StatsFeatures)
  SharedDtor(*this);
}
inline void StatsFeatures::SharedDtor(MessageLite& self) {
  StatsFeatures& this_ = static_cast<StatsFeatures&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite StatsFeatures_class_data_ =
    StatsFeatures::InternalGenerateClassData_(StatsFeatures_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
StatsFeatures::GetClassData() const {
  return StatsFeatures_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
StatsFeatures::GetClassData() const {
  return StatsFeatures_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const StatsFeatures::ParseTableT_
    StatsFeatures::_table_ =
        StatsFeatures::InternalGenerateParseTable_(StatsFeatures_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void StatsFeatures::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.StatsFeatures)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000001fU)) {
    ::memset(&_impl_.avg_deny_rate_, 0, static_cast<::size_t>(
        reinterpret_cast<char*>(&_impl_.prompts_count_) -
        reinterpret_cast<char*>(&_impl_.avg_deny_rate_)) + sizeof(_impl_.prompts_count_));
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL StatsFeatures::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const StatsFeatures& this_ = static_cast<const StatsFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL StatsFeatures::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const StatsFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.StatsFeatures)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional float avg_deny_rate = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(
        1, this_._internal_avg_deny_rate(), target);
  }

  // optional float avg_grant_rate = 2;
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(
        2, this_._internal_avg_grant_rate(), target);
  }

  // optional float avg_dismiss_rate = 3;
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(
        3, this_._internal_avg_dismiss_rate(), target);
  }

  // optional float avg_ignore_rate = 4;
  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(
        4, this_._internal_avg_ignore_rate(), target);
  }

  // optional int32 prompts_count = 5;
  if (CheckHasBit(cached_has_bits, 0x00000010U)) {
    target =
        ::google::protobuf::internal::WireFormatLite::WriteInt32ToArrayWithField<5>(
            stream, this_._internal_prompts_count(), target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.StatsFeatures)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t StatsFeatures::ByteSizeLong(const MessageLite& base) {
  const StatsFeatures& this_ = static_cast<const StatsFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t StatsFeatures::ByteSizeLong() const {
  const StatsFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.StatsFeatures)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  total_size += ::absl::popcount(0x0000000fU & cached_has_bits) * 5;
   {
    // optional int32 prompts_count = 5;
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
          this_._internal_prompts_count());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void StatsFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<StatsFeatures*>(&to_msg);
  auto& from = static_cast<const StatsFeatures&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.StatsFeatures)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000001fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_impl_.avg_deny_rate_ = from._impl_.avg_deny_rate_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_impl_.avg_grant_rate_ = from._impl_.avg_grant_rate_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _this->_impl_.avg_dismiss_rate_ = from._impl_.avg_dismiss_rate_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _this->_impl_.avg_ignore_rate_ = from._impl_.avg_ignore_rate_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      _this->_impl_.prompts_count_ = from._impl_.prompts_count_;
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void StatsFeatures::CopyFrom(const StatsFeatures& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.StatsFeatures)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void StatsFeatures::InternalSwap(StatsFeatures* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::google::protobuf::internal::memswap<
      PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.prompts_count_)
      + sizeof(StatsFeatures::_impl_.prompts_count_)
      - PROTOBUF_FIELD_OFFSET(StatsFeatures, _impl_.avg_deny_rate_)>(
          reinterpret_cast<char*>(&_impl_.avg_deny_rate_),
          reinterpret_cast<char*>(&other->_impl_.avg_deny_rate_));
}

// ===================================================================

ClientFeatures_ExperimentConfig::ClientFeatures_ExperimentConfig(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ClientFeatures_ExperimentConfig_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.ClientFeatures.ExperimentConfig)
}
ClientFeatures_ExperimentConfig::ClientFeatures_ExperimentConfig(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const ClientFeatures_ExperimentConfig& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ClientFeatures_ExperimentConfig_get_class_data()),
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena),
#endif  // PROTOBUF_CUSTOM_VTABLE
      _impl_(from._impl_) {
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE ClientFeatures_ExperimentConfig::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void ClientFeatures_ExperimentConfig::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.experiment_id_ = {};
}
ClientFeatures_ExperimentConfig::~ClientFeatures_ExperimentConfig() {
  // @@protoc_insertion_point(destructor:permissions.ClientFeatures.ExperimentConfig)
  SharedDtor(*this);
}
inline void ClientFeatures_ExperimentConfig::SharedDtor(MessageLite& self) {
  ClientFeatures_ExperimentConfig& this_ = static_cast<ClientFeatures_ExperimentConfig&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ClientFeatures_ExperimentConfig_class_data_ =
    ClientFeatures_ExperimentConfig::InternalGenerateClassData_(ClientFeatures_ExperimentConfig_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ClientFeatures_ExperimentConfig::GetClassData() const {
  return ClientFeatures_ExperimentConfig_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ClientFeatures_ExperimentConfig::GetClassData() const {
  return ClientFeatures_ExperimentConfig_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ClientFeatures_ExperimentConfig::ParseTableT_
    ClientFeatures_ExperimentConfig::_table_ =
        ClientFeatures_ExperimentConfig::InternalGenerateParseTable_(ClientFeatures_ExperimentConfig_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ClientFeatures_ExperimentConfig::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.ClientFeatures.ExperimentConfig)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.experiment_id_ = 0;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ClientFeatures_ExperimentConfig::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ClientFeatures_ExperimentConfig& this_ = static_cast<const ClientFeatures_ExperimentConfig&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ClientFeatures_ExperimentConfig::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ClientFeatures_ExperimentConfig& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.ClientFeatures.ExperimentConfig)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional int32 experiment_id = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target =
        ::google::protobuf::internal::WireFormatLite::WriteInt32ToArrayWithField<1>(
            stream, this_._internal_experiment_id(), target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.ClientFeatures.ExperimentConfig)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ClientFeatures_ExperimentConfig::ByteSizeLong(const MessageLite& base) {
  const ClientFeatures_ExperimentConfig& this_ = static_cast<const ClientFeatures_ExperimentConfig&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ClientFeatures_ExperimentConfig::ByteSizeLong() const {
  const ClientFeatures_ExperimentConfig& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.ClientFeatures.ExperimentConfig)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

   {
    // optional int32 experiment_id = 1;
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += ::_pbi::WireFormatLite::Int32SizePlusOne(
          this_._internal_experiment_id());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ClientFeatures_ExperimentConfig::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ClientFeatures_ExperimentConfig*>(&to_msg);
  auto& from = static_cast<const ClientFeatures_ExperimentConfig&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.ClientFeatures.ExperimentConfig)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _this->_impl_.experiment_id_ = from._impl_.experiment_id_;
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void ClientFeatures_ExperimentConfig::CopyFrom(const ClientFeatures_ExperimentConfig& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.ClientFeatures.ExperimentConfig)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void ClientFeatures_ExperimentConfig::InternalSwap(ClientFeatures_ExperimentConfig* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  swap(_impl_.experiment_id_, other->_impl_.experiment_id_);
}

// ===================================================================

ClientFeatures::ClientFeatures(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ClientFeatures_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.ClientFeatures)
}
PROTOBUF_NDEBUG_INLINE ClientFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::permissions::ClientFeatures& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0} {}

ClientFeatures::ClientFeatures(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const ClientFeatures& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, ClientFeatures_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  ClientFeatures* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.client_stats_ = (CheckHasBit(cached_has_bits, 0x00000001U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.client_stats_)
                : nullptr;
  _impl_.experiment_config_ = (CheckHasBit(cached_has_bits, 0x00000002U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.experiment_config_)
                : nullptr;
  ::memcpy(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, platform_),
           reinterpret_cast<const char*>(&from._impl_) +
               offsetof(Impl_, platform_),
           offsetof(Impl_, platform_enum_) -
               offsetof(Impl_, platform_) +
               sizeof(Impl_::platform_enum_));

  // @@protoc_insertion_point(copy_constructor:permissions.ClientFeatures)
}
PROTOBUF_NDEBUG_INLINE ClientFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void ClientFeatures::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  ::memset(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, client_stats_),
           0,
           offsetof(Impl_, platform_enum_) -
               offsetof(Impl_, client_stats_) +
               sizeof(Impl_::platform_enum_));
}
ClientFeatures::~ClientFeatures() {
  // @@protoc_insertion_point(destructor:permissions.ClientFeatures)
  SharedDtor(*this);
}
inline void ClientFeatures::SharedDtor(MessageLite& self) {
  ClientFeatures& this_ = static_cast<ClientFeatures&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  delete this_._impl_.client_stats_;
  delete this_._impl_.experiment_config_;
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite ClientFeatures_class_data_ =
    ClientFeatures::InternalGenerateClassData_(ClientFeatures_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ClientFeatures::GetClassData() const {
  return ClientFeatures_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
ClientFeatures::GetClassData() const {
  return ClientFeatures_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const ClientFeatures::ParseTableT_
    ClientFeatures::_table_ =
        ClientFeatures::InternalGenerateParseTable_(ClientFeatures_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void ClientFeatures::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.ClientFeatures)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      ABSL_DCHECK(_impl_.client_stats_ != nullptr);
      _impl_.client_stats_->Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      ABSL_DCHECK(_impl_.experiment_config_ != nullptr);
      _impl_.experiment_config_->Clear();
    }
  }
  if (BatchCheckHasBit(cached_has_bits, 0x0000003cU)) {
    ::memset(&_impl_.platform_, 0, static_cast<::size_t>(
        reinterpret_cast<char*>(&_impl_.platform_enum_) -
        reinterpret_cast<char*>(&_impl_.platform_)) + sizeof(_impl_.platform_enum_));
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL ClientFeatures::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const ClientFeatures& this_ = static_cast<const ClientFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL ClientFeatures::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const ClientFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.ClientFeatures)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional .permissions.StatsFeatures client_stats = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        1, *this_._impl_.client_stats_, this_._impl_.client_stats_->GetCachedSize(), target,
        stream);
  }

  // optional .permissions.ClientFeatures.Platform platform = 2;
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        2, this_._internal_platform(), target);
  }

  // optional .permissions.ClientFeatures.Gesture gesture = 3;
  if (CheckHasBit(cached_has_bits, 0x00000008U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        3, this_._internal_gesture(), target);
  }

  // optional .permissions.ClientFeatures.GestureEnum gesture_enum = 4;
  if (CheckHasBit(cached_has_bits, 0x00000010U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        4, this_._internal_gesture_enum(), target);
  }

  // optional .permissions.ClientFeatures.PlatformEnum platform_enum = 5;
  if (CheckHasBit(cached_has_bits, 0x00000020U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        5, this_._internal_platform_enum(), target);
  }

  // optional .permissions.ClientFeatures.ExperimentConfig experiment_config = 6;
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        6, *this_._impl_.experiment_config_, this_._impl_.experiment_config_->GetCachedSize(), target,
        stream);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.ClientFeatures)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t ClientFeatures::ByteSizeLong(const MessageLite& base) {
  const ClientFeatures& this_ = static_cast<const ClientFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t ClientFeatures::ByteSizeLong() const {
  const ClientFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.ClientFeatures)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000003fU)) {
    // optional .permissions.StatsFeatures client_stats = 1;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.client_stats_);
    }
    // optional .permissions.ClientFeatures.ExperimentConfig experiment_config = 6;
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.experiment_config_);
    }
    // optional .permissions.ClientFeatures.Platform platform = 2;
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_platform());
    }
    // optional .permissions.ClientFeatures.Gesture gesture = 3;
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_gesture());
    }
    // optional .permissions.ClientFeatures.GestureEnum gesture_enum = 4;
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_gesture_enum());
    }
    // optional .permissions.ClientFeatures.PlatformEnum platform_enum = 5;
    if (CheckHasBit(cached_has_bits, 0x00000020U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_platform_enum());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void ClientFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<ClientFeatures*>(&to_msg);
  auto& from = static_cast<const ClientFeatures&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.ClientFeatures)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x0000003fU)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      ABSL_DCHECK(from._impl_.client_stats_ != nullptr);
      if (_this->_impl_.client_stats_ == nullptr) {
        _this->_impl_.client_stats_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.client_stats_);
      } else {
        _this->_impl_.client_stats_->MergeFrom(*from._impl_.client_stats_);
      }
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      ABSL_DCHECK(from._impl_.experiment_config_ != nullptr);
      if (_this->_impl_.experiment_config_ == nullptr) {
        _this->_impl_.experiment_config_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.experiment_config_);
      } else {
        _this->_impl_.experiment_config_->MergeFrom(*from._impl_.experiment_config_);
      }
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      _this->_impl_.platform_ = from._impl_.platform_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000008U)) {
      _this->_impl_.gesture_ = from._impl_.gesture_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000010U)) {
      _this->_impl_.gesture_enum_ = from._impl_.gesture_enum_;
    }
    if (CheckHasBit(cached_has_bits, 0x00000020U)) {
      _this->_impl_.platform_enum_ = from._impl_.platform_enum_;
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void ClientFeatures::CopyFrom(const ClientFeatures& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.ClientFeatures)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void ClientFeatures::InternalSwap(ClientFeatures* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::google::protobuf::internal::memswap<
      PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.platform_enum_)
      + sizeof(ClientFeatures::_impl_.platform_enum_)
      - PROTOBUF_FIELD_OFFSET(ClientFeatures, _impl_.client_stats_)>(
          reinterpret_cast<char*>(&_impl_.client_stats_),
          reinterpret_cast<char*>(&other->_impl_.client_stats_));
}

// ===================================================================

PermissionFeatures_NotificationPermission::PermissionFeatures_NotificationPermission(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionFeatures_NotificationPermission_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.PermissionFeatures.NotificationPermission)
}
PermissionFeatures_NotificationPermission::PermissionFeatures_NotificationPermission(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const PermissionFeatures_NotificationPermission& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionFeatures_NotificationPermission_get_class_data()),
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena),
#endif  // PROTOBUF_CUSTOM_VTABLE
      _impl_(from._impl_) {
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE PermissionFeatures_NotificationPermission::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void PermissionFeatures_NotificationPermission::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
PermissionFeatures_NotificationPermission::~PermissionFeatures_NotificationPermission() {
  // @@protoc_insertion_point(destructor:permissions.PermissionFeatures.NotificationPermission)
  SharedDtor(*this);
}
inline void PermissionFeatures_NotificationPermission::SharedDtor(MessageLite& self) {
  PermissionFeatures_NotificationPermission& this_ = static_cast<PermissionFeatures_NotificationPermission&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite PermissionFeatures_NotificationPermission_class_data_ =
    PermissionFeatures_NotificationPermission::InternalGenerateClassData_(PermissionFeatures_NotificationPermission_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionFeatures_NotificationPermission::GetClassData() const {
  return PermissionFeatures_NotificationPermission_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionFeatures_NotificationPermission::GetClassData() const {
  return PermissionFeatures_NotificationPermission_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const PermissionFeatures_NotificationPermission::ParseTableT_
    PermissionFeatures_NotificationPermission::_table_ =
        PermissionFeatures_NotificationPermission::InternalGenerateParseTable_(PermissionFeatures_NotificationPermission_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void PermissionFeatures_NotificationPermission::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.PermissionFeatures.NotificationPermission)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL PermissionFeatures_NotificationPermission::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const PermissionFeatures_NotificationPermission& this_ = static_cast<const PermissionFeatures_NotificationPermission&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL PermissionFeatures_NotificationPermission::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const PermissionFeatures_NotificationPermission& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.PermissionFeatures.NotificationPermission)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.PermissionFeatures.NotificationPermission)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t PermissionFeatures_NotificationPermission::ByteSizeLong(const MessageLite& base) {
  const PermissionFeatures_NotificationPermission& this_ = static_cast<const PermissionFeatures_NotificationPermission&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t PermissionFeatures_NotificationPermission::ByteSizeLong() const {
  const PermissionFeatures_NotificationPermission& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.PermissionFeatures.NotificationPermission)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void PermissionFeatures_NotificationPermission::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<PermissionFeatures_NotificationPermission*>(&to_msg);
  auto& from = static_cast<const PermissionFeatures_NotificationPermission&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.PermissionFeatures.NotificationPermission)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void PermissionFeatures_NotificationPermission::CopyFrom(const PermissionFeatures_NotificationPermission& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.PermissionFeatures.NotificationPermission)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void PermissionFeatures_NotificationPermission::InternalSwap(PermissionFeatures_NotificationPermission* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
}

// ===================================================================

PermissionFeatures_GeolocationPermission::PermissionFeatures_GeolocationPermission(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionFeatures_GeolocationPermission_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.PermissionFeatures.GeolocationPermission)
}
PermissionFeatures_GeolocationPermission::PermissionFeatures_GeolocationPermission(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const PermissionFeatures_GeolocationPermission& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionFeatures_GeolocationPermission_get_class_data()),
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena),
#endif  // PROTOBUF_CUSTOM_VTABLE
      _impl_(from._impl_) {
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE PermissionFeatures_GeolocationPermission::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void PermissionFeatures_GeolocationPermission::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
PermissionFeatures_GeolocationPermission::~PermissionFeatures_GeolocationPermission() {
  // @@protoc_insertion_point(destructor:permissions.PermissionFeatures.GeolocationPermission)
  SharedDtor(*this);
}
inline void PermissionFeatures_GeolocationPermission::SharedDtor(MessageLite& self) {
  PermissionFeatures_GeolocationPermission& this_ = static_cast<PermissionFeatures_GeolocationPermission&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite PermissionFeatures_GeolocationPermission_class_data_ =
    PermissionFeatures_GeolocationPermission::InternalGenerateClassData_(PermissionFeatures_GeolocationPermission_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionFeatures_GeolocationPermission::GetClassData() const {
  return PermissionFeatures_GeolocationPermission_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionFeatures_GeolocationPermission::GetClassData() const {
  return PermissionFeatures_GeolocationPermission_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const PermissionFeatures_GeolocationPermission::ParseTableT_
    PermissionFeatures_GeolocationPermission::_table_ =
        PermissionFeatures_GeolocationPermission::InternalGenerateParseTable_(PermissionFeatures_GeolocationPermission_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void PermissionFeatures_GeolocationPermission::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.PermissionFeatures.GeolocationPermission)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL PermissionFeatures_GeolocationPermission::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const PermissionFeatures_GeolocationPermission& this_ = static_cast<const PermissionFeatures_GeolocationPermission&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL PermissionFeatures_GeolocationPermission::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const PermissionFeatures_GeolocationPermission& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.PermissionFeatures.GeolocationPermission)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.PermissionFeatures.GeolocationPermission)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t PermissionFeatures_GeolocationPermission::ByteSizeLong(const MessageLite& base) {
  const PermissionFeatures_GeolocationPermission& this_ = static_cast<const PermissionFeatures_GeolocationPermission&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t PermissionFeatures_GeolocationPermission::ByteSizeLong() const {
  const PermissionFeatures_GeolocationPermission& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.PermissionFeatures.GeolocationPermission)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void PermissionFeatures_GeolocationPermission::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<PermissionFeatures_GeolocationPermission*>(&to_msg);
  auto& from = static_cast<const PermissionFeatures_GeolocationPermission&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.PermissionFeatures.GeolocationPermission)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void PermissionFeatures_GeolocationPermission::CopyFrom(const PermissionFeatures_GeolocationPermission& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.PermissionFeatures.GeolocationPermission)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void PermissionFeatures_GeolocationPermission::InternalSwap(PermissionFeatures_GeolocationPermission* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
}

// ===================================================================

void PermissionFeatures::set_allocated_notification_permission(::permissions::PermissionFeatures_NotificationPermission* PROTOBUF_NULLABLE notification_permission) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_permission_type();
  if (notification_permission) {
    ::google::protobuf::Arena* submessage_arena = notification_permission->GetArena();
    if (message_arena != submessage_arena) {
      notification_permission = ::google::protobuf::internal::GetOwnedMessage(message_arena, notification_permission, submessage_arena);
    }
    set_has_notification_permission();
    _impl_.permission_type_.notification_permission_ = notification_permission;
  }
  // @@protoc_insertion_point(field_set_allocated:permissions.PermissionFeatures.notification_permission)
}
void PermissionFeatures::set_allocated_geolocation_permission(::permissions::PermissionFeatures_GeolocationPermission* PROTOBUF_NULLABLE geolocation_permission) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_permission_type();
  if (geolocation_permission) {
    ::google::protobuf::Arena* submessage_arena = geolocation_permission->GetArena();
    if (message_arena != submessage_arena) {
      geolocation_permission = ::google::protobuf::internal::GetOwnedMessage(message_arena, geolocation_permission, submessage_arena);
    }
    set_has_geolocation_permission();
    _impl_.permission_type_.geolocation_permission_ = geolocation_permission;
  }
  // @@protoc_insertion_point(field_set_allocated:permissions.PermissionFeatures.geolocation_permission)
}
PermissionFeatures::PermissionFeatures(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionFeatures_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.PermissionFeatures)
}
PROTOBUF_NDEBUG_INLINE PermissionFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::permissions::PermissionFeatures& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        permission_type_{},
        _oneof_case_{from._oneof_case_[0]} {}

PermissionFeatures::PermissionFeatures(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const PermissionFeatures& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionFeatures_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  PermissionFeatures* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.permission_stats_ = (CheckHasBit(cached_has_bits, 0x00000001U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.permission_stats_)
                : nullptr;
  _impl_.permission_relevance_ = from._impl_.permission_relevance_;
  switch (permission_type_case()) {
    case PERMISSION_TYPE_NOT_SET:
      break;
      case kNotificationPermission:
        _impl_.permission_type_.notification_permission_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.permission_type_.notification_permission_);
        break;
      case kGeolocationPermission:
        _impl_.permission_type_.geolocation_permission_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.permission_type_.geolocation_permission_);
        break;
  }

  // @@protoc_insertion_point(copy_constructor:permissions.PermissionFeatures)
}
PROTOBUF_NDEBUG_INLINE PermissionFeatures::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        permission_type_{},
        _oneof_case_{} {}

inline void PermissionFeatures::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  ::memset(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, permission_stats_),
           0,
           offsetof(Impl_, permission_relevance_) -
               offsetof(Impl_, permission_stats_) +
               sizeof(Impl_::permission_relevance_));
}
PermissionFeatures::~PermissionFeatures() {
  // @@protoc_insertion_point(destructor:permissions.PermissionFeatures)
  SharedDtor(*this);
}
inline void PermissionFeatures::SharedDtor(MessageLite& self) {
  PermissionFeatures& this_ = static_cast<PermissionFeatures&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  delete this_._impl_.permission_stats_;
  if (this_.has_permission_type()) {
    this_.clear_permission_type();
  }
  this_._impl_.~Impl_();
}

void PermissionFeatures::clear_permission_type() {
// @@protoc_insertion_point(one_of_clear_start:permissions.PermissionFeatures)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  switch (permission_type_case()) {
    case kNotificationPermission: {
      if (GetArena() == nullptr) {
        delete _impl_.permission_type_.notification_permission_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        if (_impl_.permission_type_.notification_permission_ != nullptr) {
          _impl_.permission_type_.notification_permission_->Clear();
        }
      }
      break;
    }
    case kGeolocationPermission: {
      if (GetArena() == nullptr) {
        delete _impl_.permission_type_.geolocation_permission_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        if (_impl_.permission_type_.geolocation_permission_ != nullptr) {
          _impl_.permission_type_.geolocation_permission_->Clear();
        }
      }
      break;
    }
    case PERMISSION_TYPE_NOT_SET: {
      break;
    }
  }
  _impl_._oneof_case_[0] = PERMISSION_TYPE_NOT_SET;
}


#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite PermissionFeatures_class_data_ =
    PermissionFeatures::InternalGenerateClassData_(PermissionFeatures_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionFeatures::GetClassData() const {
  return PermissionFeatures_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionFeatures::GetClassData() const {
  return PermissionFeatures_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const PermissionFeatures::ParseTableT_
    PermissionFeatures::_table_ =
        PermissionFeatures::InternalGenerateParseTable_(PermissionFeatures_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void PermissionFeatures::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.PermissionFeatures)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    ABSL_DCHECK(_impl_.permission_stats_ != nullptr);
    _impl_.permission_stats_->Clear();
  }
  _impl_.permission_relevance_ = 0;
  clear_permission_type();
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL PermissionFeatures::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const PermissionFeatures& this_ = static_cast<const PermissionFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL PermissionFeatures::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const PermissionFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.PermissionFeatures)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional .permissions.StatsFeatures permission_stats = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        1, *this_._impl_.permission_stats_, this_._impl_.permission_stats_->GetCachedSize(), target,
        stream);
  }

  switch (this_.permission_type_case()) {
    case kNotificationPermission: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          2, *this_._impl_.permission_type_.notification_permission_, this_._impl_.permission_type_.notification_permission_->GetCachedSize(), target,
          stream);
      break;
    }
    case kGeolocationPermission: {
      target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
          3, *this_._impl_.permission_type_.geolocation_permission_, this_._impl_.permission_type_.geolocation_permission_->GetCachedSize(), target,
          stream);
      break;
    }
    default:
      break;
  }
  // optional .permissions.PermissionFeatures.Relevance permission_relevance = 4;
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        4, this_._internal_permission_relevance(), target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.PermissionFeatures)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t PermissionFeatures::ByteSizeLong(const MessageLite& base) {
  const PermissionFeatures& this_ = static_cast<const PermissionFeatures&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t PermissionFeatures::ByteSizeLong() const {
  const PermissionFeatures& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.PermissionFeatures)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    // optional .permissions.StatsFeatures permission_stats = 1;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.permission_stats_);
    }
    // optional .permissions.PermissionFeatures.Relevance permission_relevance = 4;
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_permission_relevance());
    }
  }
  switch (this_.permission_type_case()) {
    // .permissions.PermissionFeatures.NotificationPermission notification_permission = 2;
    case kNotificationPermission: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.permission_type_.notification_permission_);
      break;
    }
    // .permissions.PermissionFeatures.GeolocationPermission geolocation_permission = 3;
    case kGeolocationPermission: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.permission_type_.geolocation_permission_);
      break;
    }
    case PERMISSION_TYPE_NOT_SET: {
      break;
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void PermissionFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<PermissionFeatures*>(&to_msg);
  auto& from = static_cast<const PermissionFeatures&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.PermissionFeatures)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000003U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      ABSL_DCHECK(from._impl_.permission_stats_ != nullptr);
      if (_this->_impl_.permission_stats_ == nullptr) {
        _this->_impl_.permission_stats_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.permission_stats_);
      } else {
        _this->_impl_.permission_stats_->MergeFrom(*from._impl_.permission_stats_);
      }
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      _this->_impl_.permission_relevance_ = from._impl_.permission_relevance_;
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  if (const uint32_t oneof_from_case =
          from._impl_._oneof_case_[0]) {
    const uint32_t oneof_to_case = _this->_impl_._oneof_case_[0];
    const bool oneof_needs_init = oneof_to_case != oneof_from_case;
    if (oneof_needs_init) {
      if (oneof_to_case != 0) {
        _this->clear_permission_type();
      }
      _this->_impl_._oneof_case_[0] = oneof_from_case;
    }

    switch (oneof_from_case) {
      case kNotificationPermission: {
        if (oneof_needs_init) {
          _this->_impl_.permission_type_.notification_permission_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.permission_type_.notification_permission_);
        } else {
          _this->_impl_.permission_type_.notification_permission_->MergeFrom(*from._impl_.permission_type_.notification_permission_);
        }
        break;
      }
      case kGeolocationPermission: {
        if (oneof_needs_init) {
          _this->_impl_.permission_type_.geolocation_permission_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.permission_type_.geolocation_permission_);
        } else {
          _this->_impl_.permission_type_.geolocation_permission_->MergeFrom(*from._impl_.permission_type_.geolocation_permission_);
        }
        break;
      }
      case PERMISSION_TYPE_NOT_SET:
        break;
    }
  }
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void PermissionFeatures::CopyFrom(const PermissionFeatures& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.PermissionFeatures)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void PermissionFeatures::InternalSwap(PermissionFeatures* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::google::protobuf::internal::memswap<
      PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_relevance_)
      + sizeof(PermissionFeatures::_impl_.permission_relevance_)
      - PROTOBUF_FIELD_OFFSET(PermissionFeatures, _impl_.permission_stats_)>(
          reinterpret_cast<char*>(&_impl_.permission_stats_),
          reinterpret_cast<char*>(&other->_impl_.permission_stats_));
  swap(_impl_.permission_type_, other->_impl_.permission_type_);
  swap(_impl_._oneof_case_[0], other->_impl_._oneof_case_[0]);
}

// ===================================================================

PermissionPrediction_NotificationPrediction::PermissionPrediction_NotificationPrediction(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_NotificationPrediction_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.PermissionPrediction.NotificationPrediction)
}
PermissionPrediction_NotificationPrediction::PermissionPrediction_NotificationPrediction(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const PermissionPrediction_NotificationPrediction& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_NotificationPrediction_get_class_data()),
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena),
#endif  // PROTOBUF_CUSTOM_VTABLE
      _impl_(from._impl_) {
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE PermissionPrediction_NotificationPrediction::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void PermissionPrediction_NotificationPrediction::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
PermissionPrediction_NotificationPrediction::~PermissionPrediction_NotificationPrediction() {
  // @@protoc_insertion_point(destructor:permissions.PermissionPrediction.NotificationPrediction)
  SharedDtor(*this);
}
inline void PermissionPrediction_NotificationPrediction::SharedDtor(MessageLite& self) {
  PermissionPrediction_NotificationPrediction& this_ = static_cast<PermissionPrediction_NotificationPrediction&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite PermissionPrediction_NotificationPrediction_class_data_ =
    PermissionPrediction_NotificationPrediction::InternalGenerateClassData_(PermissionPrediction_NotificationPrediction_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction_NotificationPrediction::GetClassData() const {
  return PermissionPrediction_NotificationPrediction_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction_NotificationPrediction::GetClassData() const {
  return PermissionPrediction_NotificationPrediction_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const PermissionPrediction_NotificationPrediction::ParseTableT_
    PermissionPrediction_NotificationPrediction::_table_ =
        PermissionPrediction_NotificationPrediction::InternalGenerateParseTable_(PermissionPrediction_NotificationPrediction_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void PermissionPrediction_NotificationPrediction::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.PermissionPrediction.NotificationPrediction)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL PermissionPrediction_NotificationPrediction::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const PermissionPrediction_NotificationPrediction& this_ = static_cast<const PermissionPrediction_NotificationPrediction&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL PermissionPrediction_NotificationPrediction::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const PermissionPrediction_NotificationPrediction& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.PermissionPrediction.NotificationPrediction)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.PermissionPrediction.NotificationPrediction)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t PermissionPrediction_NotificationPrediction::ByteSizeLong(const MessageLite& base) {
  const PermissionPrediction_NotificationPrediction& this_ = static_cast<const PermissionPrediction_NotificationPrediction&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t PermissionPrediction_NotificationPrediction::ByteSizeLong() const {
  const PermissionPrediction_NotificationPrediction& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.PermissionPrediction.NotificationPrediction)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void PermissionPrediction_NotificationPrediction::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<PermissionPrediction_NotificationPrediction*>(&to_msg);
  auto& from = static_cast<const PermissionPrediction_NotificationPrediction&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.PermissionPrediction.NotificationPrediction)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void PermissionPrediction_NotificationPrediction::CopyFrom(const PermissionPrediction_NotificationPrediction& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.PermissionPrediction.NotificationPrediction)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void PermissionPrediction_NotificationPrediction::InternalSwap(PermissionPrediction_NotificationPrediction* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
}

// ===================================================================

PermissionPrediction_GeolocationPrediction::PermissionPrediction_GeolocationPrediction(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_GeolocationPrediction_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.PermissionPrediction.GeolocationPrediction)
}
PermissionPrediction_GeolocationPrediction::PermissionPrediction_GeolocationPrediction(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const PermissionPrediction_GeolocationPrediction& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_GeolocationPrediction_get_class_data()),
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena),
#endif  // PROTOBUF_CUSTOM_VTABLE
      _impl_(from._impl_) {
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE PermissionPrediction_GeolocationPrediction::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void PermissionPrediction_GeolocationPrediction::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.accuracy_ = {};
}
PermissionPrediction_GeolocationPrediction::~PermissionPrediction_GeolocationPrediction() {
  // @@protoc_insertion_point(destructor:permissions.PermissionPrediction.GeolocationPrediction)
  SharedDtor(*this);
}
inline void PermissionPrediction_GeolocationPrediction::SharedDtor(MessageLite& self) {
  PermissionPrediction_GeolocationPrediction& this_ = static_cast<PermissionPrediction_GeolocationPrediction&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite PermissionPrediction_GeolocationPrediction_class_data_ =
    PermissionPrediction_GeolocationPrediction::InternalGenerateClassData_(PermissionPrediction_GeolocationPrediction_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction_GeolocationPrediction::GetClassData() const {
  return PermissionPrediction_GeolocationPrediction_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction_GeolocationPrediction::GetClassData() const {
  return PermissionPrediction_GeolocationPrediction_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const PermissionPrediction_GeolocationPrediction::ParseTableT_
    PermissionPrediction_GeolocationPrediction::_table_ =
        PermissionPrediction_GeolocationPrediction::InternalGenerateParseTable_(PermissionPrediction_GeolocationPrediction_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void PermissionPrediction_GeolocationPrediction::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.PermissionPrediction.GeolocationPrediction)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.accuracy_ = 0;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL PermissionPrediction_GeolocationPrediction::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const PermissionPrediction_GeolocationPrediction& this_ = static_cast<const PermissionPrediction_GeolocationPrediction&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL PermissionPrediction_GeolocationPrediction::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const PermissionPrediction_GeolocationPrediction& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.PermissionPrediction.GeolocationPrediction)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional .permissions.PermissionPrediction.GeolocationPrediction.Accuracy accuracy = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        1, this_._internal_accuracy(), target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.PermissionPrediction.GeolocationPrediction)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t PermissionPrediction_GeolocationPrediction::ByteSizeLong(const MessageLite& base) {
  const PermissionPrediction_GeolocationPrediction& this_ = static_cast<const PermissionPrediction_GeolocationPrediction&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t PermissionPrediction_GeolocationPrediction::ByteSizeLong() const {
  const PermissionPrediction_GeolocationPrediction& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.PermissionPrediction.GeolocationPrediction)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

   {
    // optional .permissions.PermissionPrediction.GeolocationPrediction.Accuracy accuracy = 1;
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_accuracy());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void PermissionPrediction_GeolocationPrediction::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<PermissionPrediction_GeolocationPrediction*>(&to_msg);
  auto& from = static_cast<const PermissionPrediction_GeolocationPrediction&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.PermissionPrediction.GeolocationPrediction)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _this->_impl_.accuracy_ = from._impl_.accuracy_;
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void PermissionPrediction_GeolocationPrediction::CopyFrom(const PermissionPrediction_GeolocationPrediction& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.PermissionPrediction.GeolocationPrediction)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void PermissionPrediction_GeolocationPrediction::InternalSwap(PermissionPrediction_GeolocationPrediction* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  swap(_impl_.accuracy_, other->_impl_.accuracy_);
}

// ===================================================================

PermissionPrediction_Likelihood::PermissionPrediction_Likelihood(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_Likelihood_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.PermissionPrediction.Likelihood)
}
PermissionPrediction_Likelihood::PermissionPrediction_Likelihood(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const PermissionPrediction_Likelihood& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_Likelihood_get_class_data()),
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena),
#endif  // PROTOBUF_CUSTOM_VTABLE
      _impl_(from._impl_) {
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE PermissionPrediction_Likelihood::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0} {}

inline void PermissionPrediction_Likelihood::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.discretized_likelihood_ = {};
}
PermissionPrediction_Likelihood::~PermissionPrediction_Likelihood() {
  // @@protoc_insertion_point(destructor:permissions.PermissionPrediction.Likelihood)
  SharedDtor(*this);
}
inline void PermissionPrediction_Likelihood::SharedDtor(MessageLite& self) {
  PermissionPrediction_Likelihood& this_ = static_cast<PermissionPrediction_Likelihood&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite PermissionPrediction_Likelihood_class_data_ =
    PermissionPrediction_Likelihood::InternalGenerateClassData_(PermissionPrediction_Likelihood_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction_Likelihood::GetClassData() const {
  return PermissionPrediction_Likelihood_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction_Likelihood::GetClassData() const {
  return PermissionPrediction_Likelihood_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const PermissionPrediction_Likelihood::ParseTableT_
    PermissionPrediction_Likelihood::_table_ =
        PermissionPrediction_Likelihood::InternalGenerateParseTable_(PermissionPrediction_Likelihood_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void PermissionPrediction_Likelihood::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.PermissionPrediction.Likelihood)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.discretized_likelihood_ = 0;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL PermissionPrediction_Likelihood::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const PermissionPrediction_Likelihood& this_ = static_cast<const PermissionPrediction_Likelihood&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL PermissionPrediction_Likelihood::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const PermissionPrediction_Likelihood& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.PermissionPrediction.Likelihood)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional .permissions.PermissionPrediction.Likelihood.DiscretizedLikelihood discretized_likelihood = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
        1, this_._internal_discretized_likelihood(), target);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.PermissionPrediction.Likelihood)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t PermissionPrediction_Likelihood::ByteSizeLong(const MessageLite& base) {
  const PermissionPrediction_Likelihood& this_ = static_cast<const PermissionPrediction_Likelihood&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t PermissionPrediction_Likelihood::ByteSizeLong() const {
  const PermissionPrediction_Likelihood& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.PermissionPrediction.Likelihood)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

   {
    // optional .permissions.PermissionPrediction.Likelihood.DiscretizedLikelihood discretized_likelihood = 1;
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 +
                    ::_pbi::WireFormatLite::EnumSize(this_._internal_discretized_likelihood());
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void PermissionPrediction_Likelihood::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<PermissionPrediction_Likelihood*>(&to_msg);
  auto& from = static_cast<const PermissionPrediction_Likelihood&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.PermissionPrediction.Likelihood)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _this->_impl_.discretized_likelihood_ = from._impl_.discretized_likelihood_;
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void PermissionPrediction_Likelihood::CopyFrom(const PermissionPrediction_Likelihood& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.PermissionPrediction.Likelihood)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void PermissionPrediction_Likelihood::InternalSwap(PermissionPrediction_Likelihood* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  swap(_impl_.discretized_likelihood_, other->_impl_.discretized_likelihood_);
}

// ===================================================================

void PermissionPrediction::set_allocated_notification_prediction(::permissions::PermissionPrediction_NotificationPrediction* PROTOBUF_NULLABLE notification_prediction) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_prediction_type();
  if (notification_prediction) {
    ::google::protobuf::Arena* submessage_arena = notification_prediction->GetArena();
    if (message_arena != submessage_arena) {
      notification_prediction = ::google::protobuf::internal::GetOwnedMessage(message_arena, notification_prediction, submessage_arena);
    }
    set_has_notification_prediction();
    _impl_.prediction_type_.notification_prediction_ = notification_prediction;
  }
  // @@protoc_insertion_point(field_set_allocated:permissions.PermissionPrediction.notification_prediction)
}
void PermissionPrediction::set_allocated_geolocation_prediction(::permissions::PermissionPrediction_GeolocationPrediction* PROTOBUF_NULLABLE geolocation_prediction) {
  ::google::protobuf::Arena* message_arena = GetArena();
  clear_prediction_type();
  if (geolocation_prediction) {
    ::google::protobuf::Arena* submessage_arena = geolocation_prediction->GetArena();
    if (message_arena != submessage_arena) {
      geolocation_prediction = ::google::protobuf::internal::GetOwnedMessage(message_arena, geolocation_prediction, submessage_arena);
    }
    set_has_geolocation_prediction();
    _impl_.prediction_type_.geolocation_prediction_ = geolocation_prediction;
  }
  // @@protoc_insertion_point(field_set_allocated:permissions.PermissionPrediction.geolocation_prediction)
}
PermissionPrediction::PermissionPrediction(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.PermissionPrediction)
}
PROTOBUF_NDEBUG_INLINE PermissionPrediction::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::permissions::PermissionPrediction& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        prediction_type_{},
        _oneof_case_{from._oneof_case_[0]} {}

PermissionPrediction::PermissionPrediction(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const PermissionPrediction& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, PermissionPrediction_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  PermissionPrediction* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.grant_likelihood_ = (CheckHasBit(cached_has_bits, 0x00000001U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.grant_likelihood_)
                : nullptr;
  switch (prediction_type_case()) {
    case PREDICTION_TYPE_NOT_SET:
      break;
      case kNotificationPrediction:
        _impl_.prediction_type_.notification_prediction_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.prediction_type_.notification_prediction_);
        break;
      case kGeolocationPrediction:
        _impl_.prediction_type_.geolocation_prediction_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.prediction_type_.geolocation_prediction_);
        break;
  }

  // @@protoc_insertion_point(copy_constructor:permissions.PermissionPrediction)
}
PROTOBUF_NDEBUG_INLINE PermissionPrediction::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        prediction_type_{},
        _oneof_case_{} {}

inline void PermissionPrediction::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  _impl_.grant_likelihood_ = {};
}
PermissionPrediction::~PermissionPrediction() {
  // @@protoc_insertion_point(destructor:permissions.PermissionPrediction)
  SharedDtor(*this);
}
inline void PermissionPrediction::SharedDtor(MessageLite& self) {
  PermissionPrediction& this_ = static_cast<PermissionPrediction&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  delete this_._impl_.grant_likelihood_;
  if (this_.has_prediction_type()) {
    this_.clear_prediction_type();
  }
  this_._impl_.~Impl_();
}

void PermissionPrediction::clear_prediction_type() {
// @@protoc_insertion_point(one_of_clear_start:permissions.PermissionPrediction)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  switch (prediction_type_case()) {
    case kNotificationPrediction: {
      if (GetArena() == nullptr) {
        delete _impl_.prediction_type_.notification_prediction_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        if (_impl_.prediction_type_.notification_prediction_ != nullptr) {
          _impl_.prediction_type_.notification_prediction_->Clear();
        }
      }
      break;
    }
    case kGeolocationPrediction: {
      if (GetArena() == nullptr) {
        delete _impl_.prediction_type_.geolocation_prediction_;
      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
        if (_impl_.prediction_type_.geolocation_prediction_ != nullptr) {
          _impl_.prediction_type_.geolocation_prediction_->Clear();
        }
      }
      break;
    }
    case PREDICTION_TYPE_NOT_SET: {
      break;
    }
  }
  _impl_._oneof_case_[0] = PREDICTION_TYPE_NOT_SET;
}


#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite PermissionPrediction_class_data_ =
    PermissionPrediction::InternalGenerateClassData_(PermissionPrediction_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction::GetClassData() const {
  return PermissionPrediction_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
PermissionPrediction::GetClassData() const {
  return PermissionPrediction_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const PermissionPrediction::ParseTableT_
    PermissionPrediction::_table_ =
        PermissionPrediction::InternalGenerateParseTable_(PermissionPrediction_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void PermissionPrediction::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.PermissionPrediction)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    ABSL_DCHECK(_impl_.grant_likelihood_ != nullptr);
    _impl_.grant_likelihood_->Clear();
  }
  clear_prediction_type();
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL PermissionPrediction::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const PermissionPrediction& this_ = static_cast<const PermissionPrediction&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL PermissionPrediction::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const PermissionPrediction& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.PermissionPrediction)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  // .permissions.PermissionPrediction.NotificationPrediction notification_prediction = 1;
  if (this_.prediction_type_case() == kNotificationPrediction) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        1, *this_._impl_.prediction_type_.notification_prediction_, this_._impl_.prediction_type_.notification_prediction_->GetCachedSize(), target,
        stream);
  }

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional .permissions.PermissionPrediction.Likelihood grant_likelihood = 2;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        2, *this_._impl_.grant_likelihood_, this_._impl_.grant_likelihood_->GetCachedSize(), target,
        stream);
  }

  // .permissions.PermissionPrediction.GeolocationPrediction geolocation_prediction = 3;
  if (this_.prediction_type_case() == kGeolocationPrediction) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        3, *this_._impl_.prediction_type_.geolocation_prediction_, this_._impl_.prediction_type_.geolocation_prediction_->GetCachedSize(), target,
        stream);
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.PermissionPrediction)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t PermissionPrediction::ByteSizeLong(const MessageLite& base) {
  const PermissionPrediction& this_ = static_cast<const PermissionPrediction&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t PermissionPrediction::ByteSizeLong() const {
  const PermissionPrediction& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.PermissionPrediction)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

   {
    // optional .permissions.PermissionPrediction.Likelihood grant_likelihood = 2;
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.grant_likelihood_);
    }
  }
  switch (this_.prediction_type_case()) {
    // .permissions.PermissionPrediction.NotificationPrediction notification_prediction = 1;
    case kNotificationPrediction: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.prediction_type_.notification_prediction_);
      break;
    }
    // .permissions.PermissionPrediction.GeolocationPrediction geolocation_prediction = 3;
    case kGeolocationPrediction: {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.prediction_type_.geolocation_prediction_);
      break;
    }
    case PREDICTION_TYPE_NOT_SET: {
      break;
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void PermissionPrediction::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<PermissionPrediction*>(&to_msg);
  auto& from = static_cast<const PermissionPrediction&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.PermissionPrediction)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    ABSL_DCHECK(from._impl_.grant_likelihood_ != nullptr);
    if (_this->_impl_.grant_likelihood_ == nullptr) {
      _this->_impl_.grant_likelihood_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.grant_likelihood_);
    } else {
      _this->_impl_.grant_likelihood_->MergeFrom(*from._impl_.grant_likelihood_);
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  if (const uint32_t oneof_from_case =
          from._impl_._oneof_case_[0]) {
    const uint32_t oneof_to_case = _this->_impl_._oneof_case_[0];
    const bool oneof_needs_init = oneof_to_case != oneof_from_case;
    if (oneof_needs_init) {
      if (oneof_to_case != 0) {
        _this->clear_prediction_type();
      }
      _this->_impl_._oneof_case_[0] = oneof_from_case;
    }

    switch (oneof_from_case) {
      case kNotificationPrediction: {
        if (oneof_needs_init) {
          _this->_impl_.prediction_type_.notification_prediction_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.prediction_type_.notification_prediction_);
        } else {
          _this->_impl_.prediction_type_.notification_prediction_->MergeFrom(*from._impl_.prediction_type_.notification_prediction_);
        }
        break;
      }
      case kGeolocationPrediction: {
        if (oneof_needs_init) {
          _this->_impl_.prediction_type_.geolocation_prediction_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.prediction_type_.geolocation_prediction_);
        } else {
          _this->_impl_.prediction_type_.geolocation_prediction_->MergeFrom(*from._impl_.prediction_type_.geolocation_prediction_);
        }
        break;
      }
      case PREDICTION_TYPE_NOT_SET:
        break;
    }
  }
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void PermissionPrediction::CopyFrom(const PermissionPrediction& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.PermissionPrediction)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void PermissionPrediction::InternalSwap(PermissionPrediction* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  swap(_impl_.grant_likelihood_, other->_impl_.grant_likelihood_);
  swap(_impl_.prediction_type_, other->_impl_.prediction_type_);
  swap(_impl_._oneof_case_[0], other->_impl_._oneof_case_[0]);
}

// ===================================================================

GeneratePredictionsRequest::GeneratePredictionsRequest(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, GeneratePredictionsRequest_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.GeneratePredictionsRequest)
}
PROTOBUF_NDEBUG_INLINE GeneratePredictionsRequest::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::permissions::GeneratePredictionsRequest& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        permission_features_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::permissions::GeneratePredictionsRequest,
              PROTOBUF_FIELD_OFFSET(::permissions::GeneratePredictionsRequest, _impl_.permission_features_)>()
          , from.permission_features_
        }
     {}

GeneratePredictionsRequest::GeneratePredictionsRequest(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const GeneratePredictionsRequest& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, GeneratePredictionsRequest_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  GeneratePredictionsRequest* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
  ::uint32_t cached_has_bits = _impl_._has_bits_[0];
  _impl_.client_features_ = (CheckHasBit(cached_has_bits, 0x00000002U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.client_features_)
                : nullptr;
  _impl_.site_features_ = (CheckHasBit(cached_has_bits, 0x00000004U))
                ? ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.site_features_)
                : nullptr;

  // @@protoc_insertion_point(copy_constructor:permissions.GeneratePredictionsRequest)
}
PROTOBUF_NDEBUG_INLINE GeneratePredictionsRequest::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        permission_features_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::permissions::GeneratePredictionsRequest,
            PROTOBUF_FIELD_OFFSET(::permissions::GeneratePredictionsRequest, _impl_.permission_features_)>()
         }
     {}

inline void GeneratePredictionsRequest::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
  ::memset(reinterpret_cast<char*>(&_impl_) +
               offsetof(Impl_, client_features_),
           0,
           offsetof(Impl_, site_features_) -
               offsetof(Impl_, client_features_) +
               sizeof(Impl_::site_features_));
}
GeneratePredictionsRequest::~GeneratePredictionsRequest() {
  // @@protoc_insertion_point(destructor:permissions.GeneratePredictionsRequest)
  SharedDtor(*this);
}
inline void GeneratePredictionsRequest::SharedDtor(MessageLite& self) {
  GeneratePredictionsRequest& this_ = static_cast<GeneratePredictionsRequest&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  delete this_._impl_.client_features_;
  delete this_._impl_.site_features_;
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite GeneratePredictionsRequest_class_data_ =
    GeneratePredictionsRequest::InternalGenerateClassData_(GeneratePredictionsRequest_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
GeneratePredictionsRequest::GetClassData() const {
  return GeneratePredictionsRequest_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
GeneratePredictionsRequest::GetClassData() const {
  return GeneratePredictionsRequest_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const GeneratePredictionsRequest::ParseTableT_
    GeneratePredictionsRequest::_table_ =
        GeneratePredictionsRequest::InternalGenerateParseTable_(GeneratePredictionsRequest_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void GeneratePredictionsRequest::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.GeneratePredictionsRequest)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _impl_.permission_features_.Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      ABSL_DCHECK(_impl_.client_features_ != nullptr);
      _impl_.client_features_->Clear();
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      ABSL_DCHECK(_impl_.site_features_ != nullptr);
      _impl_.site_features_->Clear();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL GeneratePredictionsRequest::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const GeneratePredictionsRequest& this_ = static_cast<const GeneratePredictionsRequest&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL GeneratePredictionsRequest::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const GeneratePredictionsRequest& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.GeneratePredictionsRequest)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // optional .permissions.ClientFeatures client_features = 1;
  if (CheckHasBit(cached_has_bits, 0x00000002U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        1, *this_._impl_.client_features_, this_._impl_.client_features_->GetCachedSize(), target,
        stream);
  }

  // optional .permissions.SiteFeatures site_features = 2;
  if (CheckHasBit(cached_has_bits, 0x00000004U)) {
    target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
        2, *this_._impl_.site_features_, this_._impl_.site_features_->GetCachedSize(), target,
        stream);
  }

  // repeated .permissions.PermissionFeatures permission_features = 3;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_permission_features_size());
         i < n; i++) {
      const auto& repfield = this_._internal_permission_features().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              3, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.GeneratePredictionsRequest)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t GeneratePredictionsRequest::ByteSizeLong(const MessageLite& base) {
  const GeneratePredictionsRequest& this_ = static_cast<const GeneratePredictionsRequest&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t GeneratePredictionsRequest::ByteSizeLong() const {
  const GeneratePredictionsRequest& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.GeneratePredictionsRequest)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  cached_has_bits = this_._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
    // repeated .permissions.PermissionFeatures permission_features = 3;
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_permission_features_size();
      for (const auto& msg : this_._internal_permission_features()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
    // optional .permissions.ClientFeatures client_features = 1;
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.client_features_);
    }
    // optional .permissions.SiteFeatures site_features = 2;
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      total_size += 1 +
                    ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.site_features_);
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void GeneratePredictionsRequest::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<GeneratePredictionsRequest*>(&to_msg);
  auto& from = static_cast<const GeneratePredictionsRequest&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.GeneratePredictionsRequest)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (BatchCheckHasBit(cached_has_bits, 0x00000007U)) {
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      _this->_internal_mutable_permission_features()->InternalMergeFromWithArena(
          ::google::protobuf::MessageLite::internal_visibility(), arena,
          from._internal_permission_features());
    }
    if (CheckHasBit(cached_has_bits, 0x00000002U)) {
      ABSL_DCHECK(from._impl_.client_features_ != nullptr);
      if (_this->_impl_.client_features_ == nullptr) {
        _this->_impl_.client_features_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.client_features_);
      } else {
        _this->_impl_.client_features_->MergeFrom(*from._impl_.client_features_);
      }
    }
    if (CheckHasBit(cached_has_bits, 0x00000004U)) {
      ABSL_DCHECK(from._impl_.site_features_ != nullptr);
      if (_this->_impl_.site_features_ == nullptr) {
        _this->_impl_.site_features_ = ::google::protobuf::MessageLite::CopyConstruct(arena, *from._impl_.site_features_);
      } else {
        _this->_impl_.site_features_->MergeFrom(*from._impl_.site_features_);
      }
    }
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void GeneratePredictionsRequest::CopyFrom(const GeneratePredictionsRequest& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.GeneratePredictionsRequest)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void GeneratePredictionsRequest::InternalSwap(GeneratePredictionsRequest* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.permission_features_.InternalSwap(&other->_impl_.permission_features_);
  ::google::protobuf::internal::memswap<
      PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.site_features_)
      + sizeof(GeneratePredictionsRequest::_impl_.site_features_)
      - PROTOBUF_FIELD_OFFSET(GeneratePredictionsRequest, _impl_.client_features_)>(
          reinterpret_cast<char*>(&_impl_.client_features_),
          reinterpret_cast<char*>(&other->_impl_.client_features_));
}

// ===================================================================

GeneratePredictionsResponse::GeneratePredictionsResponse(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, GeneratePredictionsResponse_get_class_data()) {
#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  SharedCtor(arena);
  // @@protoc_insertion_point(arena_constructor:permissions.GeneratePredictionsResponse)
}
PROTOBUF_NDEBUG_INLINE GeneratePredictionsResponse::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
    [[maybe_unused]] const ::permissions::GeneratePredictionsResponse& from_msg)
      : _has_bits_{from._has_bits_},
        _cached_size_{0},
        prediction_ {
          visibility, ::_pbi::InternalMetadataOffset::Build<
              ::permissions::GeneratePredictionsResponse,
              PROTOBUF_FIELD_OFFSET(::permissions::GeneratePredictionsResponse, _impl_.prediction_)>()
          , from.prediction_
        }
     {}

GeneratePredictionsResponse::GeneratePredictionsResponse(
    ::google::protobuf::Arena* PROTOBUF_NULLABLE arena,
    const GeneratePredictionsResponse& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
    : ::google::protobuf::MessageLite(arena, GeneratePredictionsResponse_get_class_data()) {

#else   // PROTOBUF_CUSTOM_VTABLE
    : ::google::protobuf::MessageLite(arena) {
#endif  // PROTOBUF_CUSTOM_VTABLE
  GeneratePredictionsResponse* const _this = this;
  (void)_this;
  _internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);

  // @@protoc_insertion_point(copy_constructor:permissions.GeneratePredictionsResponse)
}
PROTOBUF_NDEBUG_INLINE GeneratePredictionsResponse::Impl_::Impl_(
    [[maybe_unused]] ::google::protobuf::internal::InternalVisibility visibility,
    [[maybe_unused]] ::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
      : _cached_size_{0},
        prediction_ { visibility, ::_pbi::InternalMetadataOffset::Build<
            ::permissions::GeneratePredictionsResponse,
            PROTOBUF_FIELD_OFFSET(::permissions::GeneratePredictionsResponse, _impl_.prediction_)>()
         }
     {}

inline void GeneratePredictionsResponse::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
  new (&_impl_) Impl_(internal_visibility(), arena);
}
GeneratePredictionsResponse::~GeneratePredictionsResponse() {
  // @@protoc_insertion_point(destructor:permissions.GeneratePredictionsResponse)
  SharedDtor(*this);
}
inline void GeneratePredictionsResponse::SharedDtor(MessageLite& self) {
  GeneratePredictionsResponse& this_ = static_cast<GeneratePredictionsResponse&>(self);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  this_._internal_metadata_.Delete<::std::string>();
  ABSL_DCHECK(this_.GetArena() == nullptr);
  this_._impl_.~Impl_();
}

#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::google::protobuf::internal::ClassDataLite GeneratePredictionsResponse_class_data_ =
    GeneratePredictionsResponse::InternalGenerateClassData_(GeneratePredictionsResponse_globals_._default);

PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
GeneratePredictionsResponse::GetClassData() const {
  return GeneratePredictionsResponse_class_data_.base();
}
#else
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
GeneratePredictionsResponse::GetClassData() const {
  return GeneratePredictionsResponse_globals_.GetClassData();
}
#endif  // !PROTOBUF_MESSAGE_GLOBALS
#ifndef PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const GeneratePredictionsResponse::ParseTableT_
    GeneratePredictionsResponse::_table_ =
        GeneratePredictionsResponse::InternalGenerateParseTable_(GeneratePredictionsResponse_class_data_.base());
#endif  // !PROTOBUF_MESSAGE_GLOBALS
PROTOBUF_NOINLINE void GeneratePredictionsResponse::Clear() {
// @@protoc_insertion_point(message_clear_start:permissions.GeneratePredictionsResponse)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _impl_.prediction_.Clear();
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::std::string>();
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL GeneratePredictionsResponse::_InternalSerialize(
    const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
  const GeneratePredictionsResponse& this_ = static_cast<const GeneratePredictionsResponse&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL GeneratePredictionsResponse::_InternalSerialize(
    ::uint8_t* PROTOBUF_NONNULL target,
    ::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
  const GeneratePredictionsResponse& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    this_.CheckHasBitConsistency();
  }
  // @@protoc_insertion_point(serialize_to_array_start:permissions.GeneratePredictionsResponse)
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = this_._impl_._has_bits_[0];
  // repeated .permissions.PermissionPrediction prediction = 1;
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    for (unsigned i = 0, n = static_cast<unsigned>(
                             this_._internal_prediction_size());
         i < n; i++) {
      const auto& repfield = this_._internal_prediction().Get(i);
      target =
          ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
              1, repfield, repfield.GetCachedSize(),
              target, stream);
    }
  }

  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    target = stream->WriteRaw(
        this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).data(),
        static_cast<int>(this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:permissions.GeneratePredictionsResponse)
  return target;
}

#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t GeneratePredictionsResponse::ByteSizeLong(const MessageLite& base) {
  const GeneratePredictionsResponse& this_ = static_cast<const GeneratePredictionsResponse&>(base);
#else   // PROTOBUF_CUSTOM_VTABLE
::size_t GeneratePredictionsResponse::ByteSizeLong() const {
  const GeneratePredictionsResponse& this_ = *this;
#endif  // PROTOBUF_CUSTOM_VTABLE
  // @@protoc_insertion_point(message_byte_size_start:permissions.GeneratePredictionsResponse)
  ::size_t total_size = 0;

  ::uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void)cached_has_bits;

  ::_pbi::Prefetch5LinesFrom7Lines(&this_);
   {
    // repeated .permissions.PermissionPrediction prediction = 1;
    cached_has_bits = this_._impl_._has_bits_[0];
    if (CheckHasBit(cached_has_bits, 0x00000001U)) {
      total_size += 1UL * this_._internal_prediction_size();
      for (const auto& msg : this_._internal_prediction()) {
        total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
      }
    }
  }
  if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
    total_size += this_._internal_metadata_.unknown_fields<::std::string>(::google::protobuf::internal::GetEmptyString).size();
  }
  this_._impl_._cached_size_.Set(::_pbi::ToCachedSize(total_size));
  return total_size;
}

void GeneratePredictionsResponse::MergeImpl(::google::protobuf::MessageLite& to_msg,
                      const ::google::protobuf::MessageLite& from_msg) {
   auto* const _this = static_cast<GeneratePredictionsResponse*>(&to_msg);
  auto& from = static_cast<const GeneratePredictionsResponse&>(from_msg);
  if constexpr (::_pbi::DebugHardenCheckHasBitConsistency()) {
    from.CheckHasBitConsistency();
  }
  ::google::protobuf::Arena* arena = _this->GetArena();
  // @@protoc_insertion_point(class_specific_merge_from_start:permissions.GeneratePredictionsResponse)
  ABSL_DCHECK_NE(&from, _this);
  ::uint32_t cached_has_bits = 0;
  (void)cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (CheckHasBit(cached_has_bits, 0x00000001U)) {
    _this->_internal_mutable_prediction()->InternalMergeFromWithArena(
        ::google::protobuf::MessageLite::internal_visibility(), arena,
        from._internal_prediction());
  }
  _this->_impl_._has_bits_[0] |= cached_has_bits;
  _this->_internal_metadata_.MergeFrom<::std::string>(
      from._internal_metadata_);
}

void GeneratePredictionsResponse::CopyFrom(const GeneratePredictionsResponse& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:permissions.GeneratePredictionsResponse)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}


void GeneratePredictionsResponse::InternalSwap(GeneratePredictionsResponse* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
  using ::std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.prediction_.InternalSwap(&other->_impl_.prediction_);
}

// @@protoc_insertion_point(namespace_scope)
}  // namespace permissions
namespace google {
namespace protobuf {
}  // namespace protobuf
}  // namespace google
// @@protoc_insertion_point(global_scope)
#include "google/protobuf/port_undef.inc"
