周睿 2 rokov pred
rodič
commit
51dee630a0
28 zmenil súbory, kde vykonal 9178 pridanie a 8 odobranie
  1. 2 0
      app_business/gen.ps1
  2. 5 0
      app_business/lib/app_config.dart
  3. 6314 0
      app_business/lib/generated/base.pb.dart
  4. 293 0
      app_business/lib/generated/base.pbenum.dart
  5. 1431 0
      app_business/lib/generated/base.pbjson.dart
  6. 208 0
      app_business/lib/generated/google/protobuf/any.pb.dart
  7. 11 0
      app_business/lib/generated/google/protobuf/any.pbenum.dart
  8. 28 0
      app_business/lib/generated/google/protobuf/any.pbjson.dart
  9. 151 0
      app_business/lib/generated/google/protobuf/duration.pb.dart
  10. 11 0
      app_business/lib/generated/google/protobuf/duration.pbenum.dart
  11. 29 0
      app_business/lib/generated/google/protobuf/duration.pbjson.dart
  12. 188 0
      app_business/lib/generated/google/protobuf/timestamp.pb.dart
  13. 11 0
      app_business/lib/generated/google/protobuf/timestamp.pbenum.dart
  14. 29 0
      app_business/lib/generated/google/protobuf/timestamp.pbjson.dart
  15. 13 0
      app_business/lib/generated/track_offical.pb.dart
  16. 11 0
      app_business/lib/generated/track_offical.pbenum.dart
  17. 219 0
      app_business/lib/generated/track_offical.pbgrpc.dart
  18. 15 0
      app_business/lib/generated/track_offical.pbjson.dart
  19. 5 0
      app_business/lib/service/abase.dart
  20. 15 0
      app_business/lib/service/all_init.dart
  21. 132 0
      app_business/lib/service/api.dart
  22. 17 0
      app_business/lib/service/app.dart
  23. 2 1
      app_business/lib/view/all_init.dart
  24. 7 6
      app_business/lib/view/login.dart
  25. 2 0
      app_business/macos/Flutter/GeneratedPluginRegistrant.swift
  26. 25 1
      app_business/pubspec.lock
  27. 3 0
      app_business/pubspec.yaml
  28. 1 0
      libs/track_common/lib/track_common.dart

+ 2 - 0
app_business/gen.ps1

@@ -0,0 +1,2 @@
+protoc -I ../protos/app_api track_offical.proto --dart_out=grpc:lib/generated google/protobuf/timestamp.proto google/protobuf/duration.proto google/protobuf/any.proto
+protoc -I ../protos/app_api base.proto --dart_out=grpc:lib/generated google/protobuf/timestamp.proto google/protobuf/duration.proto google/protobuf/any.proto

+ 5 - 0
app_business/lib/app_config.dart

@@ -0,0 +1,5 @@
+class AppConfig {
+  static String apiHost = "otapi.beswell.com";
+  // static String apiHost = "t-otapi.beswell.com";
+  static int apiPort = 10001;
+}

+ 6314 - 0
app_business/lib/generated/base.pb.dart

@@ -0,0 +1,6314 @@
+//
+//  Generated code. Do not modify.
+//  source: base.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+
+import 'package:fixnum/fixnum.dart' as $fixnum;
+import 'package:protobuf/protobuf.dart' as $pb;
+
+import 'base.pbenum.dart';
+import 'google/protobuf/any.pb.dart' as $1;
+import 'google/protobuf/duration.pb.dart' as $2;
+import 'google/protobuf/timestamp.pb.dart' as $0;
+
+export 'base.pbenum.dart';
+
+class NetImage extends $pb.GeneratedMessage {
+  factory NetImage({
+    $core.String? url,
+    $core.List<$core.int>? md5,
+  }) {
+    final $result = create();
+    if (url != null) {
+      $result.url = url;
+    }
+    if (md5 != null) {
+      $result.md5 = md5;
+    }
+    return $result;
+  }
+  NetImage._() : super();
+  factory NetImage.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory NetImage.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'NetImage', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'url')
+    ..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'md5', $pb.PbFieldType.OY)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  NetImage clone() => NetImage()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  NetImage copyWith(void Function(NetImage) updates) => super.copyWith((message) => updates(message as NetImage)) as NetImage;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static NetImage create() => NetImage._();
+  NetImage createEmptyInstance() => create();
+  static $pb.PbList<NetImage> createRepeated() => $pb.PbList<NetImage>();
+  @$core.pragma('dart2js:noInline')
+  static NetImage getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<NetImage>(create);
+  static NetImage? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get url => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set url($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasUrl() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearUrl() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.int> get md5 => $_getN(1);
+  @$pb.TagNumber(2)
+  set md5($core.List<$core.int> v) { $_setBytes(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasMd5() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearMd5() => clearField(2);
+}
+
+class User extends $pb.GeneratedMessage {
+  factory User() => create();
+  User._() : super();
+  factory User.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory User.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'User', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  User clone() => User()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  User copyWith(void Function(User) updates) => super.copyWith((message) => updates(message as User)) as User;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static User create() => User._();
+  User createEmptyInstance() => create();
+  static $pb.PbList<User> createRepeated() => $pb.PbList<User>();
+  @$core.pragma('dart2js:noInline')
+  static User getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<User>(create);
+  static User? _defaultInstance;
+}
+
+class GameGpsInfo extends $pb.GeneratedMessage {
+  factory GameGpsInfo({
+    $0.Timestamp? gpsTime,
+    $core.double? longitude,
+    $core.double? latitude,
+    $core.double? directionRadian,
+    $core.double? altitude,
+  }) {
+    final $result = create();
+    if (gpsTime != null) {
+      $result.gpsTime = gpsTime;
+    }
+    if (longitude != null) {
+      $result.longitude = longitude;
+    }
+    if (latitude != null) {
+      $result.latitude = latitude;
+    }
+    if (directionRadian != null) {
+      $result.directionRadian = directionRadian;
+    }
+    if (altitude != null) {
+      $result.altitude = altitude;
+    }
+    return $result;
+  }
+  GameGpsInfo._() : super();
+  factory GameGpsInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory GameGpsInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GameGpsInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOM<$0.Timestamp>(1, _omitFieldNames ? '' : 'gpsTime', protoName: 'gpsTime', subBuilder: $0.Timestamp.create)
+    ..a<$core.double>(2, _omitFieldNames ? '' : 'longitude', $pb.PbFieldType.OD)
+    ..a<$core.double>(3, _omitFieldNames ? '' : 'latitude', $pb.PbFieldType.OD)
+    ..a<$core.double>(4, _omitFieldNames ? '' : 'directionRadian', $pb.PbFieldType.OD, protoName: 'directionRadian')
+    ..a<$core.double>(5, _omitFieldNames ? '' : 'altitude', $pb.PbFieldType.OD)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GameGpsInfo clone() => GameGpsInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GameGpsInfo copyWith(void Function(GameGpsInfo) updates) => super.copyWith((message) => updates(message as GameGpsInfo)) as GameGpsInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static GameGpsInfo create() => GameGpsInfo._();
+  GameGpsInfo createEmptyInstance() => create();
+  static $pb.PbList<GameGpsInfo> createRepeated() => $pb.PbList<GameGpsInfo>();
+  @$core.pragma('dart2js:noInline')
+  static GameGpsInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<GameGpsInfo>(create);
+  static GameGpsInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $0.Timestamp get gpsTime => $_getN(0);
+  @$pb.TagNumber(1)
+  set gpsTime($0.Timestamp v) { setField(1, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasGpsTime() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearGpsTime() => clearField(1);
+  @$pb.TagNumber(1)
+  $0.Timestamp ensureGpsTime() => $_ensure(0);
+
+  @$pb.TagNumber(2)
+  $core.double get longitude => $_getN(1);
+  @$pb.TagNumber(2)
+  set longitude($core.double v) { $_setDouble(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasLongitude() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearLongitude() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.double get latitude => $_getN(2);
+  @$pb.TagNumber(3)
+  set latitude($core.double v) { $_setDouble(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasLatitude() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearLatitude() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.double get directionRadian => $_getN(3);
+  @$pb.TagNumber(4)
+  set directionRadian($core.double v) { $_setDouble(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasDirectionRadian() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearDirectionRadian() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.double get altitude => $_getN(4);
+  @$pb.TagNumber(5)
+  set altitude($core.double v) { $_setDouble(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasAltitude() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearAltitude() => clearField(5);
+}
+
+class HeartRate extends $pb.GeneratedMessage {
+  factory HeartRate({
+    $fixnum.Int64? timeStampMs,
+    $core.int? hr,
+  }) {
+    final $result = create();
+    if (timeStampMs != null) {
+      $result.timeStampMs = timeStampMs;
+    }
+    if (hr != null) {
+      $result.hr = hr;
+    }
+    return $result;
+  }
+  HeartRate._() : super();
+  factory HeartRate.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory HeartRate.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'HeartRate', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'timeStampMs', protoName: 'timeStampMs')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'hr', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  HeartRate clone() => HeartRate()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  HeartRate copyWith(void Function(HeartRate) updates) => super.copyWith((message) => updates(message as HeartRate)) as HeartRate;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static HeartRate create() => HeartRate._();
+  HeartRate createEmptyInstance() => create();
+  static $pb.PbList<HeartRate> createRepeated() => $pb.PbList<HeartRate>();
+  @$core.pragma('dart2js:noInline')
+  static HeartRate getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<HeartRate>(create);
+  static HeartRate? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get timeStampMs => $_getI64(0);
+  @$pb.TagNumber(1)
+  set timeStampMs($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasTimeStampMs() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearTimeStampMs() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get hr => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set hr($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasHr() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearHr() => clearField(2);
+}
+
+class SignInReply extends $pb.GeneratedMessage {
+  factory SignInReply({
+    $core.String? token,
+  }) {
+    final $result = create();
+    if (token != null) {
+      $result.token = token;
+    }
+    return $result;
+  }
+  SignInReply._() : super();
+  factory SignInReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory SignInReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'SignInReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'token')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  SignInReply clone() => SignInReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  SignInReply copyWith(void Function(SignInReply) updates) => super.copyWith((message) => updates(message as SignInReply)) as SignInReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static SignInReply create() => SignInReply._();
+  SignInReply createEmptyInstance() => create();
+  static $pb.PbList<SignInReply> createRepeated() => $pb.PbList<SignInReply>();
+  @$core.pragma('dart2js:noInline')
+  static SignInReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<SignInReply>(create);
+  static SignInReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get token => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set token($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasToken() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearToken() => clearField(1);
+}
+
+class GameArriveControlPoint extends $pb.GeneratedMessage {
+  factory GameArriveControlPoint({
+    $fixnum.Int64? id,
+    $core.String? sn,
+    $core.int? orderNo,
+    $core.int? totalNo,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (sn != null) {
+      $result.sn = sn;
+    }
+    if (orderNo != null) {
+      $result.orderNo = orderNo;
+    }
+    if (totalNo != null) {
+      $result.totalNo = totalNo;
+    }
+    return $result;
+  }
+  GameArriveControlPoint._() : super();
+  factory GameArriveControlPoint.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory GameArriveControlPoint.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GameArriveControlPoint', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..aOS(2, _omitFieldNames ? '' : 'sn')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'orderNo', $pb.PbFieldType.O3, protoName: 'orderNo')
+    ..a<$core.int>(4, _omitFieldNames ? '' : 'totalNo', $pb.PbFieldType.O3, protoName: 'totalNo')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GameArriveControlPoint clone() => GameArriveControlPoint()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GameArriveControlPoint copyWith(void Function(GameArriveControlPoint) updates) => super.copyWith((message) => updates(message as GameArriveControlPoint)) as GameArriveControlPoint;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static GameArriveControlPoint create() => GameArriveControlPoint._();
+  GameArriveControlPoint createEmptyInstance() => create();
+  static $pb.PbList<GameArriveControlPoint> createRepeated() => $pb.PbList<GameArriveControlPoint>();
+  @$core.pragma('dart2js:noInline')
+  static GameArriveControlPoint getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<GameArriveControlPoint>(create);
+  static GameArriveControlPoint? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get sn => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set sn($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasSn() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearSn() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get orderNo => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set orderNo($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasOrderNo() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearOrderNo() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.int get totalNo => $_getIZ(3);
+  @$pb.TagNumber(4)
+  set totalNo($core.int v) { $_setSignedInt32(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasTotalNo() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearTotalNo() => clearField(4);
+}
+
+class MapRoute extends $pb.GeneratedMessage {
+  factory MapRoute({
+    $fixnum.Int64? id,
+    $core.String? name,
+    NetImage? image,
+    $core.bool? isNfc,
+    $core.int? distanceMeter,
+    $core.int? altitudeDiffMeter,
+    $core.int? useCount,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (name != null) {
+      $result.name = name;
+    }
+    if (image != null) {
+      $result.image = image;
+    }
+    if (isNfc != null) {
+      $result.isNfc = isNfc;
+    }
+    if (distanceMeter != null) {
+      $result.distanceMeter = distanceMeter;
+    }
+    if (altitudeDiffMeter != null) {
+      $result.altitudeDiffMeter = altitudeDiffMeter;
+    }
+    if (useCount != null) {
+      $result.useCount = useCount;
+    }
+    return $result;
+  }
+  MapRoute._() : super();
+  factory MapRoute.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory MapRoute.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'MapRoute', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..aOS(2, _omitFieldNames ? '' : 'name')
+    ..aOM<NetImage>(3, _omitFieldNames ? '' : 'image', subBuilder: NetImage.create)
+    ..aOB(4, _omitFieldNames ? '' : 'isNfc', protoName: 'isNfc')
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'distanceMeter', $pb.PbFieldType.O3, protoName: 'distanceMeter')
+    ..a<$core.int>(6, _omitFieldNames ? '' : 'altitudeDiffMeter', $pb.PbFieldType.O3, protoName: 'altitudeDiffMeter')
+    ..a<$core.int>(7, _omitFieldNames ? '' : 'useCount', $pb.PbFieldType.O3, protoName: 'useCount')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  MapRoute clone() => MapRoute()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  MapRoute copyWith(void Function(MapRoute) updates) => super.copyWith((message) => updates(message as MapRoute)) as MapRoute;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static MapRoute create() => MapRoute._();
+  MapRoute createEmptyInstance() => create();
+  static $pb.PbList<MapRoute> createRepeated() => $pb.PbList<MapRoute>();
+  @$core.pragma('dart2js:noInline')
+  static MapRoute getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<MapRoute>(create);
+  static MapRoute? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get name => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set name($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  NetImage get image => $_getN(2);
+  @$pb.TagNumber(3)
+  set image(NetImage v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasImage() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearImage() => clearField(3);
+  @$pb.TagNumber(3)
+  NetImage ensureImage() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $core.bool get isNfc => $_getBF(3);
+  @$pb.TagNumber(4)
+  set isNfc($core.bool v) { $_setBool(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasIsNfc() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearIsNfc() => clearField(4);
+
+  /// 路线总距离
+  @$pb.TagNumber(5)
+  $core.int get distanceMeter => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set distanceMeter($core.int v) { $_setSignedInt32(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasDistanceMeter() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearDistanceMeter() => clearField(5);
+
+  /// 高度落差
+  @$pb.TagNumber(6)
+  $core.int get altitudeDiffMeter => $_getIZ(5);
+  @$pb.TagNumber(6)
+  set altitudeDiffMeter($core.int v) { $_setSignedInt32(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasAltitudeDiffMeter() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearAltitudeDiffMeter() => clearField(6);
+
+  /// 使用过的次数
+  @$pb.TagNumber(7)
+  $core.int get useCount => $_getIZ(6);
+  @$pb.TagNumber(7)
+  set useCount($core.int v) { $_setSignedInt32(6, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasUseCount() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearUseCount() => clearField(7);
+}
+
+class IdArrRequest extends $pb.GeneratedMessage {
+  factory IdArrRequest({
+    $core.Iterable<$core.int>? idArr,
+  }) {
+    final $result = create();
+    if (idArr != null) {
+      $result.idArr.addAll(idArr);
+    }
+    return $result;
+  }
+  IdArrRequest._() : super();
+  factory IdArrRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory IdArrRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'IdArrRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..p<$core.int>(2, _omitFieldNames ? '' : 'IdArr', $pb.PbFieldType.K3, protoName: 'IdArr')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  IdArrRequest clone() => IdArrRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  IdArrRequest copyWith(void Function(IdArrRequest) updates) => super.copyWith((message) => updates(message as IdArrRequest)) as IdArrRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static IdArrRequest create() => IdArrRequest._();
+  IdArrRequest createEmptyInstance() => create();
+  static $pb.PbList<IdArrRequest> createRepeated() => $pb.PbList<IdArrRequest>();
+  @$core.pragma('dart2js:noInline')
+  static IdArrRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<IdArrRequest>(create);
+  static IdArrRequest? _defaultInstance;
+
+  @$pb.TagNumber(2)
+  $core.List<$core.int> get idArr => $_getList(0);
+}
+
+class BaseMapInfo extends $pb.GeneratedMessage {
+  factory BaseMapInfo({
+    $core.int? shopId,
+    $core.String? mapName,
+    NetImage? zipImage,
+  }) {
+    final $result = create();
+    if (shopId != null) {
+      $result.shopId = shopId;
+    }
+    if (mapName != null) {
+      $result.mapName = mapName;
+    }
+    if (zipImage != null) {
+      $result.zipImage = zipImage;
+    }
+    return $result;
+  }
+  BaseMapInfo._() : super();
+  factory BaseMapInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory BaseMapInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BaseMapInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'shopId', $pb.PbFieldType.O3, protoName: 'shopId')
+    ..aOS(2, _omitFieldNames ? '' : 'mapName', protoName: 'mapName')
+    ..aOM<NetImage>(3, _omitFieldNames ? '' : 'zipImage', protoName: 'zipImage', subBuilder: NetImage.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  BaseMapInfo clone() => BaseMapInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  BaseMapInfo copyWith(void Function(BaseMapInfo) updates) => super.copyWith((message) => updates(message as BaseMapInfo)) as BaseMapInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static BaseMapInfo create() => BaseMapInfo._();
+  BaseMapInfo createEmptyInstance() => create();
+  static $pb.PbList<BaseMapInfo> createRepeated() => $pb.PbList<BaseMapInfo>();
+  @$core.pragma('dart2js:noInline')
+  static BaseMapInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BaseMapInfo>(create);
+  static BaseMapInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get shopId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set shopId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasShopId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearShopId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get mapName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set mapName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasMapName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearMapName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  NetImage get zipImage => $_getN(2);
+  @$pb.TagNumber(3)
+  set zipImage(NetImage v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasZipImage() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearZipImage() => clearField(3);
+  @$pb.TagNumber(3)
+  NetImage ensureZipImage() => $_ensure(2);
+}
+
+/// example: code = 370000 name = 山东省;code = 370100 name = 济南市;code = 370102 name = 历下区
+class Region extends $pb.GeneratedMessage {
+  factory Region({
+    $core.String? code,
+    $core.String? name,
+  }) {
+    final $result = create();
+    if (code != null) {
+      $result.code = code;
+    }
+    if (name != null) {
+      $result.name = name;
+    }
+    return $result;
+  }
+  Region._() : super();
+  factory Region.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory Region.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Region', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'code')
+    ..aOS(2, _omitFieldNames ? '' : 'name')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  Region clone() => Region()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  Region copyWith(void Function(Region) updates) => super.copyWith((message) => updates(message as Region)) as Region;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static Region create() => Region._();
+  Region createEmptyInstance() => create();
+  static $pb.PbList<Region> createRepeated() => $pb.PbList<Region>();
+  @$core.pragma('dart2js:noInline')
+  static Region getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Region>(create);
+  static Region? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get code => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set code($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasCode() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearCode() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get name => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set name($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearName() => clearField(2);
+}
+
+class ShopList extends $pb.GeneratedMessage {
+  factory ShopList({
+    $core.int? shopId,
+    $core.String? name,
+  }) {
+    final $result = create();
+    if (shopId != null) {
+      $result.shopId = shopId;
+    }
+    if (name != null) {
+      $result.name = name;
+    }
+    return $result;
+  }
+  ShopList._() : super();
+  factory ShopList.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ShopList.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ShopList', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'shopId', $pb.PbFieldType.O3, protoName: 'shopId')
+    ..aOS(2, _omitFieldNames ? '' : 'name')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ShopList clone() => ShopList()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ShopList copyWith(void Function(ShopList) updates) => super.copyWith((message) => updates(message as ShopList)) as ShopList;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ShopList create() => ShopList._();
+  ShopList createEmptyInstance() => create();
+  static $pb.PbList<ShopList> createRepeated() => $pb.PbList<ShopList>();
+  @$core.pragma('dart2js:noInline')
+  static ShopList getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ShopList>(create);
+  static ShopList? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get shopId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set shopId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasShopId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearShopId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get name => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set name($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearName() => clearField(2);
+}
+
+class GetSmsSendLeftTimeRequest extends $pb.GeneratedMessage {
+  factory GetSmsSendLeftTimeRequest({
+    $core.String? phone,
+  }) {
+    final $result = create();
+    if (phone != null) {
+      $result.phone = phone;
+    }
+    return $result;
+  }
+  GetSmsSendLeftTimeRequest._() : super();
+  factory GetSmsSendLeftTimeRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory GetSmsSendLeftTimeRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GetSmsSendLeftTimeRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'phone')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GetSmsSendLeftTimeRequest clone() => GetSmsSendLeftTimeRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GetSmsSendLeftTimeRequest copyWith(void Function(GetSmsSendLeftTimeRequest) updates) => super.copyWith((message) => updates(message as GetSmsSendLeftTimeRequest)) as GetSmsSendLeftTimeRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static GetSmsSendLeftTimeRequest create() => GetSmsSendLeftTimeRequest._();
+  GetSmsSendLeftTimeRequest createEmptyInstance() => create();
+  static $pb.PbList<GetSmsSendLeftTimeRequest> createRepeated() => $pb.PbList<GetSmsSendLeftTimeRequest>();
+  @$core.pragma('dart2js:noInline')
+  static GetSmsSendLeftTimeRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<GetSmsSendLeftTimeRequest>(create);
+  static GetSmsSendLeftTimeRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get phone => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set phone($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasPhone() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearPhone() => clearField(1);
+}
+
+class GetSmsSendLeftTimeReply extends $pb.GeneratedMessage {
+  factory GetSmsSendLeftTimeReply({
+    $core.int? second,
+  }) {
+    final $result = create();
+    if (second != null) {
+      $result.second = second;
+    }
+    return $result;
+  }
+  GetSmsSendLeftTimeReply._() : super();
+  factory GetSmsSendLeftTimeReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory GetSmsSendLeftTimeReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GetSmsSendLeftTimeReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'second', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GetSmsSendLeftTimeReply clone() => GetSmsSendLeftTimeReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GetSmsSendLeftTimeReply copyWith(void Function(GetSmsSendLeftTimeReply) updates) => super.copyWith((message) => updates(message as GetSmsSendLeftTimeReply)) as GetSmsSendLeftTimeReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static GetSmsSendLeftTimeReply create() => GetSmsSendLeftTimeReply._();
+  GetSmsSendLeftTimeReply createEmptyInstance() => create();
+  static $pb.PbList<GetSmsSendLeftTimeReply> createRepeated() => $pb.PbList<GetSmsSendLeftTimeReply>();
+  @$core.pragma('dart2js:noInline')
+  static GetSmsSendLeftTimeReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<GetSmsSendLeftTimeReply>(create);
+  static GetSmsSendLeftTimeReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get second => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set second($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasSecond() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearSecond() => clearField(1);
+}
+
+class ControlInfoList extends $pb.GeneratedMessage {
+  factory ControlInfoList({
+    $core.int? ciId,
+    $core.String? ciCode,
+  }) {
+    final $result = create();
+    if (ciId != null) {
+      $result.ciId = ciId;
+    }
+    if (ciCode != null) {
+      $result.ciCode = ciCode;
+    }
+    return $result;
+  }
+  ControlInfoList._() : super();
+  factory ControlInfoList.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ControlInfoList.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ControlInfoList', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'ciId', $pb.PbFieldType.O3, protoName: 'ciId')
+    ..aOS(2, _omitFieldNames ? '' : 'ciCode', protoName: 'ciCode')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ControlInfoList clone() => ControlInfoList()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ControlInfoList copyWith(void Function(ControlInfoList) updates) => super.copyWith((message) => updates(message as ControlInfoList)) as ControlInfoList;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ControlInfoList create() => ControlInfoList._();
+  ControlInfoList createEmptyInstance() => create();
+  static $pb.PbList<ControlInfoList> createRepeated() => $pb.PbList<ControlInfoList>();
+  @$core.pragma('dart2js:noInline')
+  static ControlInfoList getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ControlInfoList>(create);
+  static ControlInfoList? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get ciId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set ciId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasCiId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearCiId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get ciCode => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set ciCode($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasCiCode() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearCiCode() => clearField(2);
+}
+
+class DefaultReply extends $pb.GeneratedMessage {
+  factory DefaultReply() => create();
+  DefaultReply._() : super();
+  factory DefaultReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory DefaultReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'DefaultReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  DefaultReply clone() => DefaultReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  DefaultReply copyWith(void Function(DefaultReply) updates) => super.copyWith((message) => updates(message as DefaultReply)) as DefaultReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static DefaultReply create() => DefaultReply._();
+  DefaultReply createEmptyInstance() => create();
+  static $pb.PbList<DefaultReply> createRepeated() => $pb.PbList<DefaultReply>();
+  @$core.pragma('dart2js:noInline')
+  static DefaultReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DefaultReply>(create);
+  static DefaultReply? _defaultInstance;
+}
+
+class IdRequest extends $pb.GeneratedMessage {
+  factory IdRequest({
+    $fixnum.Int64? id,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    return $result;
+  }
+  IdRequest._() : super();
+  factory IdRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory IdRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'IdRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  IdRequest clone() => IdRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  IdRequest copyWith(void Function(IdRequest) updates) => super.copyWith((message) => updates(message as IdRequest)) as IdRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static IdRequest create() => IdRequest._();
+  IdRequest createEmptyInstance() => create();
+  static $pb.PbList<IdRequest> createRepeated() => $pb.PbList<IdRequest>();
+  @$core.pragma('dart2js:noInline')
+  static IdRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<IdRequest>(create);
+  static IdRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+}
+
+class DefaultRequest extends $pb.GeneratedMessage {
+  factory DefaultRequest() => create();
+  DefaultRequest._() : super();
+  factory DefaultRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory DefaultRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'DefaultRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  DefaultRequest clone() => DefaultRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  DefaultRequest copyWith(void Function(DefaultRequest) updates) => super.copyWith((message) => updates(message as DefaultRequest)) as DefaultRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static DefaultRequest create() => DefaultRequest._();
+  DefaultRequest createEmptyInstance() => create();
+  static $pb.PbList<DefaultRequest> createRepeated() => $pb.PbList<DefaultRequest>();
+  @$core.pragma('dart2js:noInline')
+  static DefaultRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DefaultRequest>(create);
+  static DefaultRequest? _defaultInstance;
+}
+
+class Position extends $pb.GeneratedMessage {
+  factory Position({
+    $core.double? longitude,
+    $core.double? latitude,
+    $core.double? altitude,
+  }) {
+    final $result = create();
+    if (longitude != null) {
+      $result.longitude = longitude;
+    }
+    if (latitude != null) {
+      $result.latitude = latitude;
+    }
+    if (altitude != null) {
+      $result.altitude = altitude;
+    }
+    return $result;
+  }
+  Position._() : super();
+  factory Position.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory Position.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Position', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.double>(1, _omitFieldNames ? '' : 'longitude', $pb.PbFieldType.OD)
+    ..a<$core.double>(2, _omitFieldNames ? '' : 'latitude', $pb.PbFieldType.OD)
+    ..a<$core.double>(3, _omitFieldNames ? '' : 'altitude', $pb.PbFieldType.OD)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  Position clone() => Position()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  Position copyWith(void Function(Position) updates) => super.copyWith((message) => updates(message as Position)) as Position;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static Position create() => Position._();
+  Position createEmptyInstance() => create();
+  static $pb.PbList<Position> createRepeated() => $pb.PbList<Position>();
+  @$core.pragma('dart2js:noInline')
+  static Position getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Position>(create);
+  static Position? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.double get longitude => $_getN(0);
+  @$pb.TagNumber(1)
+  set longitude($core.double v) { $_setDouble(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasLongitude() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearLongitude() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.double get latitude => $_getN(1);
+  @$pb.TagNumber(2)
+  set latitude($core.double v) { $_setDouble(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasLatitude() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearLatitude() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.double get altitude => $_getN(2);
+  @$pb.TagNumber(3)
+  set altitude($core.double v) { $_setDouble(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasAltitude() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearAltitude() => clearField(3);
+}
+
+/// message ControlPointInfo{
+///   NetImage image = 1; //检查点内容图片(文创)
+///   string content = 2; //检查点内容文字
+///
+/// }
+class ControlPointInfo extends $pb.GeneratedMessage {
+  factory ControlPointInfo({
+    $1.Any? displayInfo,
+  }) {
+    final $result = create();
+    if (displayInfo != null) {
+      $result.displayInfo = displayInfo;
+    }
+    return $result;
+  }
+  ControlPointInfo._() : super();
+  factory ControlPointInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ControlPointInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ControlPointInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOM<$1.Any>(1, _omitFieldNames ? '' : 'displayInfo', protoName: 'displayInfo', subBuilder: $1.Any.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ControlPointInfo clone() => ControlPointInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ControlPointInfo copyWith(void Function(ControlPointInfo) updates) => super.copyWith((message) => updates(message as ControlPointInfo)) as ControlPointInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ControlPointInfo create() => ControlPointInfo._();
+  ControlPointInfo createEmptyInstance() => create();
+  static $pb.PbList<ControlPointInfo> createRepeated() => $pb.PbList<ControlPointInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ControlPointInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ControlPointInfo>(create);
+  static ControlPointInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $1.Any get displayInfo => $_getN(0);
+  @$pb.TagNumber(1)
+  set displayInfo($1.Any v) { setField(1, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasDisplayInfo() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearDisplayInfo() => clearField(1);
+  @$pb.TagNumber(1)
+  $1.Any ensureDisplayInfo() => $_ensure(0);
+}
+
+class ControlPointDisplayInfoSingleChoice extends $pb.GeneratedMessage {
+  factory ControlPointDisplayInfoSingleChoice({
+    $core.String? question,
+    NetImage? image,
+    $core.Iterable<$core.String>? answer,
+    $core.int? rightAnswerIndex,
+    $core.int? qbId,
+  }) {
+    final $result = create();
+    if (question != null) {
+      $result.question = question;
+    }
+    if (image != null) {
+      $result.image = image;
+    }
+    if (answer != null) {
+      $result.answer.addAll(answer);
+    }
+    if (rightAnswerIndex != null) {
+      $result.rightAnswerIndex = rightAnswerIndex;
+    }
+    if (qbId != null) {
+      $result.qbId = qbId;
+    }
+    return $result;
+  }
+  ControlPointDisplayInfoSingleChoice._() : super();
+  factory ControlPointDisplayInfoSingleChoice.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ControlPointDisplayInfoSingleChoice.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ControlPointDisplayInfoSingleChoice', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'question')
+    ..aOM<NetImage>(2, _omitFieldNames ? '' : 'image', subBuilder: NetImage.create)
+    ..pPS(3, _omitFieldNames ? '' : 'answer')
+    ..a<$core.int>(4, _omitFieldNames ? '' : 'rightAnswerIndex', $pb.PbFieldType.O3, protoName: 'rightAnswerIndex')
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'qbId', $pb.PbFieldType.O3, protoName: 'qbId')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ControlPointDisplayInfoSingleChoice clone() => ControlPointDisplayInfoSingleChoice()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ControlPointDisplayInfoSingleChoice copyWith(void Function(ControlPointDisplayInfoSingleChoice) updates) => super.copyWith((message) => updates(message as ControlPointDisplayInfoSingleChoice)) as ControlPointDisplayInfoSingleChoice;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ControlPointDisplayInfoSingleChoice create() => ControlPointDisplayInfoSingleChoice._();
+  ControlPointDisplayInfoSingleChoice createEmptyInstance() => create();
+  static $pb.PbList<ControlPointDisplayInfoSingleChoice> createRepeated() => $pb.PbList<ControlPointDisplayInfoSingleChoice>();
+  @$core.pragma('dart2js:noInline')
+  static ControlPointDisplayInfoSingleChoice getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ControlPointDisplayInfoSingleChoice>(create);
+  static ControlPointDisplayInfoSingleChoice? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get question => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set question($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasQuestion() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearQuestion() => clearField(1);
+
+  @$pb.TagNumber(2)
+  NetImage get image => $_getN(1);
+  @$pb.TagNumber(2)
+  set image(NetImage v) { setField(2, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasImage() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearImage() => clearField(2);
+  @$pb.TagNumber(2)
+  NetImage ensureImage() => $_ensure(1);
+
+  @$pb.TagNumber(3)
+  $core.List<$core.String> get answer => $_getList(2);
+
+  @$pb.TagNumber(4)
+  $core.int get rightAnswerIndex => $_getIZ(3);
+  @$pb.TagNumber(4)
+  set rightAnswerIndex($core.int v) { $_setSignedInt32(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasRightAnswerIndex() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearRightAnswerIndex() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.int get qbId => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set qbId($core.int v) { $_setSignedInt32(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasQbId() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearQbId() => clearField(5);
+}
+
+class BinaryPart extends $pb.GeneratedMessage {
+  factory BinaryPart({
+    $core.String? ext,
+    $core.List<$core.int>? data,
+    $core.int? allCount,
+    $core.List<$core.int>? nonce,
+  }) {
+    final $result = create();
+    if (ext != null) {
+      $result.ext = ext;
+    }
+    if (data != null) {
+      $result.data = data;
+    }
+    if (allCount != null) {
+      $result.allCount = allCount;
+    }
+    if (nonce != null) {
+      $result.nonce = nonce;
+    }
+    return $result;
+  }
+  BinaryPart._() : super();
+  factory BinaryPart.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory BinaryPart.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BinaryPart', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'ext')
+    ..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'data', $pb.PbFieldType.OY)
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'allCount', $pb.PbFieldType.O3, protoName: 'allCount')
+    ..a<$core.List<$core.int>>(4, _omitFieldNames ? '' : 'nonce', $pb.PbFieldType.OY)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  BinaryPart clone() => BinaryPart()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  BinaryPart copyWith(void Function(BinaryPart) updates) => super.copyWith((message) => updates(message as BinaryPart)) as BinaryPart;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static BinaryPart create() => BinaryPart._();
+  BinaryPart createEmptyInstance() => create();
+  static $pb.PbList<BinaryPart> createRepeated() => $pb.PbList<BinaryPart>();
+  @$core.pragma('dart2js:noInline')
+  static BinaryPart getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BinaryPart>(create);
+  static BinaryPart? _defaultInstance;
+
+  /// 扩展名
+  @$pb.TagNumber(1)
+  $core.String get ext => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set ext($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasExt() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearExt() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.int> get data => $_getN(1);
+  @$pb.TagNumber(2)
+  set data($core.List<$core.int> v) { $_setBytes(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasData() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearData() => clearField(2);
+
+  /// 总字节数
+  @$pb.TagNumber(3)
+  $core.int get allCount => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set allCount($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasAllCount() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearAllCount() => clearField(3);
+
+  /// 加密key
+  @$pb.TagNumber(4)
+  $core.List<$core.int> get nonce => $_getN(3);
+  @$pb.TagNumber(4)
+  set nonce($core.List<$core.int> v) { $_setBytes(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasNonce() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearNonce() => clearField(4);
+}
+
+class BinaryPartV2 extends $pb.GeneratedMessage {
+  factory BinaryPartV2({
+    $core.List<$core.int>? data,
+  }) {
+    final $result = create();
+    if (data != null) {
+      $result.data = data;
+    }
+    return $result;
+  }
+  BinaryPartV2._() : super();
+  factory BinaryPartV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory BinaryPartV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BinaryPartV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'data', $pb.PbFieldType.OY)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  BinaryPartV2 clone() => BinaryPartV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  BinaryPartV2 copyWith(void Function(BinaryPartV2) updates) => super.copyWith((message) => updates(message as BinaryPartV2)) as BinaryPartV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static BinaryPartV2 create() => BinaryPartV2._();
+  BinaryPartV2 createEmptyInstance() => create();
+  static $pb.PbList<BinaryPartV2> createRepeated() => $pb.PbList<BinaryPartV2>();
+  @$core.pragma('dart2js:noInline')
+  static BinaryPartV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BinaryPartV2>(create);
+  static BinaryPartV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<$core.int> get data => $_getN(0);
+  @$pb.TagNumber(1)
+  set data($core.List<$core.int> v) { $_setBytes(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasData() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearData() => clearField(1);
+}
+
+class Image extends $pb.GeneratedMessage {
+  factory Image({
+    $core.String? ext,
+    $core.List<$core.int>? data,
+  }) {
+    final $result = create();
+    if (ext != null) {
+      $result.ext = ext;
+    }
+    if (data != null) {
+      $result.data = data;
+    }
+    return $result;
+  }
+  Image._() : super();
+  factory Image.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory Image.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Image', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'ext')
+    ..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'data', $pb.PbFieldType.OY)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  Image clone() => Image()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  Image copyWith(void Function(Image) updates) => super.copyWith((message) => updates(message as Image)) as Image;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static Image create() => Image._();
+  Image createEmptyInstance() => create();
+  static $pb.PbList<Image> createRepeated() => $pb.PbList<Image>();
+  @$core.pragma('dart2js:noInline')
+  static Image getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Image>(create);
+  static Image? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get ext => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set ext($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasExt() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearExt() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.int> get data => $_getN(1);
+  @$pb.TagNumber(2)
+  set data($core.List<$core.int> v) { $_setBytes(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasData() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearData() => clearField(2);
+}
+
+class StatusEditRequest extends $pb.GeneratedMessage {
+  factory StatusEditRequest({
+    $fixnum.Int64? id,
+    StatusType? status,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (status != null) {
+      $result.status = status;
+    }
+    return $result;
+  }
+  StatusEditRequest._() : super();
+  factory StatusEditRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory StatusEditRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'StatusEditRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..e<StatusType>(2, _omitFieldNames ? '' : 'status', $pb.PbFieldType.OE, defaultOrMaker: StatusType.UnKnowStatus, valueOf: StatusType.valueOf, enumValues: StatusType.values)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  StatusEditRequest clone() => StatusEditRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  StatusEditRequest copyWith(void Function(StatusEditRequest) updates) => super.copyWith((message) => updates(message as StatusEditRequest)) as StatusEditRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static StatusEditRequest create() => StatusEditRequest._();
+  StatusEditRequest createEmptyInstance() => create();
+  static $pb.PbList<StatusEditRequest> createRepeated() => $pb.PbList<StatusEditRequest>();
+  @$core.pragma('dart2js:noInline')
+  static StatusEditRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<StatusEditRequest>(create);
+  static StatusEditRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  StatusType get status => $_getN(1);
+  @$pb.TagNumber(2)
+  set status(StatusType v) { setField(2, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasStatus() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearStatus() => clearField(2);
+}
+
+/// 路线详情信息
+class CourseInfo extends $pb.GeneratedMessage {
+  factory CourseInfo({
+    $core.int? id,
+    $core.String? name,
+    $core.int? totalControlNum,
+    $core.int? maxRange,
+    $core.Iterable<ControlPoint>? controlPointSortedList,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (name != null) {
+      $result.name = name;
+    }
+    if (totalControlNum != null) {
+      $result.totalControlNum = totalControlNum;
+    }
+    if (maxRange != null) {
+      $result.maxRange = maxRange;
+    }
+    if (controlPointSortedList != null) {
+      $result.controlPointSortedList.addAll(controlPointSortedList);
+    }
+    return $result;
+  }
+  CourseInfo._() : super();
+  factory CourseInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory CourseInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CourseInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'id', $pb.PbFieldType.O3)
+    ..aOS(2, _omitFieldNames ? '' : 'name')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'totalControlNum', $pb.PbFieldType.O3, protoName: 'totalControlNum')
+    ..a<$core.int>(4, _omitFieldNames ? '' : 'maxRange', $pb.PbFieldType.O3, protoName: 'maxRange')
+    ..pc<ControlPoint>(5, _omitFieldNames ? '' : 'controlPointSortedList', $pb.PbFieldType.PM, subBuilder: ControlPoint.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  CourseInfo clone() => CourseInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  CourseInfo copyWith(void Function(CourseInfo) updates) => super.copyWith((message) => updates(message as CourseInfo)) as CourseInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static CourseInfo create() => CourseInfo._();
+  CourseInfo createEmptyInstance() => create();
+  static $pb.PbList<CourseInfo> createRepeated() => $pb.PbList<CourseInfo>();
+  @$core.pragma('dart2js:noInline')
+  static CourseInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<CourseInfo>(create);
+  static CourseInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get id => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set id($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get name => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set name($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get totalControlNum => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set totalControlNum($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasTotalControlNum() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearTotalControlNum() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.int get maxRange => $_getIZ(3);
+  @$pb.TagNumber(4)
+  set maxRange($core.int v) { $_setSignedInt32(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasMaxRange() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearMaxRange() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.List<ControlPoint> get controlPointSortedList => $_getList(4);
+}
+
+class ControlPoint extends $pb.GeneratedMessage {
+  factory ControlPoint({
+    $fixnum.Int64? id,
+    ControlPointInfo? info,
+    $core.Iterable<$core.String>? nfcIdList,
+    $fixnum.Int64? onMapX,
+    $fixnum.Int64? onMapY,
+    $core.String? sn,
+    Position? ciPosition,
+    Position? mapPosition,
+    $core.int? category,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (info != null) {
+      $result.info = info;
+    }
+    if (nfcIdList != null) {
+      $result.nfcIdList.addAll(nfcIdList);
+    }
+    if (onMapX != null) {
+      $result.onMapX = onMapX;
+    }
+    if (onMapY != null) {
+      $result.onMapY = onMapY;
+    }
+    if (sn != null) {
+      $result.sn = sn;
+    }
+    if (ciPosition != null) {
+      $result.ciPosition = ciPosition;
+    }
+    if (mapPosition != null) {
+      $result.mapPosition = mapPosition;
+    }
+    if (category != null) {
+      $result.category = category;
+    }
+    return $result;
+  }
+  ControlPoint._() : super();
+  factory ControlPoint.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ControlPoint.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ControlPoint', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..aOM<ControlPointInfo>(2, _omitFieldNames ? '' : 'info', subBuilder: ControlPointInfo.create)
+    ..pPS(3, _omitFieldNames ? '' : 'nfcIdList')
+    ..aInt64(4, _omitFieldNames ? '' : 'onMapX')
+    ..aInt64(5, _omitFieldNames ? '' : 'onMapY')
+    ..aOS(6, _omitFieldNames ? '' : 'sn')
+    ..aOM<Position>(7, _omitFieldNames ? '' : 'ciPosition', protoName: 'ciPosition', subBuilder: Position.create)
+    ..aOM<Position>(8, _omitFieldNames ? '' : 'mapPosition', protoName: 'mapPosition', subBuilder: Position.create)
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'category', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ControlPoint clone() => ControlPoint()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ControlPoint copyWith(void Function(ControlPoint) updates) => super.copyWith((message) => updates(message as ControlPoint)) as ControlPoint;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ControlPoint create() => ControlPoint._();
+  ControlPoint createEmptyInstance() => create();
+  static $pb.PbList<ControlPoint> createRepeated() => $pb.PbList<ControlPoint>();
+  @$core.pragma('dart2js:noInline')
+  static ControlPoint getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ControlPoint>(create);
+  static ControlPoint? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  ControlPointInfo get info => $_getN(1);
+  @$pb.TagNumber(2)
+  set info(ControlPointInfo v) { setField(2, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasInfo() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearInfo() => clearField(2);
+  @$pb.TagNumber(2)
+  ControlPointInfo ensureInfo() => $_ensure(1);
+
+  @$pb.TagNumber(3)
+  $core.List<$core.String> get nfcIdList => $_getList(2);
+
+  @$pb.TagNumber(4)
+  $fixnum.Int64 get onMapX => $_getI64(3);
+  @$pb.TagNumber(4)
+  set onMapX($fixnum.Int64 v) { $_setInt64(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasOnMapX() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearOnMapX() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $fixnum.Int64 get onMapY => $_getI64(4);
+  @$pb.TagNumber(5)
+  set onMapY($fixnum.Int64 v) { $_setInt64(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasOnMapY() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearOnMapY() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.String get sn => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set sn($core.String v) { $_setString(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasSn() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearSn() => clearField(6);
+
+  @$pb.TagNumber(7)
+  Position get ciPosition => $_getN(6);
+  @$pb.TagNumber(7)
+  set ciPosition(Position v) { setField(7, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasCiPosition() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearCiPosition() => clearField(7);
+  @$pb.TagNumber(7)
+  Position ensureCiPosition() => $_ensure(6);
+
+  @$pb.TagNumber(8)
+  Position get mapPosition => $_getN(7);
+  @$pb.TagNumber(8)
+  set mapPosition(Position v) { setField(8, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasMapPosition() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearMapPosition() => clearField(8);
+  @$pb.TagNumber(8)
+  Position ensureMapPosition() => $_ensure(7);
+
+  @$pb.TagNumber(9)
+  $core.int get category => $_getIZ(8);
+  @$pb.TagNumber(9)
+  set category($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasCategory() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearCategory() => clearField(9);
+}
+
+class ControlPointSimple extends $pb.GeneratedMessage {
+  factory ControlPointSimple({
+    $fixnum.Int64? id,
+    $core.Iterable<$core.String>? nfcIdList,
+    $core.String? sn,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (nfcIdList != null) {
+      $result.nfcIdList.addAll(nfcIdList);
+    }
+    if (sn != null) {
+      $result.sn = sn;
+    }
+    return $result;
+  }
+  ControlPointSimple._() : super();
+  factory ControlPointSimple.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ControlPointSimple.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ControlPointSimple', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..pPS(2, _omitFieldNames ? '' : 'nfcIdList')
+    ..aOS(3, _omitFieldNames ? '' : 'sn')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ControlPointSimple clone() => ControlPointSimple()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ControlPointSimple copyWith(void Function(ControlPointSimple) updates) => super.copyWith((message) => updates(message as ControlPointSimple)) as ControlPointSimple;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ControlPointSimple create() => ControlPointSimple._();
+  ControlPointSimple createEmptyInstance() => create();
+  static $pb.PbList<ControlPointSimple> createRepeated() => $pb.PbList<ControlPointSimple>();
+  @$core.pragma('dart2js:noInline')
+  static ControlPointSimple getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ControlPointSimple>(create);
+  static ControlPointSimple? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.List<$core.String> get nfcIdList => $_getList(1);
+
+  @$pb.TagNumber(3)
+  $core.String get sn => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set sn($core.String v) { $_setString(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasSn() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearSn() => clearField(3);
+}
+
+class GameDetailV2Reply extends $pb.GeneratedMessage {
+  factory GameDetailV2Reply({
+    $core.int? gameId,
+    $core.bool? isComplete,
+    $0.Timestamp? startAt,
+    $core.Iterable<ControlPointGameInfo>? checkedSortedList,
+    $2.Duration? duration,
+    $0.Timestamp? stopAt,
+    $core.String? qrJsonCode,
+    $core.bool? isSuccess,
+    $core.int? sysPoint,
+    $core.int? totalPointNum,
+    $core.String? actName,
+    $core.int? distance,
+    $core.int? pace,
+    $core.int? avgHr,
+    $core.int? calorie,
+    $core.int? ck,
+    $core.double? ei,
+    $core.int? stepNum,
+    $core.Iterable<GameGpsInfo>? gameGpsInfo,
+    NetImage? mapZip,
+    AnswerHistoryInfo? answerHistory,
+    $core.Iterable<HeartRate>? gameHrInfos,
+    GameHistorySource? source,
+    $core.int? actId,
+    OrienteerBodyInfo? body,
+  }) {
+    final $result = create();
+    if (gameId != null) {
+      $result.gameId = gameId;
+    }
+    if (isComplete != null) {
+      $result.isComplete = isComplete;
+    }
+    if (startAt != null) {
+      $result.startAt = startAt;
+    }
+    if (checkedSortedList != null) {
+      $result.checkedSortedList.addAll(checkedSortedList);
+    }
+    if (duration != null) {
+      $result.duration = duration;
+    }
+    if (stopAt != null) {
+      $result.stopAt = stopAt;
+    }
+    if (qrJsonCode != null) {
+      $result.qrJsonCode = qrJsonCode;
+    }
+    if (isSuccess != null) {
+      $result.isSuccess = isSuccess;
+    }
+    if (sysPoint != null) {
+      $result.sysPoint = sysPoint;
+    }
+    if (totalPointNum != null) {
+      $result.totalPointNum = totalPointNum;
+    }
+    if (actName != null) {
+      $result.actName = actName;
+    }
+    if (distance != null) {
+      $result.distance = distance;
+    }
+    if (pace != null) {
+      $result.pace = pace;
+    }
+    if (avgHr != null) {
+      $result.avgHr = avgHr;
+    }
+    if (calorie != null) {
+      $result.calorie = calorie;
+    }
+    if (ck != null) {
+      $result.ck = ck;
+    }
+    if (ei != null) {
+      $result.ei = ei;
+    }
+    if (stepNum != null) {
+      $result.stepNum = stepNum;
+    }
+    if (gameGpsInfo != null) {
+      $result.gameGpsInfo.addAll(gameGpsInfo);
+    }
+    if (mapZip != null) {
+      $result.mapZip = mapZip;
+    }
+    if (answerHistory != null) {
+      $result.answerHistory = answerHistory;
+    }
+    if (gameHrInfos != null) {
+      $result.gameHrInfos.addAll(gameHrInfos);
+    }
+    if (source != null) {
+      $result.source = source;
+    }
+    if (actId != null) {
+      $result.actId = actId;
+    }
+    if (body != null) {
+      $result.body = body;
+    }
+    return $result;
+  }
+  GameDetailV2Reply._() : super();
+  factory GameDetailV2Reply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory GameDetailV2Reply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GameDetailV2Reply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'gameId', $pb.PbFieldType.O3)
+    ..aOB(2, _omitFieldNames ? '' : 'isComplete', protoName: 'isComplete')
+    ..aOM<$0.Timestamp>(3, _omitFieldNames ? '' : 'startAt', subBuilder: $0.Timestamp.create)
+    ..pc<ControlPointGameInfo>(4, _omitFieldNames ? '' : 'checkedSortedList', $pb.PbFieldType.PM, subBuilder: ControlPointGameInfo.create)
+    ..aOM<$2.Duration>(5, _omitFieldNames ? '' : 'duration', subBuilder: $2.Duration.create)
+    ..aOM<$0.Timestamp>(6, _omitFieldNames ? '' : 'stopAt', subBuilder: $0.Timestamp.create)
+    ..aOS(7, _omitFieldNames ? '' : 'qrJsonCode', protoName: 'qrJsonCode')
+    ..aOB(8, _omitFieldNames ? '' : 'isSuccess', protoName: 'isSuccess')
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'sysPoint', $pb.PbFieldType.O3, protoName: 'sysPoint')
+    ..a<$core.int>(10, _omitFieldNames ? '' : 'totalPointNum', $pb.PbFieldType.O3, protoName: 'totalPointNum')
+    ..aOS(13, _omitFieldNames ? '' : 'actName', protoName: 'actName')
+    ..a<$core.int>(14, _omitFieldNames ? '' : 'distance', $pb.PbFieldType.O3)
+    ..a<$core.int>(15, _omitFieldNames ? '' : 'pace', $pb.PbFieldType.O3)
+    ..a<$core.int>(16, _omitFieldNames ? '' : 'avgHr', $pb.PbFieldType.O3, protoName: 'avgHr')
+    ..a<$core.int>(17, _omitFieldNames ? '' : 'Calorie', $pb.PbFieldType.O3, protoName: 'Calorie')
+    ..a<$core.int>(18, _omitFieldNames ? '' : 'Ck', $pb.PbFieldType.O3, protoName: 'Ck')
+    ..a<$core.double>(19, _omitFieldNames ? '' : 'Ei', $pb.PbFieldType.OF, protoName: 'Ei')
+    ..a<$core.int>(20, _omitFieldNames ? '' : 'stepNum', $pb.PbFieldType.O3, protoName: 'stepNum')
+    ..pc<GameGpsInfo>(21, _omitFieldNames ? '' : 'gameGpsInfo', $pb.PbFieldType.PM, protoName: 'gameGpsInfo', subBuilder: GameGpsInfo.create)
+    ..aOM<NetImage>(22, _omitFieldNames ? '' : 'mapZip', subBuilder: NetImage.create)
+    ..aOM<AnswerHistoryInfo>(23, _omitFieldNames ? '' : 'answerHistory', protoName: 'answerHistory', subBuilder: AnswerHistoryInfo.create)
+    ..pc<HeartRate>(24, _omitFieldNames ? '' : 'gameHrInfos', $pb.PbFieldType.PM, protoName: 'gameHrInfos', subBuilder: HeartRate.create)
+    ..e<GameHistorySource>(25, _omitFieldNames ? '' : 'source', $pb.PbFieldType.OE, defaultOrMaker: GameHistorySource.GameHistorySourcAll, valueOf: GameHistorySource.valueOf, enumValues: GameHistorySource.values)
+    ..a<$core.int>(26, _omitFieldNames ? '' : 'actId', $pb.PbFieldType.O3, protoName: 'actId')
+    ..aOM<OrienteerBodyInfo>(27, _omitFieldNames ? '' : 'body', subBuilder: OrienteerBodyInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GameDetailV2Reply clone() => GameDetailV2Reply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GameDetailV2Reply copyWith(void Function(GameDetailV2Reply) updates) => super.copyWith((message) => updates(message as GameDetailV2Reply)) as GameDetailV2Reply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static GameDetailV2Reply create() => GameDetailV2Reply._();
+  GameDetailV2Reply createEmptyInstance() => create();
+  static $pb.PbList<GameDetailV2Reply> createRepeated() => $pb.PbList<GameDetailV2Reply>();
+  @$core.pragma('dart2js:noInline')
+  static GameDetailV2Reply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<GameDetailV2Reply>(create);
+  static GameDetailV2Reply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get gameId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set gameId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasGameId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearGameId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.bool get isComplete => $_getBF(1);
+  @$pb.TagNumber(2)
+  set isComplete($core.bool v) { $_setBool(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasIsComplete() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearIsComplete() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $0.Timestamp get startAt => $_getN(2);
+  @$pb.TagNumber(3)
+  set startAt($0.Timestamp v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasStartAt() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearStartAt() => clearField(3);
+  @$pb.TagNumber(3)
+  $0.Timestamp ensureStartAt() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $core.List<ControlPointGameInfo> get checkedSortedList => $_getList(3);
+
+  @$pb.TagNumber(5)
+  $2.Duration get duration => $_getN(4);
+  @$pb.TagNumber(5)
+  set duration($2.Duration v) { setField(5, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasDuration() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearDuration() => clearField(5);
+  @$pb.TagNumber(5)
+  $2.Duration ensureDuration() => $_ensure(4);
+
+  @$pb.TagNumber(6)
+  $0.Timestamp get stopAt => $_getN(5);
+  @$pb.TagNumber(6)
+  set stopAt($0.Timestamp v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasStopAt() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearStopAt() => clearField(6);
+  @$pb.TagNumber(6)
+  $0.Timestamp ensureStopAt() => $_ensure(5);
+
+  @$pb.TagNumber(7)
+  $core.String get qrJsonCode => $_getSZ(6);
+  @$pb.TagNumber(7)
+  set qrJsonCode($core.String v) { $_setString(6, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasQrJsonCode() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearQrJsonCode() => clearField(7);
+
+  @$pb.TagNumber(8)
+  $core.bool get isSuccess => $_getBF(7);
+  @$pb.TagNumber(8)
+  set isSuccess($core.bool v) { $_setBool(7, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasIsSuccess() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearIsSuccess() => clearField(8);
+
+  @$pb.TagNumber(9)
+  $core.int get sysPoint => $_getIZ(8);
+  @$pb.TagNumber(9)
+  set sysPoint($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasSysPoint() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearSysPoint() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.int get totalPointNum => $_getIZ(9);
+  @$pb.TagNumber(10)
+  set totalPointNum($core.int v) { $_setSignedInt32(9, v); }
+  @$pb.TagNumber(10)
+  $core.bool hasTotalPointNum() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearTotalPointNum() => clearField(10);
+
+  @$pb.TagNumber(13)
+  $core.String get actName => $_getSZ(10);
+  @$pb.TagNumber(13)
+  set actName($core.String v) { $_setString(10, v); }
+  @$pb.TagNumber(13)
+  $core.bool hasActName() => $_has(10);
+  @$pb.TagNumber(13)
+  void clearActName() => clearField(13);
+
+  @$pb.TagNumber(14)
+  $core.int get distance => $_getIZ(11);
+  @$pb.TagNumber(14)
+  set distance($core.int v) { $_setSignedInt32(11, v); }
+  @$pb.TagNumber(14)
+  $core.bool hasDistance() => $_has(11);
+  @$pb.TagNumber(14)
+  void clearDistance() => clearField(14);
+
+  @$pb.TagNumber(15)
+  $core.int get pace => $_getIZ(12);
+  @$pb.TagNumber(15)
+  set pace($core.int v) { $_setSignedInt32(12, v); }
+  @$pb.TagNumber(15)
+  $core.bool hasPace() => $_has(12);
+  @$pb.TagNumber(15)
+  void clearPace() => clearField(15);
+
+  @$pb.TagNumber(16)
+  $core.int get avgHr => $_getIZ(13);
+  @$pb.TagNumber(16)
+  set avgHr($core.int v) { $_setSignedInt32(13, v); }
+  @$pb.TagNumber(16)
+  $core.bool hasAvgHr() => $_has(13);
+  @$pb.TagNumber(16)
+  void clearAvgHr() => clearField(16);
+
+  @$pb.TagNumber(17)
+  $core.int get calorie => $_getIZ(14);
+  @$pb.TagNumber(17)
+  set calorie($core.int v) { $_setSignedInt32(14, v); }
+  @$pb.TagNumber(17)
+  $core.bool hasCalorie() => $_has(14);
+  @$pb.TagNumber(17)
+  void clearCalorie() => clearField(17);
+
+  @$pb.TagNumber(18)
+  $core.int get ck => $_getIZ(15);
+  @$pb.TagNumber(18)
+  set ck($core.int v) { $_setSignedInt32(15, v); }
+  @$pb.TagNumber(18)
+  $core.bool hasCk() => $_has(15);
+  @$pb.TagNumber(18)
+  void clearCk() => clearField(18);
+
+  @$pb.TagNumber(19)
+  $core.double get ei => $_getN(16);
+  @$pb.TagNumber(19)
+  set ei($core.double v) { $_setFloat(16, v); }
+  @$pb.TagNumber(19)
+  $core.bool hasEi() => $_has(16);
+  @$pb.TagNumber(19)
+  void clearEi() => clearField(19);
+
+  @$pb.TagNumber(20)
+  $core.int get stepNum => $_getIZ(17);
+  @$pb.TagNumber(20)
+  set stepNum($core.int v) { $_setSignedInt32(17, v); }
+  @$pb.TagNumber(20)
+  $core.bool hasStepNum() => $_has(17);
+  @$pb.TagNumber(20)
+  void clearStepNum() => clearField(20);
+
+  @$pb.TagNumber(21)
+  $core.List<GameGpsInfo> get gameGpsInfo => $_getList(18);
+
+  @$pb.TagNumber(22)
+  NetImage get mapZip => $_getN(19);
+  @$pb.TagNumber(22)
+  set mapZip(NetImage v) { setField(22, v); }
+  @$pb.TagNumber(22)
+  $core.bool hasMapZip() => $_has(19);
+  @$pb.TagNumber(22)
+  void clearMapZip() => clearField(22);
+  @$pb.TagNumber(22)
+  NetImage ensureMapZip() => $_ensure(19);
+
+  @$pb.TagNumber(23)
+  AnswerHistoryInfo get answerHistory => $_getN(20);
+  @$pb.TagNumber(23)
+  set answerHistory(AnswerHistoryInfo v) { setField(23, v); }
+  @$pb.TagNumber(23)
+  $core.bool hasAnswerHistory() => $_has(20);
+  @$pb.TagNumber(23)
+  void clearAnswerHistory() => clearField(23);
+  @$pb.TagNumber(23)
+  AnswerHistoryInfo ensureAnswerHistory() => $_ensure(20);
+
+  @$pb.TagNumber(24)
+  $core.List<HeartRate> get gameHrInfos => $_getList(21);
+
+  @$pb.TagNumber(25)
+  GameHistorySource get source => $_getN(22);
+  @$pb.TagNumber(25)
+  set source(GameHistorySource v) { setField(25, v); }
+  @$pb.TagNumber(25)
+  $core.bool hasSource() => $_has(22);
+  @$pb.TagNumber(25)
+  void clearSource() => clearField(25);
+
+  @$pb.TagNumber(26)
+  $core.int get actId => $_getIZ(23);
+  @$pb.TagNumber(26)
+  set actId($core.int v) { $_setSignedInt32(23, v); }
+  @$pb.TagNumber(26)
+  $core.bool hasActId() => $_has(23);
+  @$pb.TagNumber(26)
+  void clearActId() => clearField(26);
+
+  @$pb.TagNumber(27)
+  OrienteerBodyInfo get body => $_getN(24);
+  @$pb.TagNumber(27)
+  set body(OrienteerBodyInfo v) { setField(27, v); }
+  @$pb.TagNumber(27)
+  $core.bool hasBody() => $_has(24);
+  @$pb.TagNumber(27)
+  void clearBody() => clearField(27);
+  @$pb.TagNumber(27)
+  OrienteerBodyInfo ensureBody() => $_ensure(24);
+}
+
+class OrienteerBodyInfo extends $pb.GeneratedMessage {
+  factory OrienteerBodyInfo({
+    $core.int? oId,
+    User_Sex? sex,
+    $core.int? birthdayYear,
+    $core.int? heightMillimeter,
+    $core.int? weightGram,
+    $core.int? staticHr,
+  }) {
+    final $result = create();
+    if (oId != null) {
+      $result.oId = oId;
+    }
+    if (sex != null) {
+      $result.sex = sex;
+    }
+    if (birthdayYear != null) {
+      $result.birthdayYear = birthdayYear;
+    }
+    if (heightMillimeter != null) {
+      $result.heightMillimeter = heightMillimeter;
+    }
+    if (weightGram != null) {
+      $result.weightGram = weightGram;
+    }
+    if (staticHr != null) {
+      $result.staticHr = staticHr;
+    }
+    return $result;
+  }
+  OrienteerBodyInfo._() : super();
+  factory OrienteerBodyInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory OrienteerBodyInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerBodyInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'oId', $pb.PbFieldType.O3, protoName: 'oId')
+    ..e<User_Sex>(2, _omitFieldNames ? '' : 'sex', $pb.PbFieldType.OE, defaultOrMaker: User_Sex.UnDefine, valueOf: User_Sex.valueOf, enumValues: User_Sex.values)
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'birthdayYear', $pb.PbFieldType.O3, protoName: 'birthdayYear')
+    ..a<$core.int>(4, _omitFieldNames ? '' : 'heightMillimeter', $pb.PbFieldType.O3, protoName: 'heightMillimeter')
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'weightGram', $pb.PbFieldType.O3, protoName: 'weightGram')
+    ..a<$core.int>(6, _omitFieldNames ? '' : 'staticHr', $pb.PbFieldType.O3, protoName: 'staticHr')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  OrienteerBodyInfo clone() => OrienteerBodyInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  OrienteerBodyInfo copyWith(void Function(OrienteerBodyInfo) updates) => super.copyWith((message) => updates(message as OrienteerBodyInfo)) as OrienteerBodyInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static OrienteerBodyInfo create() => OrienteerBodyInfo._();
+  OrienteerBodyInfo createEmptyInstance() => create();
+  static $pb.PbList<OrienteerBodyInfo> createRepeated() => $pb.PbList<OrienteerBodyInfo>();
+  @$core.pragma('dart2js:noInline')
+  static OrienteerBodyInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OrienteerBodyInfo>(create);
+  static OrienteerBodyInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get oId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set oId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasOId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearOId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  User_Sex get sex => $_getN(1);
+  @$pb.TagNumber(2)
+  set sex(User_Sex v) { setField(2, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasSex() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearSex() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get birthdayYear => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set birthdayYear($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasBirthdayYear() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearBirthdayYear() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.int get heightMillimeter => $_getIZ(3);
+  @$pb.TagNumber(4)
+  set heightMillimeter($core.int v) { $_setSignedInt32(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasHeightMillimeter() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearHeightMillimeter() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.int get weightGram => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set weightGram($core.int v) { $_setSignedInt32(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasWeightGram() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearWeightGram() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.int get staticHr => $_getIZ(5);
+  @$pb.TagNumber(6)
+  set staticHr($core.int v) { $_setSignedInt32(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasStaticHr() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearStaticHr() => clearField(6);
+}
+
+class ControlPointGameInfo extends $pb.GeneratedMessage {
+  factory ControlPointGameInfo({
+    $fixnum.Int64? id,
+    $core.String? sn,
+    CType? cType,
+    $core.int? orderNo,
+    $core.bool? isCheckSuccess,
+    $2.Duration? checkAfterLast,
+    $0.Timestamp? punchTime,
+    Position? position,
+    $core.int? disAfterLast,
+    $core.int? disStraightAfterLast,
+    $core.int? paceAfterLast,
+    $core.int? paceAfterStart,
+    $2.Duration? checkAfterStart,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (sn != null) {
+      $result.sn = sn;
+    }
+    if (cType != null) {
+      $result.cType = cType;
+    }
+    if (orderNo != null) {
+      $result.orderNo = orderNo;
+    }
+    if (isCheckSuccess != null) {
+      $result.isCheckSuccess = isCheckSuccess;
+    }
+    if (checkAfterLast != null) {
+      $result.checkAfterLast = checkAfterLast;
+    }
+    if (punchTime != null) {
+      $result.punchTime = punchTime;
+    }
+    if (position != null) {
+      $result.position = position;
+    }
+    if (disAfterLast != null) {
+      $result.disAfterLast = disAfterLast;
+    }
+    if (disStraightAfterLast != null) {
+      $result.disStraightAfterLast = disStraightAfterLast;
+    }
+    if (paceAfterLast != null) {
+      $result.paceAfterLast = paceAfterLast;
+    }
+    if (paceAfterStart != null) {
+      $result.paceAfterStart = paceAfterStart;
+    }
+    if (checkAfterStart != null) {
+      $result.checkAfterStart = checkAfterStart;
+    }
+    return $result;
+  }
+  ControlPointGameInfo._() : super();
+  factory ControlPointGameInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ControlPointGameInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ControlPointGameInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..aOS(2, _omitFieldNames ? '' : 'sn')
+    ..e<CType>(3, _omitFieldNames ? '' : 'cType', $pb.PbFieldType.OE, protoName: 'cType', defaultOrMaker: CType.UnKnowType, valueOf: CType.valueOf, enumValues: CType.values)
+    ..a<$core.int>(4, _omitFieldNames ? '' : 'orderNo', $pb.PbFieldType.O3, protoName: 'orderNo')
+    ..aOB(5, _omitFieldNames ? '' : 'isCheckSuccess')
+    ..aOM<$2.Duration>(6, _omitFieldNames ? '' : 'checkAfterLast', subBuilder: $2.Duration.create)
+    ..aOM<$0.Timestamp>(7, _omitFieldNames ? '' : 'punchTime', protoName: 'punchTime', subBuilder: $0.Timestamp.create)
+    ..aOM<Position>(8, _omitFieldNames ? '' : 'position', subBuilder: Position.create)
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'disAfterLast', $pb.PbFieldType.O3, protoName: 'disAfterLast')
+    ..a<$core.int>(10, _omitFieldNames ? '' : 'disStraightAfterLast', $pb.PbFieldType.O3, protoName: 'disStraightAfterLast')
+    ..a<$core.int>(11, _omitFieldNames ? '' : 'paceAfterLast', $pb.PbFieldType.O3, protoName: 'paceAfterLast')
+    ..a<$core.int>(12, _omitFieldNames ? '' : 'paceAfterStart', $pb.PbFieldType.O3, protoName: 'paceAfterStart')
+    ..aOM<$2.Duration>(13, _omitFieldNames ? '' : 'checkAfterStart', subBuilder: $2.Duration.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ControlPointGameInfo clone() => ControlPointGameInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ControlPointGameInfo copyWith(void Function(ControlPointGameInfo) updates) => super.copyWith((message) => updates(message as ControlPointGameInfo)) as ControlPointGameInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ControlPointGameInfo create() => ControlPointGameInfo._();
+  ControlPointGameInfo createEmptyInstance() => create();
+  static $pb.PbList<ControlPointGameInfo> createRepeated() => $pb.PbList<ControlPointGameInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ControlPointGameInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ControlPointGameInfo>(create);
+  static ControlPointGameInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get sn => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set sn($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasSn() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearSn() => clearField(2);
+
+  @$pb.TagNumber(3)
+  CType get cType => $_getN(2);
+  @$pb.TagNumber(3)
+  set cType(CType v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasCType() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearCType() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.int get orderNo => $_getIZ(3);
+  @$pb.TagNumber(4)
+  set orderNo($core.int v) { $_setSignedInt32(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasOrderNo() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearOrderNo() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.bool get isCheckSuccess => $_getBF(4);
+  @$pb.TagNumber(5)
+  set isCheckSuccess($core.bool v) { $_setBool(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasIsCheckSuccess() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearIsCheckSuccess() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $2.Duration get checkAfterLast => $_getN(5);
+  @$pb.TagNumber(6)
+  set checkAfterLast($2.Duration v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasCheckAfterLast() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearCheckAfterLast() => clearField(6);
+  @$pb.TagNumber(6)
+  $2.Duration ensureCheckAfterLast() => $_ensure(5);
+
+  @$pb.TagNumber(7)
+  $0.Timestamp get punchTime => $_getN(6);
+  @$pb.TagNumber(7)
+  set punchTime($0.Timestamp v) { setField(7, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasPunchTime() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearPunchTime() => clearField(7);
+  @$pb.TagNumber(7)
+  $0.Timestamp ensurePunchTime() => $_ensure(6);
+
+  @$pb.TagNumber(8)
+  Position get position => $_getN(7);
+  @$pb.TagNumber(8)
+  set position(Position v) { setField(8, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasPosition() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearPosition() => clearField(8);
+  @$pb.TagNumber(8)
+  Position ensurePosition() => $_ensure(7);
+
+  @$pb.TagNumber(9)
+  $core.int get disAfterLast => $_getIZ(8);
+  @$pb.TagNumber(9)
+  set disAfterLast($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasDisAfterLast() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearDisAfterLast() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.int get disStraightAfterLast => $_getIZ(9);
+  @$pb.TagNumber(10)
+  set disStraightAfterLast($core.int v) { $_setSignedInt32(9, v); }
+  @$pb.TagNumber(10)
+  $core.bool hasDisStraightAfterLast() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearDisStraightAfterLast() => clearField(10);
+
+  @$pb.TagNumber(11)
+  $core.int get paceAfterLast => $_getIZ(10);
+  @$pb.TagNumber(11)
+  set paceAfterLast($core.int v) { $_setSignedInt32(10, v); }
+  @$pb.TagNumber(11)
+  $core.bool hasPaceAfterLast() => $_has(10);
+  @$pb.TagNumber(11)
+  void clearPaceAfterLast() => clearField(11);
+
+  @$pb.TagNumber(12)
+  $core.int get paceAfterStart => $_getIZ(11);
+  @$pb.TagNumber(12)
+  set paceAfterStart($core.int v) { $_setSignedInt32(11, v); }
+  @$pb.TagNumber(12)
+  $core.bool hasPaceAfterStart() => $_has(11);
+  @$pb.TagNumber(12)
+  void clearPaceAfterStart() => clearField(12);
+
+  @$pb.TagNumber(13)
+  $2.Duration get checkAfterStart => $_getN(12);
+  @$pb.TagNumber(13)
+  set checkAfterStart($2.Duration v) { setField(13, v); }
+  @$pb.TagNumber(13)
+  $core.bool hasCheckAfterStart() => $_has(12);
+  @$pb.TagNumber(13)
+  void clearCheckAfterStart() => clearField(13);
+  @$pb.TagNumber(13)
+  $2.Duration ensureCheckAfterStart() => $_ensure(12);
+}
+
+class AnswerHistoryInfo extends $pb.GeneratedMessage {
+  factory AnswerHistoryInfo({
+    $core.int? accuracy,
+    $core.int? totalAnswerNum,
+    $core.int? correctAnswerNum,
+    $core.int? ranking,
+    $core.int? rankingDay,
+    $core.Iterable<AnswerDetailInfo>? list,
+    $core.int? rankingSurpass,
+  }) {
+    final $result = create();
+    if (accuracy != null) {
+      $result.accuracy = accuracy;
+    }
+    if (totalAnswerNum != null) {
+      $result.totalAnswerNum = totalAnswerNum;
+    }
+    if (correctAnswerNum != null) {
+      $result.correctAnswerNum = correctAnswerNum;
+    }
+    if (ranking != null) {
+      $result.ranking = ranking;
+    }
+    if (rankingDay != null) {
+      $result.rankingDay = rankingDay;
+    }
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    if (rankingSurpass != null) {
+      $result.rankingSurpass = rankingSurpass;
+    }
+    return $result;
+  }
+  AnswerHistoryInfo._() : super();
+  factory AnswerHistoryInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory AnswerHistoryInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'AnswerHistoryInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'accuracy', $pb.PbFieldType.O3)
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'totalAnswerNum', $pb.PbFieldType.O3, protoName: 'totalAnswerNum')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'correctAnswerNum', $pb.PbFieldType.O3, protoName: 'correctAnswerNum')
+    ..a<$core.int>(4, _omitFieldNames ? '' : 'ranking', $pb.PbFieldType.O3)
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'rankingDay', $pb.PbFieldType.O3, protoName: 'rankingDay')
+    ..pc<AnswerDetailInfo>(6, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: AnswerDetailInfo.create)
+    ..a<$core.int>(7, _omitFieldNames ? '' : 'rankingSurpass', $pb.PbFieldType.O3, protoName: 'rankingSurpass')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  AnswerHistoryInfo clone() => AnswerHistoryInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  AnswerHistoryInfo copyWith(void Function(AnswerHistoryInfo) updates) => super.copyWith((message) => updates(message as AnswerHistoryInfo)) as AnswerHistoryInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static AnswerHistoryInfo create() => AnswerHistoryInfo._();
+  AnswerHistoryInfo createEmptyInstance() => create();
+  static $pb.PbList<AnswerHistoryInfo> createRepeated() => $pb.PbList<AnswerHistoryInfo>();
+  @$core.pragma('dart2js:noInline')
+  static AnswerHistoryInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AnswerHistoryInfo>(create);
+  static AnswerHistoryInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get accuracy => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set accuracy($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasAccuracy() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearAccuracy() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get totalAnswerNum => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set totalAnswerNum($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasTotalAnswerNum() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearTotalAnswerNum() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get correctAnswerNum => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set correctAnswerNum($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasCorrectAnswerNum() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearCorrectAnswerNum() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.int get ranking => $_getIZ(3);
+  @$pb.TagNumber(4)
+  set ranking($core.int v) { $_setSignedInt32(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasRanking() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearRanking() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.int get rankingDay => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set rankingDay($core.int v) { $_setSignedInt32(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasRankingDay() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearRankingDay() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.List<AnswerDetailInfo> get list => $_getList(5);
+
+  @$pb.TagNumber(7)
+  $core.int get rankingSurpass => $_getIZ(6);
+  @$pb.TagNumber(7)
+  set rankingSurpass($core.int v) { $_setSignedInt32(6, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasRankingSurpass() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearRankingSurpass() => clearField(7);
+}
+
+class AnswerDetailInfo extends $pb.GeneratedMessage {
+  factory AnswerDetailInfo({
+    $core.int? qbId,
+    $core.String? question,
+    NetImage? image,
+    $core.Iterable<$core.String>? answer,
+    $core.int? rightAnswerIndex,
+    $core.int? userAnswerIndex,
+    $core.bool? answerCorrect,
+    $core.bool? isAnswer,
+  }) {
+    final $result = create();
+    if (qbId != null) {
+      $result.qbId = qbId;
+    }
+    if (question != null) {
+      $result.question = question;
+    }
+    if (image != null) {
+      $result.image = image;
+    }
+    if (answer != null) {
+      $result.answer.addAll(answer);
+    }
+    if (rightAnswerIndex != null) {
+      $result.rightAnswerIndex = rightAnswerIndex;
+    }
+    if (userAnswerIndex != null) {
+      $result.userAnswerIndex = userAnswerIndex;
+    }
+    if (answerCorrect != null) {
+      $result.answerCorrect = answerCorrect;
+    }
+    if (isAnswer != null) {
+      $result.isAnswer = isAnswer;
+    }
+    return $result;
+  }
+  AnswerDetailInfo._() : super();
+  factory AnswerDetailInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory AnswerDetailInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'AnswerDetailInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'qbId', $pb.PbFieldType.O3, protoName: 'qbId')
+    ..aOS(2, _omitFieldNames ? '' : 'question')
+    ..aOM<NetImage>(3, _omitFieldNames ? '' : 'image', subBuilder: NetImage.create)
+    ..pPS(4, _omitFieldNames ? '' : 'answer')
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'rightAnswerIndex', $pb.PbFieldType.O3, protoName: 'rightAnswerIndex')
+    ..a<$core.int>(6, _omitFieldNames ? '' : 'userAnswerIndex', $pb.PbFieldType.O3, protoName: 'userAnswerIndex')
+    ..aOB(7, _omitFieldNames ? '' : 'answerCorrect', protoName: 'answerCorrect')
+    ..aOB(8, _omitFieldNames ? '' : 'isAnswer', protoName: 'isAnswer')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  AnswerDetailInfo clone() => AnswerDetailInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  AnswerDetailInfo copyWith(void Function(AnswerDetailInfo) updates) => super.copyWith((message) => updates(message as AnswerDetailInfo)) as AnswerDetailInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static AnswerDetailInfo create() => AnswerDetailInfo._();
+  AnswerDetailInfo createEmptyInstance() => create();
+  static $pb.PbList<AnswerDetailInfo> createRepeated() => $pb.PbList<AnswerDetailInfo>();
+  @$core.pragma('dart2js:noInline')
+  static AnswerDetailInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AnswerDetailInfo>(create);
+  static AnswerDetailInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get qbId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set qbId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasQbId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearQbId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get question => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set question($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasQuestion() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearQuestion() => clearField(2);
+
+  @$pb.TagNumber(3)
+  NetImage get image => $_getN(2);
+  @$pb.TagNumber(3)
+  set image(NetImage v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasImage() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearImage() => clearField(3);
+  @$pb.TagNumber(3)
+  NetImage ensureImage() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $core.List<$core.String> get answer => $_getList(3);
+
+  @$pb.TagNumber(5)
+  $core.int get rightAnswerIndex => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set rightAnswerIndex($core.int v) { $_setSignedInt32(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasRightAnswerIndex() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearRightAnswerIndex() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.int get userAnswerIndex => $_getIZ(5);
+  @$pb.TagNumber(6)
+  set userAnswerIndex($core.int v) { $_setSignedInt32(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasUserAnswerIndex() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearUserAnswerIndex() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $core.bool get answerCorrect => $_getBF(6);
+  @$pb.TagNumber(7)
+  set answerCorrect($core.bool v) { $_setBool(6, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasAnswerCorrect() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearAnswerCorrect() => clearField(7);
+
+  @$pb.TagNumber(8)
+  $core.bool get isAnswer => $_getBF(7);
+  @$pb.TagNumber(8)
+  set isAnswer($core.bool v) { $_setBool(7, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasIsAnswer() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearIsAnswer() => clearField(8);
+}
+
+class ToActivityRegusterAddRequest extends $pb.GeneratedMessage {
+  factory ToActivityRegusterAddRequest({
+    $core.String? regName,
+    $fixnum.Int64? startSecond,
+    $fixnum.Int64? endSecond,
+    $core.String? organizer,
+  }) {
+    final $result = create();
+    if (regName != null) {
+      $result.regName = regName;
+    }
+    if (startSecond != null) {
+      $result.startSecond = startSecond;
+    }
+    if (endSecond != null) {
+      $result.endSecond = endSecond;
+    }
+    if (organizer != null) {
+      $result.organizer = organizer;
+    }
+    return $result;
+  }
+  ToActivityRegusterAddRequest._() : super();
+  factory ToActivityRegusterAddRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActivityRegusterAddRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActivityRegusterAddRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'regName', protoName: 'regName')
+    ..aInt64(2, _omitFieldNames ? '' : 'startSecond', protoName: 'startSecond')
+    ..aInt64(3, _omitFieldNames ? '' : 'endSecond', protoName: 'endSecond')
+    ..aOS(4, _omitFieldNames ? '' : 'organizer')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterAddRequest clone() => ToActivityRegusterAddRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterAddRequest copyWith(void Function(ToActivityRegusterAddRequest) updates) => super.copyWith((message) => updates(message as ToActivityRegusterAddRequest)) as ToActivityRegusterAddRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterAddRequest create() => ToActivityRegusterAddRequest._();
+  ToActivityRegusterAddRequest createEmptyInstance() => create();
+  static $pb.PbList<ToActivityRegusterAddRequest> createRepeated() => $pb.PbList<ToActivityRegusterAddRequest>();
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterAddRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActivityRegusterAddRequest>(create);
+  static ToActivityRegusterAddRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get regName => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set regName($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasRegName() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearRegName() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $fixnum.Int64 get startSecond => $_getI64(1);
+  @$pb.TagNumber(2)
+  set startSecond($fixnum.Int64 v) { $_setInt64(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasStartSecond() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearStartSecond() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $fixnum.Int64 get endSecond => $_getI64(2);
+  @$pb.TagNumber(3)
+  set endSecond($fixnum.Int64 v) { $_setInt64(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasEndSecond() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearEndSecond() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get organizer => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set organizer($core.String v) { $_setString(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasOrganizer() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearOrganizer() => clearField(4);
+}
+
+class ToActivityRegusterEditRequest extends $pb.GeneratedMessage {
+  factory ToActivityRegusterEditRequest({
+    $core.int? regId,
+    $core.String? regName,
+    $fixnum.Int64? startSecond,
+    $fixnum.Int64? endSecond,
+    $core.String? organizer,
+  }) {
+    final $result = create();
+    if (regId != null) {
+      $result.regId = regId;
+    }
+    if (regName != null) {
+      $result.regName = regName;
+    }
+    if (startSecond != null) {
+      $result.startSecond = startSecond;
+    }
+    if (endSecond != null) {
+      $result.endSecond = endSecond;
+    }
+    if (organizer != null) {
+      $result.organizer = organizer;
+    }
+    return $result;
+  }
+  ToActivityRegusterEditRequest._() : super();
+  factory ToActivityRegusterEditRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActivityRegusterEditRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActivityRegusterEditRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'regId', $pb.PbFieldType.O3, protoName: 'regId')
+    ..aOS(2, _omitFieldNames ? '' : 'regName', protoName: 'regName')
+    ..aInt64(3, _omitFieldNames ? '' : 'startSecond', protoName: 'startSecond')
+    ..aInt64(4, _omitFieldNames ? '' : 'endSecond', protoName: 'endSecond')
+    ..aOS(5, _omitFieldNames ? '' : 'organizer')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterEditRequest clone() => ToActivityRegusterEditRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterEditRequest copyWith(void Function(ToActivityRegusterEditRequest) updates) => super.copyWith((message) => updates(message as ToActivityRegusterEditRequest)) as ToActivityRegusterEditRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterEditRequest create() => ToActivityRegusterEditRequest._();
+  ToActivityRegusterEditRequest createEmptyInstance() => create();
+  static $pb.PbList<ToActivityRegusterEditRequest> createRepeated() => $pb.PbList<ToActivityRegusterEditRequest>();
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterEditRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActivityRegusterEditRequest>(create);
+  static ToActivityRegusterEditRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get regId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set regId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasRegId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearRegId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get regName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set regName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasRegName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearRegName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $fixnum.Int64 get startSecond => $_getI64(2);
+  @$pb.TagNumber(3)
+  set startSecond($fixnum.Int64 v) { $_setInt64(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasStartSecond() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearStartSecond() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $fixnum.Int64 get endSecond => $_getI64(3);
+  @$pb.TagNumber(4)
+  set endSecond($fixnum.Int64 v) { $_setInt64(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasEndSecond() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearEndSecond() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.String get organizer => $_getSZ(4);
+  @$pb.TagNumber(5)
+  set organizer($core.String v) { $_setString(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasOrganizer() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearOrganizer() => clearField(5);
+}
+
+class ToActivityRegusterListRequest extends $pb.GeneratedMessage {
+  factory ToActivityRegusterListRequest({
+    $core.int? offset,
+    $core.int? limit,
+  }) {
+    final $result = create();
+    if (offset != null) {
+      $result.offset = offset;
+    }
+    if (limit != null) {
+      $result.limit = limit;
+    }
+    return $result;
+  }
+  ToActivityRegusterListRequest._() : super();
+  factory ToActivityRegusterListRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActivityRegusterListRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActivityRegusterListRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'offset', $pb.PbFieldType.O3)
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'limit', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterListRequest clone() => ToActivityRegusterListRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterListRequest copyWith(void Function(ToActivityRegusterListRequest) updates) => super.copyWith((message) => updates(message as ToActivityRegusterListRequest)) as ToActivityRegusterListRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterListRequest create() => ToActivityRegusterListRequest._();
+  ToActivityRegusterListRequest createEmptyInstance() => create();
+  static $pb.PbList<ToActivityRegusterListRequest> createRepeated() => $pb.PbList<ToActivityRegusterListRequest>();
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterListRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActivityRegusterListRequest>(create);
+  static ToActivityRegusterListRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get offset => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set offset($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasOffset() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearOffset() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get limit => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set limit($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasLimit() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearLimit() => clearField(2);
+}
+
+class ToActivityRegusterListReply extends $pb.GeneratedMessage {
+  factory ToActivityRegusterListReply({
+    $core.Iterable<ToActivityRegusterInfo>? list,
+  }) {
+    final $result = create();
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToActivityRegusterListReply._() : super();
+  factory ToActivityRegusterListReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActivityRegusterListReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActivityRegusterListReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..pc<ToActivityRegusterInfo>(1, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToActivityRegusterInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterListReply clone() => ToActivityRegusterListReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterListReply copyWith(void Function(ToActivityRegusterListReply) updates) => super.copyWith((message) => updates(message as ToActivityRegusterListReply)) as ToActivityRegusterListReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterListReply create() => ToActivityRegusterListReply._();
+  ToActivityRegusterListReply createEmptyInstance() => create();
+  static $pb.PbList<ToActivityRegusterListReply> createRepeated() => $pb.PbList<ToActivityRegusterListReply>();
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterListReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActivityRegusterListReply>(create);
+  static ToActivityRegusterListReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<ToActivityRegusterInfo> get list => $_getList(0);
+}
+
+class ToActivityRegusterInfo extends $pb.GeneratedMessage {
+  factory ToActivityRegusterInfo({
+    $core.int? regId,
+    $core.String? regName,
+    $fixnum.Int64? startSecond,
+    $fixnum.Int64? endSecond,
+    $core.String? organizer,
+    $core.String? key,
+  }) {
+    final $result = create();
+    if (regId != null) {
+      $result.regId = regId;
+    }
+    if (regName != null) {
+      $result.regName = regName;
+    }
+    if (startSecond != null) {
+      $result.startSecond = startSecond;
+    }
+    if (endSecond != null) {
+      $result.endSecond = endSecond;
+    }
+    if (organizer != null) {
+      $result.organizer = organizer;
+    }
+    if (key != null) {
+      $result.key = key;
+    }
+    return $result;
+  }
+  ToActivityRegusterInfo._() : super();
+  factory ToActivityRegusterInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActivityRegusterInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActivityRegusterInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'regId', $pb.PbFieldType.O3, protoName: 'regId')
+    ..aOS(2, _omitFieldNames ? '' : 'regName', protoName: 'regName')
+    ..aInt64(3, _omitFieldNames ? '' : 'startSecond', protoName: 'startSecond')
+    ..aInt64(4, _omitFieldNames ? '' : 'endSecond', protoName: 'endSecond')
+    ..aOS(5, _omitFieldNames ? '' : 'organizer')
+    ..aOS(6, _omitFieldNames ? '' : 'key')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterInfo clone() => ToActivityRegusterInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActivityRegusterInfo copyWith(void Function(ToActivityRegusterInfo) updates) => super.copyWith((message) => updates(message as ToActivityRegusterInfo)) as ToActivityRegusterInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterInfo create() => ToActivityRegusterInfo._();
+  ToActivityRegusterInfo createEmptyInstance() => create();
+  static $pb.PbList<ToActivityRegusterInfo> createRepeated() => $pb.PbList<ToActivityRegusterInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToActivityRegusterInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActivityRegusterInfo>(create);
+  static ToActivityRegusterInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get regId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set regId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasRegId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearRegId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get regName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set regName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasRegName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearRegName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $fixnum.Int64 get startSecond => $_getI64(2);
+  @$pb.TagNumber(3)
+  set startSecond($fixnum.Int64 v) { $_setInt64(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasStartSecond() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearStartSecond() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $fixnum.Int64 get endSecond => $_getI64(3);
+  @$pb.TagNumber(4)
+  set endSecond($fixnum.Int64 v) { $_setInt64(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasEndSecond() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearEndSecond() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.String get organizer => $_getSZ(4);
+  @$pb.TagNumber(5)
+  set organizer($core.String v) { $_setString(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasOrganizer() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearOrganizer() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.String get key => $_getSZ(5);
+  @$pb.TagNumber(6)
+  set key($core.String v) { $_setString(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasKey() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearKey() => clearField(6);
+}
+
+class ToGameRankingRequest extends $pb.GeneratedMessage {
+  factory ToGameRankingRequest({
+    $core.int? mapId,
+    $fixnum.Int64? startSecond,
+  }) {
+    final $result = create();
+    if (mapId != null) {
+      $result.mapId = mapId;
+    }
+    if (startSecond != null) {
+      $result.startSecond = startSecond;
+    }
+    return $result;
+  }
+  ToGameRankingRequest._() : super();
+  factory ToGameRankingRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToGameRankingRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToGameRankingRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'mapId', $pb.PbFieldType.O3, protoName: 'mapId')
+    ..aInt64(2, _omitFieldNames ? '' : 'startSecond', protoName: 'startSecond')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToGameRankingRequest clone() => ToGameRankingRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToGameRankingRequest copyWith(void Function(ToGameRankingRequest) updates) => super.copyWith((message) => updates(message as ToGameRankingRequest)) as ToGameRankingRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToGameRankingRequest create() => ToGameRankingRequest._();
+  ToGameRankingRequest createEmptyInstance() => create();
+  static $pb.PbList<ToGameRankingRequest> createRepeated() => $pb.PbList<ToGameRankingRequest>();
+  @$core.pragma('dart2js:noInline')
+  static ToGameRankingRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToGameRankingRequest>(create);
+  static ToGameRankingRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get mapId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set mapId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasMapId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearMapId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $fixnum.Int64 get startSecond => $_getI64(1);
+  @$pb.TagNumber(2)
+  set startSecond($fixnum.Int64 v) { $_setInt64(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasStartSecond() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearStartSecond() => clearField(2);
+}
+
+class ToGameRankingReply extends $pb.GeneratedMessage {
+  factory ToGameRankingReply({
+    $core.Iterable<ToActionRankInfo>? list,
+  }) {
+    final $result = create();
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToGameRankingReply._() : super();
+  factory ToGameRankingReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToGameRankingReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToGameRankingReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..pc<ToActionRankInfo>(1, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToActionRankInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToGameRankingReply clone() => ToGameRankingReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToGameRankingReply copyWith(void Function(ToGameRankingReply) updates) => super.copyWith((message) => updates(message as ToGameRankingReply)) as ToGameRankingReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToGameRankingReply create() => ToGameRankingReply._();
+  ToGameRankingReply createEmptyInstance() => create();
+  static $pb.PbList<ToGameRankingReply> createRepeated() => $pb.PbList<ToGameRankingReply>();
+  @$core.pragma('dart2js:noInline')
+  static ToGameRankingReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToGameRankingReply>(create);
+  static ToGameRankingReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<ToActionRankInfo> get list => $_getList(0);
+}
+
+class ToActionRankInfo extends $pb.GeneratedMessage {
+  factory ToActionRankInfo({
+    $core.int? actId,
+    $core.String? actName,
+    $core.int? totalUserNum,
+    $core.Iterable<ToOrienteerRankInfo>? rankList,
+  }) {
+    final $result = create();
+    if (actId != null) {
+      $result.actId = actId;
+    }
+    if (actName != null) {
+      $result.actName = actName;
+    }
+    if (totalUserNum != null) {
+      $result.totalUserNum = totalUserNum;
+    }
+    if (rankList != null) {
+      $result.rankList.addAll(rankList);
+    }
+    return $result;
+  }
+  ToActionRankInfo._() : super();
+  factory ToActionRankInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActionRankInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActionRankInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'actId', $pb.PbFieldType.O3, protoName: 'actId')
+    ..aOS(2, _omitFieldNames ? '' : 'actName', protoName: 'actName')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'totalUserNum', $pb.PbFieldType.O3, protoName: 'totalUserNum')
+    ..pc<ToOrienteerRankInfo>(4, _omitFieldNames ? '' : 'rankList', $pb.PbFieldType.PM, protoName: 'rankList', subBuilder: ToOrienteerRankInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActionRankInfo clone() => ToActionRankInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActionRankInfo copyWith(void Function(ToActionRankInfo) updates) => super.copyWith((message) => updates(message as ToActionRankInfo)) as ToActionRankInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActionRankInfo create() => ToActionRankInfo._();
+  ToActionRankInfo createEmptyInstance() => create();
+  static $pb.PbList<ToActionRankInfo> createRepeated() => $pb.PbList<ToActionRankInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToActionRankInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActionRankInfo>(create);
+  static ToActionRankInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get actId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set actId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasActId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearActId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get actName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set actName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasActName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearActName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get totalUserNum => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set totalUserNum($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasTotalUserNum() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearTotalUserNum() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.List<ToOrienteerRankInfo> get rankList => $_getList(3);
+}
+
+class ToOrienteerRankInfo extends $pb.GeneratedMessage {
+  factory ToOrienteerRankInfo({
+    $core.int? gameId,
+    $core.String? oName,
+    $core.String? phone,
+    $core.String? courseName,
+    $core.int? state,
+    $0.Timestamp? startAt,
+    $2.Duration? duration,
+    $core.int? distance,
+    $core.int? totalControlNum,
+    $core.int? oId,
+  }) {
+    final $result = create();
+    if (gameId != null) {
+      $result.gameId = gameId;
+    }
+    if (oName != null) {
+      $result.oName = oName;
+    }
+    if (phone != null) {
+      $result.phone = phone;
+    }
+    if (courseName != null) {
+      $result.courseName = courseName;
+    }
+    if (state != null) {
+      $result.state = state;
+    }
+    if (startAt != null) {
+      $result.startAt = startAt;
+    }
+    if (duration != null) {
+      $result.duration = duration;
+    }
+    if (distance != null) {
+      $result.distance = distance;
+    }
+    if (totalControlNum != null) {
+      $result.totalControlNum = totalControlNum;
+    }
+    if (oId != null) {
+      $result.oId = oId;
+    }
+    return $result;
+  }
+  ToOrienteerRankInfo._() : super();
+  factory ToOrienteerRankInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToOrienteerRankInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToOrienteerRankInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'gameId', $pb.PbFieldType.O3, protoName: 'gameId')
+    ..aOS(2, _omitFieldNames ? '' : 'oName', protoName: 'oName')
+    ..aOS(3, _omitFieldNames ? '' : 'phone')
+    ..aOS(4, _omitFieldNames ? '' : 'courseName', protoName: 'courseName')
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'state', $pb.PbFieldType.O3)
+    ..aOM<$0.Timestamp>(6, _omitFieldNames ? '' : 'startAt', subBuilder: $0.Timestamp.create)
+    ..aOM<$2.Duration>(7, _omitFieldNames ? '' : 'duration', subBuilder: $2.Duration.create)
+    ..a<$core.int>(8, _omitFieldNames ? '' : 'distance', $pb.PbFieldType.O3)
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'totalControlNum', $pb.PbFieldType.O3, protoName: 'totalControlNum')
+    ..a<$core.int>(10, _omitFieldNames ? '' : 'oId', $pb.PbFieldType.O3, protoName: 'oId')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToOrienteerRankInfo clone() => ToOrienteerRankInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToOrienteerRankInfo copyWith(void Function(ToOrienteerRankInfo) updates) => super.copyWith((message) => updates(message as ToOrienteerRankInfo)) as ToOrienteerRankInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToOrienteerRankInfo create() => ToOrienteerRankInfo._();
+  ToOrienteerRankInfo createEmptyInstance() => create();
+  static $pb.PbList<ToOrienteerRankInfo> createRepeated() => $pb.PbList<ToOrienteerRankInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToOrienteerRankInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToOrienteerRankInfo>(create);
+  static ToOrienteerRankInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get gameId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set gameId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasGameId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearGameId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get oName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set oName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasOName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearOName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get phone => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set phone($core.String v) { $_setString(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasPhone() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearPhone() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get courseName => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set courseName($core.String v) { $_setString(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasCourseName() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCourseName() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.int get state => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set state($core.int v) { $_setSignedInt32(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasState() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearState() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $0.Timestamp get startAt => $_getN(5);
+  @$pb.TagNumber(6)
+  set startAt($0.Timestamp v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasStartAt() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearStartAt() => clearField(6);
+  @$pb.TagNumber(6)
+  $0.Timestamp ensureStartAt() => $_ensure(5);
+
+  @$pb.TagNumber(7)
+  $2.Duration get duration => $_getN(6);
+  @$pb.TagNumber(7)
+  set duration($2.Duration v) { setField(7, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasDuration() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearDuration() => clearField(7);
+  @$pb.TagNumber(7)
+  $2.Duration ensureDuration() => $_ensure(6);
+
+  @$pb.TagNumber(8)
+  $core.int get distance => $_getIZ(7);
+  @$pb.TagNumber(8)
+  set distance($core.int v) { $_setSignedInt32(7, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasDistance() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearDistance() => clearField(8);
+
+  @$pb.TagNumber(9)
+  $core.int get totalControlNum => $_getIZ(8);
+  @$pb.TagNumber(9)
+  set totalControlNum($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasTotalControlNum() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearTotalControlNum() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.int get oId => $_getIZ(9);
+  @$pb.TagNumber(10)
+  set oId($core.int v) { $_setSignedInt32(9, v); }
+  @$pb.TagNumber(10)
+  $core.bool hasOId() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearOId() => clearField(10);
+}
+
+class ToGetUpdateVersionRequest extends $pb.GeneratedMessage {
+  factory ToGetUpdateVersionRequest({
+    $core.String? vCode,
+    $core.int? vShop,
+  }) {
+    final $result = create();
+    if (vCode != null) {
+      $result.vCode = vCode;
+    }
+    if (vShop != null) {
+      $result.vShop = vShop;
+    }
+    return $result;
+  }
+  ToGetUpdateVersionRequest._() : super();
+  factory ToGetUpdateVersionRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToGetUpdateVersionRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToGetUpdateVersionRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'vCode', protoName: 'vCode')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'vShop', $pb.PbFieldType.O3, protoName: 'vShop')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToGetUpdateVersionRequest clone() => ToGetUpdateVersionRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToGetUpdateVersionRequest copyWith(void Function(ToGetUpdateVersionRequest) updates) => super.copyWith((message) => updates(message as ToGetUpdateVersionRequest)) as ToGetUpdateVersionRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToGetUpdateVersionRequest create() => ToGetUpdateVersionRequest._();
+  ToGetUpdateVersionRequest createEmptyInstance() => create();
+  static $pb.PbList<ToGetUpdateVersionRequest> createRepeated() => $pb.PbList<ToGetUpdateVersionRequest>();
+  @$core.pragma('dart2js:noInline')
+  static ToGetUpdateVersionRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToGetUpdateVersionRequest>(create);
+  static ToGetUpdateVersionRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get vCode => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set vCode($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasVCode() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearVCode() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get vShop => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set vShop($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasVShop() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearVShop() => clearField(2);
+}
+
+class ToGetUpdateVersionReply extends $pb.GeneratedMessage {
+  factory ToGetUpdateVersionReply({
+    $core.bool? needUpdate,
+    $core.String? vCode,
+    $core.String? vMemo,
+    $core.String? vUrl,
+  }) {
+    final $result = create();
+    if (needUpdate != null) {
+      $result.needUpdate = needUpdate;
+    }
+    if (vCode != null) {
+      $result.vCode = vCode;
+    }
+    if (vMemo != null) {
+      $result.vMemo = vMemo;
+    }
+    if (vUrl != null) {
+      $result.vUrl = vUrl;
+    }
+    return $result;
+  }
+  ToGetUpdateVersionReply._() : super();
+  factory ToGetUpdateVersionReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToGetUpdateVersionReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToGetUpdateVersionReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOB(1, _omitFieldNames ? '' : 'needUpdate', protoName: 'needUpdate')
+    ..aOS(2, _omitFieldNames ? '' : 'vCode', protoName: 'vCode')
+    ..aOS(3, _omitFieldNames ? '' : 'vMemo', protoName: 'vMemo')
+    ..aOS(4, _omitFieldNames ? '' : 'vUrl', protoName: 'vUrl')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToGetUpdateVersionReply clone() => ToGetUpdateVersionReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToGetUpdateVersionReply copyWith(void Function(ToGetUpdateVersionReply) updates) => super.copyWith((message) => updates(message as ToGetUpdateVersionReply)) as ToGetUpdateVersionReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToGetUpdateVersionReply create() => ToGetUpdateVersionReply._();
+  ToGetUpdateVersionReply createEmptyInstance() => create();
+  static $pb.PbList<ToGetUpdateVersionReply> createRepeated() => $pb.PbList<ToGetUpdateVersionReply>();
+  @$core.pragma('dart2js:noInline')
+  static ToGetUpdateVersionReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToGetUpdateVersionReply>(create);
+  static ToGetUpdateVersionReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.bool get needUpdate => $_getBF(0);
+  @$pb.TagNumber(1)
+  set needUpdate($core.bool v) { $_setBool(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasNeedUpdate() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearNeedUpdate() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get vCode => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set vCode($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasVCode() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearVCode() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get vMemo => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set vMemo($core.String v) { $_setString(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasVMemo() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearVMemo() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get vUrl => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set vUrl($core.String v) { $_setString(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasVUrl() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearVUrl() => clearField(4);
+}
+
+class ToGameDetailReply extends $pb.GeneratedMessage {
+  factory ToGameDetailReply({
+    $core.int? gameId,
+    $core.bool? isComplete,
+    $0.Timestamp? startAt,
+    $core.Iterable<ToControlPoint>? checkedSortedList,
+    $2.Duration? duration,
+    $0.Timestamp? stopAt,
+    $core.bool? isSuccess,
+    $core.int? sysPoint,
+    $core.int? totalPointNum,
+    $core.String? actName,
+    $core.int? distance,
+    $core.int? pace,
+    $core.int? avgHr,
+    $core.int? calorie,
+    $core.int? ck,
+    $core.double? ei,
+    $core.int? stepNum,
+    $core.Iterable<GameGpsInfo>? gameGpsInfo,
+    $core.Iterable<HeartRate>? gameHrInfos,
+    GameHistorySource? source,
+    $core.int? actId,
+  }) {
+    final $result = create();
+    if (gameId != null) {
+      $result.gameId = gameId;
+    }
+    if (isComplete != null) {
+      $result.isComplete = isComplete;
+    }
+    if (startAt != null) {
+      $result.startAt = startAt;
+    }
+    if (checkedSortedList != null) {
+      $result.checkedSortedList.addAll(checkedSortedList);
+    }
+    if (duration != null) {
+      $result.duration = duration;
+    }
+    if (stopAt != null) {
+      $result.stopAt = stopAt;
+    }
+    if (isSuccess != null) {
+      $result.isSuccess = isSuccess;
+    }
+    if (sysPoint != null) {
+      $result.sysPoint = sysPoint;
+    }
+    if (totalPointNum != null) {
+      $result.totalPointNum = totalPointNum;
+    }
+    if (actName != null) {
+      $result.actName = actName;
+    }
+    if (distance != null) {
+      $result.distance = distance;
+    }
+    if (pace != null) {
+      $result.pace = pace;
+    }
+    if (avgHr != null) {
+      $result.avgHr = avgHr;
+    }
+    if (calorie != null) {
+      $result.calorie = calorie;
+    }
+    if (ck != null) {
+      $result.ck = ck;
+    }
+    if (ei != null) {
+      $result.ei = ei;
+    }
+    if (stepNum != null) {
+      $result.stepNum = stepNum;
+    }
+    if (gameGpsInfo != null) {
+      $result.gameGpsInfo.addAll(gameGpsInfo);
+    }
+    if (gameHrInfos != null) {
+      $result.gameHrInfos.addAll(gameHrInfos);
+    }
+    if (source != null) {
+      $result.source = source;
+    }
+    if (actId != null) {
+      $result.actId = actId;
+    }
+    return $result;
+  }
+  ToGameDetailReply._() : super();
+  factory ToGameDetailReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToGameDetailReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToGameDetailReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'gameId', $pb.PbFieldType.O3)
+    ..aOB(2, _omitFieldNames ? '' : 'isComplete', protoName: 'isComplete')
+    ..aOM<$0.Timestamp>(3, _omitFieldNames ? '' : 'startAt', subBuilder: $0.Timestamp.create)
+    ..pc<ToControlPoint>(4, _omitFieldNames ? '' : 'checkedSortedList', $pb.PbFieldType.PM, subBuilder: ToControlPoint.create)
+    ..aOM<$2.Duration>(5, _omitFieldNames ? '' : 'duration', subBuilder: $2.Duration.create)
+    ..aOM<$0.Timestamp>(6, _omitFieldNames ? '' : 'stopAt', subBuilder: $0.Timestamp.create)
+    ..aOB(8, _omitFieldNames ? '' : 'isSuccess', protoName: 'isSuccess')
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'sysPoint', $pb.PbFieldType.O3, protoName: 'sysPoint')
+    ..a<$core.int>(10, _omitFieldNames ? '' : 'totalPointNum', $pb.PbFieldType.O3, protoName: 'totalPointNum')
+    ..aOS(13, _omitFieldNames ? '' : 'actName', protoName: 'actName')
+    ..a<$core.int>(14, _omitFieldNames ? '' : 'distance', $pb.PbFieldType.O3)
+    ..a<$core.int>(15, _omitFieldNames ? '' : 'pace', $pb.PbFieldType.O3)
+    ..a<$core.int>(16, _omitFieldNames ? '' : 'avgHr', $pb.PbFieldType.O3, protoName: 'avgHr')
+    ..a<$core.int>(17, _omitFieldNames ? '' : 'Calorie', $pb.PbFieldType.O3, protoName: 'Calorie')
+    ..a<$core.int>(18, _omitFieldNames ? '' : 'Ck', $pb.PbFieldType.O3, protoName: 'Ck')
+    ..a<$core.double>(19, _omitFieldNames ? '' : 'Ei', $pb.PbFieldType.OF, protoName: 'Ei')
+    ..a<$core.int>(20, _omitFieldNames ? '' : 'stepNum', $pb.PbFieldType.O3, protoName: 'stepNum')
+    ..pc<GameGpsInfo>(21, _omitFieldNames ? '' : 'gameGpsInfo', $pb.PbFieldType.PM, protoName: 'gameGpsInfo', subBuilder: GameGpsInfo.create)
+    ..pc<HeartRate>(24, _omitFieldNames ? '' : 'gameHrInfos', $pb.PbFieldType.PM, protoName: 'gameHrInfos', subBuilder: HeartRate.create)
+    ..e<GameHistorySource>(25, _omitFieldNames ? '' : 'source', $pb.PbFieldType.OE, defaultOrMaker: GameHistorySource.GameHistorySourcAll, valueOf: GameHistorySource.valueOf, enumValues: GameHistorySource.values)
+    ..a<$core.int>(26, _omitFieldNames ? '' : 'actId', $pb.PbFieldType.O3, protoName: 'actId')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToGameDetailReply clone() => ToGameDetailReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToGameDetailReply copyWith(void Function(ToGameDetailReply) updates) => super.copyWith((message) => updates(message as ToGameDetailReply)) as ToGameDetailReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToGameDetailReply create() => ToGameDetailReply._();
+  ToGameDetailReply createEmptyInstance() => create();
+  static $pb.PbList<ToGameDetailReply> createRepeated() => $pb.PbList<ToGameDetailReply>();
+  @$core.pragma('dart2js:noInline')
+  static ToGameDetailReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToGameDetailReply>(create);
+  static ToGameDetailReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get gameId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set gameId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasGameId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearGameId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.bool get isComplete => $_getBF(1);
+  @$pb.TagNumber(2)
+  set isComplete($core.bool v) { $_setBool(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasIsComplete() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearIsComplete() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $0.Timestamp get startAt => $_getN(2);
+  @$pb.TagNumber(3)
+  set startAt($0.Timestamp v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasStartAt() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearStartAt() => clearField(3);
+  @$pb.TagNumber(3)
+  $0.Timestamp ensureStartAt() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $core.List<ToControlPoint> get checkedSortedList => $_getList(3);
+
+  @$pb.TagNumber(5)
+  $2.Duration get duration => $_getN(4);
+  @$pb.TagNumber(5)
+  set duration($2.Duration v) { setField(5, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasDuration() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearDuration() => clearField(5);
+  @$pb.TagNumber(5)
+  $2.Duration ensureDuration() => $_ensure(4);
+
+  @$pb.TagNumber(6)
+  $0.Timestamp get stopAt => $_getN(5);
+  @$pb.TagNumber(6)
+  set stopAt($0.Timestamp v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasStopAt() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearStopAt() => clearField(6);
+  @$pb.TagNumber(6)
+  $0.Timestamp ensureStopAt() => $_ensure(5);
+
+  @$pb.TagNumber(8)
+  $core.bool get isSuccess => $_getBF(6);
+  @$pb.TagNumber(8)
+  set isSuccess($core.bool v) { $_setBool(6, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasIsSuccess() => $_has(6);
+  @$pb.TagNumber(8)
+  void clearIsSuccess() => clearField(8);
+
+  @$pb.TagNumber(9)
+  $core.int get sysPoint => $_getIZ(7);
+  @$pb.TagNumber(9)
+  set sysPoint($core.int v) { $_setSignedInt32(7, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasSysPoint() => $_has(7);
+  @$pb.TagNumber(9)
+  void clearSysPoint() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.int get totalPointNum => $_getIZ(8);
+  @$pb.TagNumber(10)
+  set totalPointNum($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(10)
+  $core.bool hasTotalPointNum() => $_has(8);
+  @$pb.TagNumber(10)
+  void clearTotalPointNum() => clearField(10);
+
+  @$pb.TagNumber(13)
+  $core.String get actName => $_getSZ(9);
+  @$pb.TagNumber(13)
+  set actName($core.String v) { $_setString(9, v); }
+  @$pb.TagNumber(13)
+  $core.bool hasActName() => $_has(9);
+  @$pb.TagNumber(13)
+  void clearActName() => clearField(13);
+
+  @$pb.TagNumber(14)
+  $core.int get distance => $_getIZ(10);
+  @$pb.TagNumber(14)
+  set distance($core.int v) { $_setSignedInt32(10, v); }
+  @$pb.TagNumber(14)
+  $core.bool hasDistance() => $_has(10);
+  @$pb.TagNumber(14)
+  void clearDistance() => clearField(14);
+
+  @$pb.TagNumber(15)
+  $core.int get pace => $_getIZ(11);
+  @$pb.TagNumber(15)
+  set pace($core.int v) { $_setSignedInt32(11, v); }
+  @$pb.TagNumber(15)
+  $core.bool hasPace() => $_has(11);
+  @$pb.TagNumber(15)
+  void clearPace() => clearField(15);
+
+  @$pb.TagNumber(16)
+  $core.int get avgHr => $_getIZ(12);
+  @$pb.TagNumber(16)
+  set avgHr($core.int v) { $_setSignedInt32(12, v); }
+  @$pb.TagNumber(16)
+  $core.bool hasAvgHr() => $_has(12);
+  @$pb.TagNumber(16)
+  void clearAvgHr() => clearField(16);
+
+  @$pb.TagNumber(17)
+  $core.int get calorie => $_getIZ(13);
+  @$pb.TagNumber(17)
+  set calorie($core.int v) { $_setSignedInt32(13, v); }
+  @$pb.TagNumber(17)
+  $core.bool hasCalorie() => $_has(13);
+  @$pb.TagNumber(17)
+  void clearCalorie() => clearField(17);
+
+  @$pb.TagNumber(18)
+  $core.int get ck => $_getIZ(14);
+  @$pb.TagNumber(18)
+  set ck($core.int v) { $_setSignedInt32(14, v); }
+  @$pb.TagNumber(18)
+  $core.bool hasCk() => $_has(14);
+  @$pb.TagNumber(18)
+  void clearCk() => clearField(18);
+
+  @$pb.TagNumber(19)
+  $core.double get ei => $_getN(15);
+  @$pb.TagNumber(19)
+  set ei($core.double v) { $_setFloat(15, v); }
+  @$pb.TagNumber(19)
+  $core.bool hasEi() => $_has(15);
+  @$pb.TagNumber(19)
+  void clearEi() => clearField(19);
+
+  @$pb.TagNumber(20)
+  $core.int get stepNum => $_getIZ(16);
+  @$pb.TagNumber(20)
+  set stepNum($core.int v) { $_setSignedInt32(16, v); }
+  @$pb.TagNumber(20)
+  $core.bool hasStepNum() => $_has(16);
+  @$pb.TagNumber(20)
+  void clearStepNum() => clearField(20);
+
+  @$pb.TagNumber(21)
+  $core.List<GameGpsInfo> get gameGpsInfo => $_getList(17);
+
+  /// base.v1.NetImage map_zip = 22; //压缩包地图
+  /// AnswerHistory  answerHistory= 23;//脑力值列表
+  @$pb.TagNumber(24)
+  $core.List<HeartRate> get gameHrInfos => $_getList(18);
+
+  @$pb.TagNumber(25)
+  GameHistorySource get source => $_getN(19);
+  @$pb.TagNumber(25)
+  set source(GameHistorySource v) { setField(25, v); }
+  @$pb.TagNumber(25)
+  $core.bool hasSource() => $_has(19);
+  @$pb.TagNumber(25)
+  void clearSource() => clearField(25);
+
+  @$pb.TagNumber(26)
+  $core.int get actId => $_getIZ(20);
+  @$pb.TagNumber(26)
+  set actId($core.int v) { $_setSignedInt32(20, v); }
+  @$pb.TagNumber(26)
+  $core.bool hasActId() => $_has(20);
+  @$pb.TagNumber(26)
+  void clearActId() => clearField(26);
+}
+
+class ToHisUserListQueryReply extends $pb.GeneratedMessage {
+  factory ToHisUserListQueryReply({
+    $core.Iterable<ToHisUserBasic>? list,
+  }) {
+    final $result = create();
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToHisUserListQueryReply._() : super();
+  factory ToHisUserListQueryReply.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToHisUserListQueryReply.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToHisUserListQueryReply', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..pc<ToHisUserBasic>(1, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToHisUserBasic.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToHisUserListQueryReply clone() => ToHisUserListQueryReply()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToHisUserListQueryReply copyWith(void Function(ToHisUserListQueryReply) updates) => super.copyWith((message) => updates(message as ToHisUserListQueryReply)) as ToHisUserListQueryReply;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserListQueryReply create() => ToHisUserListQueryReply._();
+  ToHisUserListQueryReply createEmptyInstance() => create();
+  static $pb.PbList<ToHisUserListQueryReply> createRepeated() => $pb.PbList<ToHisUserListQueryReply>();
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserListQueryReply getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToHisUserListQueryReply>(create);
+  static ToHisUserListQueryReply? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<ToHisUserBasic> get list => $_getList(0);
+}
+
+class ToHisUserBasic extends $pb.GeneratedMessage {
+  factory ToHisUserBasic({
+    $core.int? oId,
+    $core.String? oName,
+    $core.Iterable<ToHisUserInfo>? list,
+  }) {
+    final $result = create();
+    if (oId != null) {
+      $result.oId = oId;
+    }
+    if (oName != null) {
+      $result.oName = oName;
+    }
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToHisUserBasic._() : super();
+  factory ToHisUserBasic.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToHisUserBasic.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToHisUserBasic', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'OId', $pb.PbFieldType.O3, protoName: 'OId')
+    ..aOS(2, _omitFieldNames ? '' : 'OName', protoName: 'OName')
+    ..pc<ToHisUserInfo>(3, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToHisUserInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToHisUserBasic clone() => ToHisUserBasic()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToHisUserBasic copyWith(void Function(ToHisUserBasic) updates) => super.copyWith((message) => updates(message as ToHisUserBasic)) as ToHisUserBasic;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserBasic create() => ToHisUserBasic._();
+  ToHisUserBasic createEmptyInstance() => create();
+  static $pb.PbList<ToHisUserBasic> createRepeated() => $pb.PbList<ToHisUserBasic>();
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserBasic getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToHisUserBasic>(create);
+  static ToHisUserBasic? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get oId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set oId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasOId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearOId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get oName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set oName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasOName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearOName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.List<ToHisUserInfo> get list => $_getList(2);
+}
+
+class ToHisUserInfo extends $pb.GeneratedMessage {
+  factory ToHisUserInfo({
+    $core.int? gameId,
+    $core.String? courseName,
+    $core.String? actName,
+    $core.bool? isComplete,
+    $0.Timestamp? startAt,
+    $2.Duration? duration,
+  }) {
+    final $result = create();
+    if (gameId != null) {
+      $result.gameId = gameId;
+    }
+    if (courseName != null) {
+      $result.courseName = courseName;
+    }
+    if (actName != null) {
+      $result.actName = actName;
+    }
+    if (isComplete != null) {
+      $result.isComplete = isComplete;
+    }
+    if (startAt != null) {
+      $result.startAt = startAt;
+    }
+    if (duration != null) {
+      $result.duration = duration;
+    }
+    return $result;
+  }
+  ToHisUserInfo._() : super();
+  factory ToHisUserInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToHisUserInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToHisUserInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'GameId', $pb.PbFieldType.O3, protoName: 'GameId')
+    ..aOS(2, _omitFieldNames ? '' : 'CourseName', protoName: 'CourseName')
+    ..aOS(3, _omitFieldNames ? '' : 'ActName', protoName: 'ActName')
+    ..aOB(4, _omitFieldNames ? '' : 'isComplete', protoName: 'isComplete')
+    ..aOM<$0.Timestamp>(5, _omitFieldNames ? '' : 'startAt', subBuilder: $0.Timestamp.create)
+    ..aOM<$2.Duration>(6, _omitFieldNames ? '' : 'duration', subBuilder: $2.Duration.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToHisUserInfo clone() => ToHisUserInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToHisUserInfo copyWith(void Function(ToHisUserInfo) updates) => super.copyWith((message) => updates(message as ToHisUserInfo)) as ToHisUserInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserInfo create() => ToHisUserInfo._();
+  ToHisUserInfo createEmptyInstance() => create();
+  static $pb.PbList<ToHisUserInfo> createRepeated() => $pb.PbList<ToHisUserInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToHisUserInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToHisUserInfo>(create);
+  static ToHisUserInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get gameId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set gameId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasGameId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearGameId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get courseName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set courseName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasCourseName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearCourseName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get actName => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set actName($core.String v) { $_setString(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasActName() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearActName() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.bool get isComplete => $_getBF(3);
+  @$pb.TagNumber(4)
+  set isComplete($core.bool v) { $_setBool(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasIsComplete() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearIsComplete() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $0.Timestamp get startAt => $_getN(4);
+  @$pb.TagNumber(5)
+  set startAt($0.Timestamp v) { setField(5, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasStartAt() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearStartAt() => clearField(5);
+  @$pb.TagNumber(5)
+  $0.Timestamp ensureStartAt() => $_ensure(4);
+
+  @$pb.TagNumber(6)
+  $2.Duration get duration => $_getN(5);
+  @$pb.TagNumber(6)
+  set duration($2.Duration v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasDuration() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearDuration() => clearField(6);
+  @$pb.TagNumber(6)
+  $2.Duration ensureDuration() => $_ensure(5);
+}
+
+class ToUserInActionBasicQueryRequest extends $pb.GeneratedMessage {
+  factory ToUserInActionBasicQueryRequest({
+    $core.int? actId,
+    $core.int? userId,
+  }) {
+    final $result = create();
+    if (actId != null) {
+      $result.actId = actId;
+    }
+    if (userId != null) {
+      $result.userId = userId;
+    }
+    return $result;
+  }
+  ToUserInActionBasicQueryRequest._() : super();
+  factory ToUserInActionBasicQueryRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToUserInActionBasicQueryRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToUserInActionBasicQueryRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'ActId', $pb.PbFieldType.O3, protoName: 'ActId')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'UserId', $pb.PbFieldType.O3, protoName: 'UserId')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToUserInActionBasicQueryRequest clone() => ToUserInActionBasicQueryRequest()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToUserInActionBasicQueryRequest copyWith(void Function(ToUserInActionBasicQueryRequest) updates) => super.copyWith((message) => updates(message as ToUserInActionBasicQueryRequest)) as ToUserInActionBasicQueryRequest;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToUserInActionBasicQueryRequest create() => ToUserInActionBasicQueryRequest._();
+  ToUserInActionBasicQueryRequest createEmptyInstance() => create();
+  static $pb.PbList<ToUserInActionBasicQueryRequest> createRepeated() => $pb.PbList<ToUserInActionBasicQueryRequest>();
+  @$core.pragma('dart2js:noInline')
+  static ToUserInActionBasicQueryRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToUserInActionBasicQueryRequest>(create);
+  static ToUserInActionBasicQueryRequest? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get actId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set actId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasActId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearActId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get userId => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set userId($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasUserId() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearUserId() => clearField(2);
+}
+
+class ToGetBinaryByMd5Request extends $pb.GeneratedMessage {
+  factory ToGetBinaryByMd5Request({
+    $core.List<$core.int>? md5,
+  }) {
+    final $result = create();
+    if (md5 != null) {
+      $result.md5 = md5;
+    }
+    return $result;
+  }
+  ToGetBinaryByMd5Request._() : super();
+  factory ToGetBinaryByMd5Request.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToGetBinaryByMd5Request.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToGetBinaryByMd5Request', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'md5', $pb.PbFieldType.OY)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToGetBinaryByMd5Request clone() => ToGetBinaryByMd5Request()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToGetBinaryByMd5Request copyWith(void Function(ToGetBinaryByMd5Request) updates) => super.copyWith((message) => updates(message as ToGetBinaryByMd5Request)) as ToGetBinaryByMd5Request;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToGetBinaryByMd5Request create() => ToGetBinaryByMd5Request._();
+  ToGetBinaryByMd5Request createEmptyInstance() => create();
+  static $pb.PbList<ToGetBinaryByMd5Request> createRepeated() => $pb.PbList<ToGetBinaryByMd5Request>();
+  @$core.pragma('dart2js:noInline')
+  static ToGetBinaryByMd5Request getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToGetBinaryByMd5Request>(create);
+  static ToGetBinaryByMd5Request? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<$core.int> get md5 => $_getN(0);
+  @$pb.TagNumber(1)
+  set md5($core.List<$core.int> v) { $_setBytes(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasMd5() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearMd5() => clearField(1);
+}
+
+class GetServerTimeRp extends $pb.GeneratedMessage {
+  factory GetServerTimeRp({
+    $fixnum.Int64? millisecondStamp,
+  }) {
+    final $result = create();
+    if (millisecondStamp != null) {
+      $result.millisecondStamp = millisecondStamp;
+    }
+    return $result;
+  }
+  GetServerTimeRp._() : super();
+  factory GetServerTimeRp.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory GetServerTimeRp.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GetServerTimeRp', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'millisecondStamp', protoName: 'millisecondStamp')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  GetServerTimeRp clone() => GetServerTimeRp()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  GetServerTimeRp copyWith(void Function(GetServerTimeRp) updates) => super.copyWith((message) => updates(message as GetServerTimeRp)) as GetServerTimeRp;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static GetServerTimeRp create() => GetServerTimeRp._();
+  GetServerTimeRp createEmptyInstance() => create();
+  static $pb.PbList<GetServerTimeRp> createRepeated() => $pb.PbList<GetServerTimeRp>();
+  @$core.pragma('dart2js:noInline')
+  static GetServerTimeRp getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<GetServerTimeRp>(create);
+  static GetServerTimeRp? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get millisecondStamp => $_getI64(0);
+  @$pb.TagNumber(1)
+  set millisecondStamp($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasMillisecondStamp() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearMillisecondStamp() => clearField(1);
+}
+
+class ToSendCodeToPhoneRequestV2 extends $pb.GeneratedMessage {
+  factory ToSendCodeToPhoneRequestV2({
+    $core.String? phone,
+    SmsType? smsType,
+  }) {
+    final $result = create();
+    if (phone != null) {
+      $result.phone = phone;
+    }
+    if (smsType != null) {
+      $result.smsType = smsType;
+    }
+    return $result;
+  }
+  ToSendCodeToPhoneRequestV2._() : super();
+  factory ToSendCodeToPhoneRequestV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToSendCodeToPhoneRequestV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToSendCodeToPhoneRequestV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'phone')
+    ..e<SmsType>(2, _omitFieldNames ? '' : 'smsType', $pb.PbFieldType.OE, protoName: 'smsType', defaultOrMaker: SmsType.UnKnow, valueOf: SmsType.valueOf, enumValues: SmsType.values)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToSendCodeToPhoneRequestV2 clone() => ToSendCodeToPhoneRequestV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToSendCodeToPhoneRequestV2 copyWith(void Function(ToSendCodeToPhoneRequestV2) updates) => super.copyWith((message) => updates(message as ToSendCodeToPhoneRequestV2)) as ToSendCodeToPhoneRequestV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToSendCodeToPhoneRequestV2 create() => ToSendCodeToPhoneRequestV2._();
+  ToSendCodeToPhoneRequestV2 createEmptyInstance() => create();
+  static $pb.PbList<ToSendCodeToPhoneRequestV2> createRepeated() => $pb.PbList<ToSendCodeToPhoneRequestV2>();
+  @$core.pragma('dart2js:noInline')
+  static ToSendCodeToPhoneRequestV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToSendCodeToPhoneRequestV2>(create);
+  static ToSendCodeToPhoneRequestV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get phone => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set phone($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasPhone() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearPhone() => clearField(1);
+
+  @$pb.TagNumber(2)
+  SmsType get smsType => $_getN(1);
+  @$pb.TagNumber(2)
+  set smsType(SmsType v) { setField(2, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasSmsType() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearSmsType() => clearField(2);
+}
+
+class ToSignInRequestV2 extends $pb.GeneratedMessage {
+  factory ToSignInRequestV2({
+    $core.String? userCode,
+    $core.String? password,
+    $core.String? ip,
+  }) {
+    final $result = create();
+    if (userCode != null) {
+      $result.userCode = userCode;
+    }
+    if (password != null) {
+      $result.password = password;
+    }
+    if (ip != null) {
+      $result.ip = ip;
+    }
+    return $result;
+  }
+  ToSignInRequestV2._() : super();
+  factory ToSignInRequestV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToSignInRequestV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToSignInRequestV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'userCode', protoName: 'userCode')
+    ..aOS(2, _omitFieldNames ? '' : 'password')
+    ..aOS(3, _omitFieldNames ? '' : 'ip')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToSignInRequestV2 clone() => ToSignInRequestV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToSignInRequestV2 copyWith(void Function(ToSignInRequestV2) updates) => super.copyWith((message) => updates(message as ToSignInRequestV2)) as ToSignInRequestV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToSignInRequestV2 create() => ToSignInRequestV2._();
+  ToSignInRequestV2 createEmptyInstance() => create();
+  static $pb.PbList<ToSignInRequestV2> createRepeated() => $pb.PbList<ToSignInRequestV2>();
+  @$core.pragma('dart2js:noInline')
+  static ToSignInRequestV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToSignInRequestV2>(create);
+  static ToSignInRequestV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get userCode => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set userCode($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasUserCode() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearUserCode() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get password => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set password($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasPassword() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearPassword() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get ip => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set ip($core.String v) { $_setString(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasIp() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearIp() => clearField(3);
+}
+
+class MapListRequestV2 extends $pb.GeneratedMessage {
+  factory MapListRequestV2({
+    Position? position,
+    $core.int? offset,
+    $core.int? limit,
+  }) {
+    final $result = create();
+    if (position != null) {
+      $result.position = position;
+    }
+    if (offset != null) {
+      $result.offset = offset;
+    }
+    if (limit != null) {
+      $result.limit = limit;
+    }
+    return $result;
+  }
+  MapListRequestV2._() : super();
+  factory MapListRequestV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory MapListRequestV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'MapListRequestV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOM<Position>(1, _omitFieldNames ? '' : 'position', subBuilder: Position.create)
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'offset', $pb.PbFieldType.O3)
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'limit', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  MapListRequestV2 clone() => MapListRequestV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  MapListRequestV2 copyWith(void Function(MapListRequestV2) updates) => super.copyWith((message) => updates(message as MapListRequestV2)) as MapListRequestV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static MapListRequestV2 create() => MapListRequestV2._();
+  MapListRequestV2 createEmptyInstance() => create();
+  static $pb.PbList<MapListRequestV2> createRepeated() => $pb.PbList<MapListRequestV2>();
+  @$core.pragma('dart2js:noInline')
+  static MapListRequestV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<MapListRequestV2>(create);
+  static MapListRequestV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  Position get position => $_getN(0);
+  @$pb.TagNumber(1)
+  set position(Position v) { setField(1, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasPosition() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearPosition() => clearField(1);
+  @$pb.TagNumber(1)
+  Position ensurePosition() => $_ensure(0);
+
+  @$pb.TagNumber(2)
+  $core.int get offset => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set offset($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasOffset() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearOffset() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get limit => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set limit($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasLimit() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearLimit() => clearField(3);
+}
+
+class ToMapListReplyV2 extends $pb.GeneratedMessage {
+  factory ToMapListReplyV2({
+    $core.Iterable<ToMapSimpleV2>? list,
+  }) {
+    final $result = create();
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToMapListReplyV2._() : super();
+  factory ToMapListReplyV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToMapListReplyV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToMapListReplyV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..pc<ToMapSimpleV2>(1, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToMapSimpleV2.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToMapListReplyV2 clone() => ToMapListReplyV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToMapListReplyV2 copyWith(void Function(ToMapListReplyV2) updates) => super.copyWith((message) => updates(message as ToMapListReplyV2)) as ToMapListReplyV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToMapListReplyV2 create() => ToMapListReplyV2._();
+  ToMapListReplyV2 createEmptyInstance() => create();
+  static $pb.PbList<ToMapListReplyV2> createRepeated() => $pb.PbList<ToMapListReplyV2>();
+  @$core.pragma('dart2js:noInline')
+  static ToMapListReplyV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToMapListReplyV2>(create);
+  static ToMapListReplyV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<ToMapSimpleV2> get list => $_getList(0);
+}
+
+class ToMapSimpleV2 extends $pb.GeneratedMessage {
+  factory ToMapSimpleV2({
+    $core.int? mapId,
+    $core.String? name,
+    $core.int? mapScaleNumber,
+    $core.String? description,
+    $core.double? distance,
+    NetImage? image,
+  }) {
+    final $result = create();
+    if (mapId != null) {
+      $result.mapId = mapId;
+    }
+    if (name != null) {
+      $result.name = name;
+    }
+    if (mapScaleNumber != null) {
+      $result.mapScaleNumber = mapScaleNumber;
+    }
+    if (description != null) {
+      $result.description = description;
+    }
+    if (distance != null) {
+      $result.distance = distance;
+    }
+    if (image != null) {
+      $result.image = image;
+    }
+    return $result;
+  }
+  ToMapSimpleV2._() : super();
+  factory ToMapSimpleV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToMapSimpleV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToMapSimpleV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'mapId', $pb.PbFieldType.O3, protoName: 'mapId')
+    ..aOS(2, _omitFieldNames ? '' : 'name')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'mapScaleNumber', $pb.PbFieldType.O3, protoName: 'mapScaleNumber')
+    ..aOS(4, _omitFieldNames ? '' : 'description')
+    ..a<$core.double>(5, _omitFieldNames ? '' : 'distance', $pb.PbFieldType.OD)
+    ..aOM<NetImage>(6, _omitFieldNames ? '' : 'image', subBuilder: NetImage.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToMapSimpleV2 clone() => ToMapSimpleV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToMapSimpleV2 copyWith(void Function(ToMapSimpleV2) updates) => super.copyWith((message) => updates(message as ToMapSimpleV2)) as ToMapSimpleV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToMapSimpleV2 create() => ToMapSimpleV2._();
+  ToMapSimpleV2 createEmptyInstance() => create();
+  static $pb.PbList<ToMapSimpleV2> createRepeated() => $pb.PbList<ToMapSimpleV2>();
+  @$core.pragma('dart2js:noInline')
+  static ToMapSimpleV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToMapSimpleV2>(create);
+  static ToMapSimpleV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get mapId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set mapId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasMapId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearMapId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get name => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set name($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get mapScaleNumber => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set mapScaleNumber($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasMapScaleNumber() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearMapScaleNumber() => clearField(3);
+
+  @$pb.TagNumber(4)
+  $core.String get description => $_getSZ(3);
+  @$pb.TagNumber(4)
+  set description($core.String v) { $_setString(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasDescription() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearDescription() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.double get distance => $_getN(4);
+  @$pb.TagNumber(5)
+  set distance($core.double v) { $_setDouble(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasDistance() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearDistance() => clearField(5);
+
+  @$pb.TagNumber(6)
+  NetImage get image => $_getN(5);
+  @$pb.TagNumber(6)
+  set image(NetImage v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasImage() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearImage() => clearField(6);
+  @$pb.TagNumber(6)
+  NetImage ensureImage() => $_ensure(5);
+}
+
+/// 地图自身信息
+class ToMapInfoV2 extends $pb.GeneratedMessage {
+  factory ToMapInfoV2({
+    $core.int? mapId,
+    $core.String? mapName,
+    NetImage? zipImage,
+  }) {
+    final $result = create();
+    if (mapId != null) {
+      $result.mapId = mapId;
+    }
+    if (mapName != null) {
+      $result.mapName = mapName;
+    }
+    if (zipImage != null) {
+      $result.zipImage = zipImage;
+    }
+    return $result;
+  }
+  ToMapInfoV2._() : super();
+  factory ToMapInfoV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToMapInfoV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToMapInfoV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'mapId', $pb.PbFieldType.O3, protoName: 'mapId')
+    ..aOS(2, _omitFieldNames ? '' : 'mapName', protoName: 'mapName')
+    ..aOM<NetImage>(3, _omitFieldNames ? '' : 'zipImage', protoName: 'zipImage', subBuilder: NetImage.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToMapInfoV2 clone() => ToMapInfoV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToMapInfoV2 copyWith(void Function(ToMapInfoV2) updates) => super.copyWith((message) => updates(message as ToMapInfoV2)) as ToMapInfoV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToMapInfoV2 create() => ToMapInfoV2._();
+  ToMapInfoV2 createEmptyInstance() => create();
+  static $pb.PbList<ToMapInfoV2> createRepeated() => $pb.PbList<ToMapInfoV2>();
+  @$core.pragma('dart2js:noInline')
+  static ToMapInfoV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToMapInfoV2>(create);
+  static ToMapInfoV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get mapId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set mapId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasMapId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearMapId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get mapName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set mapName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasMapName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearMapName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  NetImage get zipImage => $_getN(2);
+  @$pb.TagNumber(3)
+  set zipImage(NetImage v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasZipImage() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearZipImage() => clearField(3);
+  @$pb.TagNumber(3)
+  NetImage ensureZipImage() => $_ensure(2);
+}
+
+class ToUserDetailQueryRequestV2 extends $pb.GeneratedMessage {
+  factory ToUserDetailQueryRequestV2({
+    $core.int? mapId,
+  }) {
+    final $result = create();
+    if (mapId != null) {
+      $result.mapId = mapId;
+    }
+    return $result;
+  }
+  ToUserDetailQueryRequestV2._() : super();
+  factory ToUserDetailQueryRequestV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToUserDetailQueryRequestV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToUserDetailQueryRequestV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'mapId', $pb.PbFieldType.O3, protoName: 'mapId')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToUserDetailQueryRequestV2 clone() => ToUserDetailQueryRequestV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToUserDetailQueryRequestV2 copyWith(void Function(ToUserDetailQueryRequestV2) updates) => super.copyWith((message) => updates(message as ToUserDetailQueryRequestV2)) as ToUserDetailQueryRequestV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToUserDetailQueryRequestV2 create() => ToUserDetailQueryRequestV2._();
+  ToUserDetailQueryRequestV2 createEmptyInstance() => create();
+  static $pb.PbList<ToUserDetailQueryRequestV2> createRepeated() => $pb.PbList<ToUserDetailQueryRequestV2>();
+  @$core.pragma('dart2js:noInline')
+  static ToUserDetailQueryRequestV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToUserDetailQueryRequestV2>(create);
+  static ToUserDetailQueryRequestV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get mapId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set mapId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasMapId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearMapId() => clearField(1);
+}
+
+class ToUserDetailQueryReplyV2 extends $pb.GeneratedMessage {
+  factory ToUserDetailQueryReplyV2({
+    $core.Iterable<ToActionInfo>? list,
+  }) {
+    final $result = create();
+    if (list != null) {
+      $result.list.addAll(list);
+    }
+    return $result;
+  }
+  ToUserDetailQueryReplyV2._() : super();
+  factory ToUserDetailQueryReplyV2.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToUserDetailQueryReplyV2.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToUserDetailQueryReplyV2', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..pc<ToActionInfo>(1, _omitFieldNames ? '' : 'list', $pb.PbFieldType.PM, subBuilder: ToActionInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToUserDetailQueryReplyV2 clone() => ToUserDetailQueryReplyV2()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToUserDetailQueryReplyV2 copyWith(void Function(ToUserDetailQueryReplyV2) updates) => super.copyWith((message) => updates(message as ToUserDetailQueryReplyV2)) as ToUserDetailQueryReplyV2;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToUserDetailQueryReplyV2 create() => ToUserDetailQueryReplyV2._();
+  ToUserDetailQueryReplyV2 createEmptyInstance() => create();
+  static $pb.PbList<ToUserDetailQueryReplyV2> createRepeated() => $pb.PbList<ToUserDetailQueryReplyV2>();
+  @$core.pragma('dart2js:noInline')
+  static ToUserDetailQueryReplyV2 getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToUserDetailQueryReplyV2>(create);
+  static ToUserDetailQueryReplyV2? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<ToActionInfo> get list => $_getList(0);
+}
+
+class ToActionInfo extends $pb.GeneratedMessage {
+  factory ToActionInfo({
+    $core.int? actId,
+    $core.Iterable<ToOrienteerInGameInfo>? userList,
+  }) {
+    final $result = create();
+    if (actId != null) {
+      $result.actId = actId;
+    }
+    if (userList != null) {
+      $result.userList.addAll(userList);
+    }
+    return $result;
+  }
+  ToActionInfo._() : super();
+  factory ToActionInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActionInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActionInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'actId', $pb.PbFieldType.O3, protoName: 'actId')
+    ..pc<ToOrienteerInGameInfo>(4, _omitFieldNames ? '' : 'userList', $pb.PbFieldType.PM, protoName: 'userList', subBuilder: ToOrienteerInGameInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActionInfo clone() => ToActionInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActionInfo copyWith(void Function(ToActionInfo) updates) => super.copyWith((message) => updates(message as ToActionInfo)) as ToActionInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActionInfo create() => ToActionInfo._();
+  ToActionInfo createEmptyInstance() => create();
+  static $pb.PbList<ToActionInfo> createRepeated() => $pb.PbList<ToActionInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToActionInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActionInfo>(create);
+  static ToActionInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get actId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set actId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasActId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearActId() => clearField(1);
+
+  ///   string actName = 2; //活动名称 ,isFullQuery为False时为空
+  ///  int32  totalControlNum = 3; //控制点数量,不包含开始点结束点,isFullQuery为False时为空
+  @$pb.TagNumber(4)
+  $core.List<ToOrienteerInGameInfo> get userList => $_getList(1);
+}
+
+/// 活动基本信息
+class ToActionBasicInfo extends $pb.GeneratedMessage {
+  factory ToActionBasicInfo({
+    $core.int? actId,
+    $core.String? actName,
+    $core.int? totalControlNum,
+  }) {
+    final $result = create();
+    if (actId != null) {
+      $result.actId = actId;
+    }
+    if (actName != null) {
+      $result.actName = actName;
+    }
+    if (totalControlNum != null) {
+      $result.totalControlNum = totalControlNum;
+    }
+    return $result;
+  }
+  ToActionBasicInfo._() : super();
+  factory ToActionBasicInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToActionBasicInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToActionBasicInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'actId', $pb.PbFieldType.O3, protoName: 'actId')
+    ..aOS(2, _omitFieldNames ? '' : 'actName', protoName: 'actName')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'totalControlNum', $pb.PbFieldType.O3, protoName: 'totalControlNum')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToActionBasicInfo clone() => ToActionBasicInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToActionBasicInfo copyWith(void Function(ToActionBasicInfo) updates) => super.copyWith((message) => updates(message as ToActionBasicInfo)) as ToActionBasicInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToActionBasicInfo create() => ToActionBasicInfo._();
+  ToActionBasicInfo createEmptyInstance() => create();
+  static $pb.PbList<ToActionBasicInfo> createRepeated() => $pb.PbList<ToActionBasicInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToActionBasicInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToActionBasicInfo>(create);
+  static ToActionBasicInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get actId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set actId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasActId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearActId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get actName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set actName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasActName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearActName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get totalControlNum => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set totalControlNum($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasTotalControlNum() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearTotalControlNum() => clearField(3);
+}
+
+class ToOrienteerInGameInfo extends $pb.GeneratedMessage {
+  factory ToOrienteerInGameInfo({
+    $core.int? userId,
+    OrienteerGpsInfo? gpsInfo,
+    OrienteerHrInfo? hrInfo,
+    OrienteerGameSaveInfo? gameSaveInfo,
+    OrienteerOtherInfo? otherInfo,
+  }) {
+    final $result = create();
+    if (userId != null) {
+      $result.userId = userId;
+    }
+    if (gpsInfo != null) {
+      $result.gpsInfo = gpsInfo;
+    }
+    if (hrInfo != null) {
+      $result.hrInfo = hrInfo;
+    }
+    if (gameSaveInfo != null) {
+      $result.gameSaveInfo = gameSaveInfo;
+    }
+    if (otherInfo != null) {
+      $result.otherInfo = otherInfo;
+    }
+    return $result;
+  }
+  ToOrienteerInGameInfo._() : super();
+  factory ToOrienteerInGameInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToOrienteerInGameInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToOrienteerInGameInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'UserId', $pb.PbFieldType.O3, protoName: 'UserId')
+    ..aOM<OrienteerGpsInfo>(3, _omitFieldNames ? '' : 'gpsInfo', protoName: 'gpsInfo', subBuilder: OrienteerGpsInfo.create)
+    ..aOM<OrienteerHrInfo>(4, _omitFieldNames ? '' : 'hrInfo', protoName: 'hrInfo', subBuilder: OrienteerHrInfo.create)
+    ..aOM<OrienteerGameSaveInfo>(5, _omitFieldNames ? '' : 'gameSaveInfo', protoName: 'gameSaveInfo', subBuilder: OrienteerGameSaveInfo.create)
+    ..aOM<OrienteerOtherInfo>(7, _omitFieldNames ? '' : 'otherInfo', protoName: 'otherInfo', subBuilder: OrienteerOtherInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToOrienteerInGameInfo clone() => ToOrienteerInGameInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToOrienteerInGameInfo copyWith(void Function(ToOrienteerInGameInfo) updates) => super.copyWith((message) => updates(message as ToOrienteerInGameInfo)) as ToOrienteerInGameInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToOrienteerInGameInfo create() => ToOrienteerInGameInfo._();
+  ToOrienteerInGameInfo createEmptyInstance() => create();
+  static $pb.PbList<ToOrienteerInGameInfo> createRepeated() => $pb.PbList<ToOrienteerInGameInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToOrienteerInGameInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToOrienteerInGameInfo>(create);
+  static ToOrienteerInGameInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get userId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set userId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasUserId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearUserId() => clearField(1);
+
+  /// OrienteerBaseInfo baseInfo = 2; //用户基本信息,isFullQuery为False时为空
+  @$pb.TagNumber(3)
+  OrienteerGpsInfo get gpsInfo => $_getN(1);
+  @$pb.TagNumber(3)
+  set gpsInfo(OrienteerGpsInfo v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasGpsInfo() => $_has(1);
+  @$pb.TagNumber(3)
+  void clearGpsInfo() => clearField(3);
+  @$pb.TagNumber(3)
+  OrienteerGpsInfo ensureGpsInfo() => $_ensure(1);
+
+  @$pb.TagNumber(4)
+  OrienteerHrInfo get hrInfo => $_getN(2);
+  @$pb.TagNumber(4)
+  set hrInfo(OrienteerHrInfo v) { setField(4, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasHrInfo() => $_has(2);
+  @$pb.TagNumber(4)
+  void clearHrInfo() => clearField(4);
+  @$pb.TagNumber(4)
+  OrienteerHrInfo ensureHrInfo() => $_ensure(2);
+
+  @$pb.TagNumber(5)
+  OrienteerGameSaveInfo get gameSaveInfo => $_getN(3);
+  @$pb.TagNumber(5)
+  set gameSaveInfo(OrienteerGameSaveInfo v) { setField(5, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasGameSaveInfo() => $_has(3);
+  @$pb.TagNumber(5)
+  void clearGameSaveInfo() => clearField(5);
+  @$pb.TagNumber(5)
+  OrienteerGameSaveInfo ensureGameSaveInfo() => $_ensure(3);
+
+  /// CourseBaseInfo  courseBaseInfo = 6;//路线基本信息,isFullQuery为False时为空
+  @$pb.TagNumber(7)
+  OrienteerOtherInfo get otherInfo => $_getN(4);
+  @$pb.TagNumber(7)
+  set otherInfo(OrienteerOtherInfo v) { setField(7, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasOtherInfo() => $_has(4);
+  @$pb.TagNumber(7)
+  void clearOtherInfo() => clearField(7);
+  @$pb.TagNumber(7)
+  OrienteerOtherInfo ensureOtherInfo() => $_ensure(4);
+}
+
+/// 用户基本信息
+class ToUserInActionBasicInfo extends $pb.GeneratedMessage {
+  factory ToUserInActionBasicInfo({
+    $core.int? userId,
+    OrienteerBaseInfo? baseInfo,
+    CourseBaseInfo? courseBaseInfo,
+  }) {
+    final $result = create();
+    if (userId != null) {
+      $result.userId = userId;
+    }
+    if (baseInfo != null) {
+      $result.baseInfo = baseInfo;
+    }
+    if (courseBaseInfo != null) {
+      $result.courseBaseInfo = courseBaseInfo;
+    }
+    return $result;
+  }
+  ToUserInActionBasicInfo._() : super();
+  factory ToUserInActionBasicInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToUserInActionBasicInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToUserInActionBasicInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'UserId', $pb.PbFieldType.O3, protoName: 'UserId')
+    ..aOM<OrienteerBaseInfo>(2, _omitFieldNames ? '' : 'baseInfo', protoName: 'baseInfo', subBuilder: OrienteerBaseInfo.create)
+    ..aOM<CourseBaseInfo>(6, _omitFieldNames ? '' : 'courseBaseInfo', protoName: 'courseBaseInfo', subBuilder: CourseBaseInfo.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToUserInActionBasicInfo clone() => ToUserInActionBasicInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToUserInActionBasicInfo copyWith(void Function(ToUserInActionBasicInfo) updates) => super.copyWith((message) => updates(message as ToUserInActionBasicInfo)) as ToUserInActionBasicInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToUserInActionBasicInfo create() => ToUserInActionBasicInfo._();
+  ToUserInActionBasicInfo createEmptyInstance() => create();
+  static $pb.PbList<ToUserInActionBasicInfo> createRepeated() => $pb.PbList<ToUserInActionBasicInfo>();
+  @$core.pragma('dart2js:noInline')
+  static ToUserInActionBasicInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToUserInActionBasicInfo>(create);
+  static ToUserInActionBasicInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get userId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set userId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasUserId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearUserId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  OrienteerBaseInfo get baseInfo => $_getN(1);
+  @$pb.TagNumber(2)
+  set baseInfo(OrienteerBaseInfo v) { setField(2, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasBaseInfo() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearBaseInfo() => clearField(2);
+  @$pb.TagNumber(2)
+  OrienteerBaseInfo ensureBaseInfo() => $_ensure(1);
+
+  @$pb.TagNumber(6)
+  CourseBaseInfo get courseBaseInfo => $_getN(2);
+  @$pb.TagNumber(6)
+  set courseBaseInfo(CourseBaseInfo v) { setField(6, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasCourseBaseInfo() => $_has(2);
+  @$pb.TagNumber(6)
+  void clearCourseBaseInfo() => clearField(6);
+  @$pb.TagNumber(6)
+  CourseBaseInfo ensureCourseBaseInfo() => $_ensure(2);
+}
+
+class OrienteerBaseInfo extends $pb.GeneratedMessage {
+  factory OrienteerBaseInfo({
+    $core.String? name,
+    $core.String? phone,
+    $core.String? headUrl,
+  }) {
+    final $result = create();
+    if (name != null) {
+      $result.name = name;
+    }
+    if (phone != null) {
+      $result.phone = phone;
+    }
+    if (headUrl != null) {
+      $result.headUrl = headUrl;
+    }
+    return $result;
+  }
+  OrienteerBaseInfo._() : super();
+  factory OrienteerBaseInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory OrienteerBaseInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerBaseInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'Name', protoName: 'Name')
+    ..aOS(2, _omitFieldNames ? '' : 'Phone', protoName: 'Phone')
+    ..aOS(3, _omitFieldNames ? '' : 'HeadUrl', protoName: 'HeadUrl')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  OrienteerBaseInfo clone() => OrienteerBaseInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  OrienteerBaseInfo copyWith(void Function(OrienteerBaseInfo) updates) => super.copyWith((message) => updates(message as OrienteerBaseInfo)) as OrienteerBaseInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static OrienteerBaseInfo create() => OrienteerBaseInfo._();
+  OrienteerBaseInfo createEmptyInstance() => create();
+  static $pb.PbList<OrienteerBaseInfo> createRepeated() => $pb.PbList<OrienteerBaseInfo>();
+  @$core.pragma('dart2js:noInline')
+  static OrienteerBaseInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OrienteerBaseInfo>(create);
+  static OrienteerBaseInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.String get name => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set name($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasName() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearName() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get phone => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set phone($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasPhone() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearPhone() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.String get headUrl => $_getSZ(2);
+  @$pb.TagNumber(3)
+  set headUrl($core.String v) { $_setString(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasHeadUrl() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearHeadUrl() => clearField(3);
+}
+
+class OrienteerGpsInfo extends $pb.GeneratedMessage {
+  factory OrienteerGpsInfo({
+    $core.Iterable<GameGpsInfo>? gameGpsInfos,
+    $core.int? distance,
+    $core.int? pace,
+  }) {
+    final $result = create();
+    if (gameGpsInfos != null) {
+      $result.gameGpsInfos.addAll(gameGpsInfos);
+    }
+    if (distance != null) {
+      $result.distance = distance;
+    }
+    if (pace != null) {
+      $result.pace = pace;
+    }
+    return $result;
+  }
+  OrienteerGpsInfo._() : super();
+  factory OrienteerGpsInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory OrienteerGpsInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerGpsInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..pc<GameGpsInfo>(1, _omitFieldNames ? '' : 'gameGpsInfos', $pb.PbFieldType.PM, protoName: 'gameGpsInfos', subBuilder: GameGpsInfo.create)
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'Distance', $pb.PbFieldType.O3, protoName: 'Distance')
+    ..a<$core.int>(3, _omitFieldNames ? '' : 'Pace', $pb.PbFieldType.O3, protoName: 'Pace')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  OrienteerGpsInfo clone() => OrienteerGpsInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  OrienteerGpsInfo copyWith(void Function(OrienteerGpsInfo) updates) => super.copyWith((message) => updates(message as OrienteerGpsInfo)) as OrienteerGpsInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static OrienteerGpsInfo create() => OrienteerGpsInfo._();
+  OrienteerGpsInfo createEmptyInstance() => create();
+  static $pb.PbList<OrienteerGpsInfo> createRepeated() => $pb.PbList<OrienteerGpsInfo>();
+  @$core.pragma('dart2js:noInline')
+  static OrienteerGpsInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OrienteerGpsInfo>(create);
+  static OrienteerGpsInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<GameGpsInfo> get gameGpsInfos => $_getList(0);
+
+  @$pb.TagNumber(2)
+  $core.int get distance => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set distance($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasDistance() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearDistance() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.int get pace => $_getIZ(2);
+  @$pb.TagNumber(3)
+  set pace($core.int v) { $_setSignedInt32(2, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasPace() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearPace() => clearField(3);
+}
+
+class OrienteerHrInfo extends $pb.GeneratedMessage {
+  factory OrienteerHrInfo({
+    $core.Iterable<HeartRate>? hrInfo,
+  }) {
+    final $result = create();
+    if (hrInfo != null) {
+      $result.hrInfo.addAll(hrInfo);
+    }
+    return $result;
+  }
+  OrienteerHrInfo._() : super();
+  factory OrienteerHrInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory OrienteerHrInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerHrInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..pc<HeartRate>(1, _omitFieldNames ? '' : 'hrInfo', $pb.PbFieldType.PM, protoName: 'hrInfo', subBuilder: HeartRate.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  OrienteerHrInfo clone() => OrienteerHrInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  OrienteerHrInfo copyWith(void Function(OrienteerHrInfo) updates) => super.copyWith((message) => updates(message as OrienteerHrInfo)) as OrienteerHrInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static OrienteerHrInfo create() => OrienteerHrInfo._();
+  OrienteerHrInfo createEmptyInstance() => create();
+  static $pb.PbList<OrienteerHrInfo> createRepeated() => $pb.PbList<OrienteerHrInfo>();
+  @$core.pragma('dart2js:noInline')
+  static OrienteerHrInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OrienteerHrInfo>(create);
+  static OrienteerHrInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.List<HeartRate> get hrInfo => $_getList(0);
+}
+
+class OrienteerOtherInfo extends $pb.GeneratedMessage {
+  factory OrienteerOtherInfo({
+    $core.int? stepNum,
+    $core.int? heartRatePercent,
+  }) {
+    final $result = create();
+    if (stepNum != null) {
+      $result.stepNum = stepNum;
+    }
+    if (heartRatePercent != null) {
+      $result.heartRatePercent = heartRatePercent;
+    }
+    return $result;
+  }
+  OrienteerOtherInfo._() : super();
+  factory OrienteerOtherInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory OrienteerOtherInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerOtherInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'StepNum', $pb.PbFieldType.O3, protoName: 'StepNum')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'HeartRatePercent', $pb.PbFieldType.O3, protoName: 'HeartRatePercent')
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  OrienteerOtherInfo clone() => OrienteerOtherInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  OrienteerOtherInfo copyWith(void Function(OrienteerOtherInfo) updates) => super.copyWith((message) => updates(message as OrienteerOtherInfo)) as OrienteerOtherInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static OrienteerOtherInfo create() => OrienteerOtherInfo._();
+  OrienteerOtherInfo createEmptyInstance() => create();
+  static $pb.PbList<OrienteerOtherInfo> createRepeated() => $pb.PbList<OrienteerOtherInfo>();
+  @$core.pragma('dart2js:noInline')
+  static OrienteerOtherInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OrienteerOtherInfo>(create);
+  static OrienteerOtherInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get stepNum => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set stepNum($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasStepNum() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearStepNum() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get heartRatePercent => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set heartRatePercent($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasHeartRatePercent() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearHeartRatePercent() => clearField(2);
+}
+
+class CourseBaseInfo extends $pb.GeneratedMessage {
+  factory CourseBaseInfo({
+    $core.int? courseId,
+    $core.String? courseName,
+    $core.Iterable<ToControlPoint>? controlPointSortedList,
+  }) {
+    final $result = create();
+    if (courseId != null) {
+      $result.courseId = courseId;
+    }
+    if (courseName != null) {
+      $result.courseName = courseName;
+    }
+    if (controlPointSortedList != null) {
+      $result.controlPointSortedList.addAll(controlPointSortedList);
+    }
+    return $result;
+  }
+  CourseBaseInfo._() : super();
+  factory CourseBaseInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory CourseBaseInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CourseBaseInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..a<$core.int>(1, _omitFieldNames ? '' : 'CourseId', $pb.PbFieldType.O3, protoName: 'CourseId')
+    ..aOS(2, _omitFieldNames ? '' : 'CourseName', protoName: 'CourseName')
+    ..pc<ToControlPoint>(3, _omitFieldNames ? '' : 'controlPointSortedList', $pb.PbFieldType.PM, protoName: 'controlPointSortedList', subBuilder: ToControlPoint.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  CourseBaseInfo clone() => CourseBaseInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  CourseBaseInfo copyWith(void Function(CourseBaseInfo) updates) => super.copyWith((message) => updates(message as CourseBaseInfo)) as CourseBaseInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static CourseBaseInfo create() => CourseBaseInfo._();
+  CourseBaseInfo createEmptyInstance() => create();
+  static $pb.PbList<CourseBaseInfo> createRepeated() => $pb.PbList<CourseBaseInfo>();
+  @$core.pragma('dart2js:noInline')
+  static CourseBaseInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<CourseBaseInfo>(create);
+  static CourseBaseInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get courseId => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set courseId($core.int v) { $_setSignedInt32(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasCourseId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearCourseId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get courseName => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set courseName($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasCourseName() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearCourseName() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $core.List<ToControlPoint> get controlPointSortedList => $_getList(2);
+}
+
+class ToControlPoint extends $pb.GeneratedMessage {
+  factory ToControlPoint({
+    $fixnum.Int64? id,
+    $core.String? sn,
+    Position? ciPosition,
+    CType? cType,
+    $core.int? orderNo,
+    $core.bool? isCheckSuccess,
+    $2.Duration? checkAfterLast,
+    $0.Timestamp? punchTime,
+    $core.int? disAfterLast,
+    $core.int? disStraightAfterLast,
+    $core.int? paceAfterLast,
+    $core.int? paceAfterStart,
+    $2.Duration? checkAfterStart,
+  }) {
+    final $result = create();
+    if (id != null) {
+      $result.id = id;
+    }
+    if (sn != null) {
+      $result.sn = sn;
+    }
+    if (ciPosition != null) {
+      $result.ciPosition = ciPosition;
+    }
+    if (cType != null) {
+      $result.cType = cType;
+    }
+    if (orderNo != null) {
+      $result.orderNo = orderNo;
+    }
+    if (isCheckSuccess != null) {
+      $result.isCheckSuccess = isCheckSuccess;
+    }
+    if (checkAfterLast != null) {
+      $result.checkAfterLast = checkAfterLast;
+    }
+    if (punchTime != null) {
+      $result.punchTime = punchTime;
+    }
+    if (disAfterLast != null) {
+      $result.disAfterLast = disAfterLast;
+    }
+    if (disStraightAfterLast != null) {
+      $result.disStraightAfterLast = disStraightAfterLast;
+    }
+    if (paceAfterLast != null) {
+      $result.paceAfterLast = paceAfterLast;
+    }
+    if (paceAfterStart != null) {
+      $result.paceAfterStart = paceAfterStart;
+    }
+    if (checkAfterStart != null) {
+      $result.checkAfterStart = checkAfterStart;
+    }
+    return $result;
+  }
+  ToControlPoint._() : super();
+  factory ToControlPoint.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory ToControlPoint.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ToControlPoint', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'id')
+    ..aOS(2, _omitFieldNames ? '' : 'sn')
+    ..aOM<Position>(3, _omitFieldNames ? '' : 'ciPosition', protoName: 'ciPosition', subBuilder: Position.create)
+    ..e<CType>(4, _omitFieldNames ? '' : 'cType', $pb.PbFieldType.OE, protoName: 'cType', defaultOrMaker: CType.UnKnowType, valueOf: CType.valueOf, enumValues: CType.values)
+    ..a<$core.int>(5, _omitFieldNames ? '' : 'orderNo', $pb.PbFieldType.O3, protoName: 'orderNo')
+    ..aOB(6, _omitFieldNames ? '' : 'isCheckSuccess')
+    ..aOM<$2.Duration>(7, _omitFieldNames ? '' : 'checkAfterLast', subBuilder: $2.Duration.create)
+    ..aOM<$0.Timestamp>(8, _omitFieldNames ? '' : 'punchTime', protoName: 'punchTime', subBuilder: $0.Timestamp.create)
+    ..a<$core.int>(9, _omitFieldNames ? '' : 'disAfterLast', $pb.PbFieldType.O3, protoName: 'disAfterLast')
+    ..a<$core.int>(10, _omitFieldNames ? '' : 'disStraightAfterLast', $pb.PbFieldType.O3, protoName: 'disStraightAfterLast')
+    ..a<$core.int>(11, _omitFieldNames ? '' : 'paceAfterLast', $pb.PbFieldType.O3, protoName: 'paceAfterLast')
+    ..a<$core.int>(12, _omitFieldNames ? '' : 'paceAfterStart', $pb.PbFieldType.O3, protoName: 'paceAfterStart')
+    ..aOM<$2.Duration>(13, _omitFieldNames ? '' : 'checkAfterStart', subBuilder: $2.Duration.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  ToControlPoint clone() => ToControlPoint()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  ToControlPoint copyWith(void Function(ToControlPoint) updates) => super.copyWith((message) => updates(message as ToControlPoint)) as ToControlPoint;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static ToControlPoint create() => ToControlPoint._();
+  ToControlPoint createEmptyInstance() => create();
+  static $pb.PbList<ToControlPoint> createRepeated() => $pb.PbList<ToControlPoint>();
+  @$core.pragma('dart2js:noInline')
+  static ToControlPoint getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ToControlPoint>(create);
+  static ToControlPoint? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get id => $_getI64(0);
+  @$pb.TagNumber(1)
+  set id($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.String get sn => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set sn($core.String v) { $_setString(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasSn() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearSn() => clearField(2);
+
+  @$pb.TagNumber(3)
+  Position get ciPosition => $_getN(2);
+  @$pb.TagNumber(3)
+  set ciPosition(Position v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasCiPosition() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearCiPosition() => clearField(3);
+  @$pb.TagNumber(3)
+  Position ensureCiPosition() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  CType get cType => $_getN(3);
+  @$pb.TagNumber(4)
+  set cType(CType v) { setField(4, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasCType() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearCType() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.int get orderNo => $_getIZ(4);
+  @$pb.TagNumber(5)
+  set orderNo($core.int v) { $_setSignedInt32(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasOrderNo() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearOrderNo() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.bool get isCheckSuccess => $_getBF(5);
+  @$pb.TagNumber(6)
+  set isCheckSuccess($core.bool v) { $_setBool(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasIsCheckSuccess() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearIsCheckSuccess() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $2.Duration get checkAfterLast => $_getN(6);
+  @$pb.TagNumber(7)
+  set checkAfterLast($2.Duration v) { setField(7, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasCheckAfterLast() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearCheckAfterLast() => clearField(7);
+  @$pb.TagNumber(7)
+  $2.Duration ensureCheckAfterLast() => $_ensure(6);
+
+  @$pb.TagNumber(8)
+  $0.Timestamp get punchTime => $_getN(7);
+  @$pb.TagNumber(8)
+  set punchTime($0.Timestamp v) { setField(8, v); }
+  @$pb.TagNumber(8)
+  $core.bool hasPunchTime() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearPunchTime() => clearField(8);
+  @$pb.TagNumber(8)
+  $0.Timestamp ensurePunchTime() => $_ensure(7);
+
+  @$pb.TagNumber(9)
+  $core.int get disAfterLast => $_getIZ(8);
+  @$pb.TagNumber(9)
+  set disAfterLast($core.int v) { $_setSignedInt32(8, v); }
+  @$pb.TagNumber(9)
+  $core.bool hasDisAfterLast() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearDisAfterLast() => clearField(9);
+
+  @$pb.TagNumber(10)
+  $core.int get disStraightAfterLast => $_getIZ(9);
+  @$pb.TagNumber(10)
+  set disStraightAfterLast($core.int v) { $_setSignedInt32(9, v); }
+  @$pb.TagNumber(10)
+  $core.bool hasDisStraightAfterLast() => $_has(9);
+  @$pb.TagNumber(10)
+  void clearDisStraightAfterLast() => clearField(10);
+
+  @$pb.TagNumber(11)
+  $core.int get paceAfterLast => $_getIZ(10);
+  @$pb.TagNumber(11)
+  set paceAfterLast($core.int v) { $_setSignedInt32(10, v); }
+  @$pb.TagNumber(11)
+  $core.bool hasPaceAfterLast() => $_has(10);
+  @$pb.TagNumber(11)
+  void clearPaceAfterLast() => clearField(11);
+
+  @$pb.TagNumber(12)
+  $core.int get paceAfterStart => $_getIZ(11);
+  @$pb.TagNumber(12)
+  set paceAfterStart($core.int v) { $_setSignedInt32(11, v); }
+  @$pb.TagNumber(12)
+  $core.bool hasPaceAfterStart() => $_has(11);
+  @$pb.TagNumber(12)
+  void clearPaceAfterStart() => clearField(12);
+
+  @$pb.TagNumber(13)
+  $2.Duration get checkAfterStart => $_getN(12);
+  @$pb.TagNumber(13)
+  set checkAfterStart($2.Duration v) { setField(13, v); }
+  @$pb.TagNumber(13)
+  $core.bool hasCheckAfterStart() => $_has(12);
+  @$pb.TagNumber(13)
+  void clearCheckAfterStart() => clearField(13);
+  @$pb.TagNumber(13)
+  $2.Duration ensureCheckAfterStart() => $_ensure(12);
+}
+
+class OrienteerGameSaveInfo extends $pb.GeneratedMessage {
+  factory OrienteerGameSaveInfo({
+    $0.Timestamp? startAt,
+    $2.Duration? duration,
+    GameArriveControlPoint? nextControlPoint,
+    $core.Iterable<OrienteerGameSaveControlPoint>? checkedSortedList,
+  }) {
+    final $result = create();
+    if (startAt != null) {
+      $result.startAt = startAt;
+    }
+    if (duration != null) {
+      $result.duration = duration;
+    }
+    if (nextControlPoint != null) {
+      $result.nextControlPoint = nextControlPoint;
+    }
+    if (checkedSortedList != null) {
+      $result.checkedSortedList.addAll(checkedSortedList);
+    }
+    return $result;
+  }
+  OrienteerGameSaveInfo._() : super();
+  factory OrienteerGameSaveInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory OrienteerGameSaveInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerGameSaveInfo', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aOM<$0.Timestamp>(1, _omitFieldNames ? '' : 'startAt', subBuilder: $0.Timestamp.create)
+    ..aOM<$2.Duration>(2, _omitFieldNames ? '' : 'duration', subBuilder: $2.Duration.create)
+    ..aOM<GameArriveControlPoint>(3, _omitFieldNames ? '' : 'nextControlPoint', protoName: 'nextControlPoint', subBuilder: GameArriveControlPoint.create)
+    ..pc<OrienteerGameSaveControlPoint>(4, _omitFieldNames ? '' : 'checkedSortedList', $pb.PbFieldType.PM, subBuilder: OrienteerGameSaveControlPoint.create)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  OrienteerGameSaveInfo clone() => OrienteerGameSaveInfo()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  OrienteerGameSaveInfo copyWith(void Function(OrienteerGameSaveInfo) updates) => super.copyWith((message) => updates(message as OrienteerGameSaveInfo)) as OrienteerGameSaveInfo;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static OrienteerGameSaveInfo create() => OrienteerGameSaveInfo._();
+  OrienteerGameSaveInfo createEmptyInstance() => create();
+  static $pb.PbList<OrienteerGameSaveInfo> createRepeated() => $pb.PbList<OrienteerGameSaveInfo>();
+  @$core.pragma('dart2js:noInline')
+  static OrienteerGameSaveInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OrienteerGameSaveInfo>(create);
+  static OrienteerGameSaveInfo? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $0.Timestamp get startAt => $_getN(0);
+  @$pb.TagNumber(1)
+  set startAt($0.Timestamp v) { setField(1, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasStartAt() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearStartAt() => clearField(1);
+  @$pb.TagNumber(1)
+  $0.Timestamp ensureStartAt() => $_ensure(0);
+
+  @$pb.TagNumber(2)
+  $2.Duration get duration => $_getN(1);
+  @$pb.TagNumber(2)
+  set duration($2.Duration v) { setField(2, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasDuration() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearDuration() => clearField(2);
+  @$pb.TagNumber(2)
+  $2.Duration ensureDuration() => $_ensure(1);
+
+  @$pb.TagNumber(3)
+  GameArriveControlPoint get nextControlPoint => $_getN(2);
+  @$pb.TagNumber(3)
+  set nextControlPoint(GameArriveControlPoint v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasNextControlPoint() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearNextControlPoint() => clearField(3);
+  @$pb.TagNumber(3)
+  GameArriveControlPoint ensureNextControlPoint() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $core.List<OrienteerGameSaveControlPoint> get checkedSortedList => $_getList(3);
+}
+
+class OrienteerGameSaveControlPoint extends $pb.GeneratedMessage {
+  factory OrienteerGameSaveControlPoint({
+    $fixnum.Int64? controlPointId,
+    $core.bool? isCheckSuccess,
+    $2.Duration? checkAfterStart,
+    $core.double? distinctAfterStart,
+    $core.double? longitude,
+    $core.double? latitude,
+    $core.double? altitude,
+  }) {
+    final $result = create();
+    if (controlPointId != null) {
+      $result.controlPointId = controlPointId;
+    }
+    if (isCheckSuccess != null) {
+      $result.isCheckSuccess = isCheckSuccess;
+    }
+    if (checkAfterStart != null) {
+      $result.checkAfterStart = checkAfterStart;
+    }
+    if (distinctAfterStart != null) {
+      $result.distinctAfterStart = distinctAfterStart;
+    }
+    if (longitude != null) {
+      $result.longitude = longitude;
+    }
+    if (latitude != null) {
+      $result.latitude = latitude;
+    }
+    if (altitude != null) {
+      $result.altitude = altitude;
+    }
+    return $result;
+  }
+  OrienteerGameSaveControlPoint._() : super();
+  factory OrienteerGameSaveControlPoint.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory OrienteerGameSaveControlPoint.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'OrienteerGameSaveControlPoint', package: const $pb.PackageName(_omitMessageNames ? '' : 'base.v1'), createEmptyInstance: create)
+    ..aInt64(1, _omitFieldNames ? '' : 'controlPointId')
+    ..aOB(2, _omitFieldNames ? '' : 'isCheckSuccess')
+    ..aOM<$2.Duration>(3, _omitFieldNames ? '' : 'checkAfterStart', subBuilder: $2.Duration.create)
+    ..a<$core.double>(4, _omitFieldNames ? '' : 'distinctAfterStart', $pb.PbFieldType.OD)
+    ..a<$core.double>(5, _omitFieldNames ? '' : 'longitude', $pb.PbFieldType.OD)
+    ..a<$core.double>(6, _omitFieldNames ? '' : 'latitude', $pb.PbFieldType.OD)
+    ..a<$core.double>(7, _omitFieldNames ? '' : 'altitude', $pb.PbFieldType.OD)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  OrienteerGameSaveControlPoint clone() => OrienteerGameSaveControlPoint()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  OrienteerGameSaveControlPoint copyWith(void Function(OrienteerGameSaveControlPoint) updates) => super.copyWith((message) => updates(message as OrienteerGameSaveControlPoint)) as OrienteerGameSaveControlPoint;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static OrienteerGameSaveControlPoint create() => OrienteerGameSaveControlPoint._();
+  OrienteerGameSaveControlPoint createEmptyInstance() => create();
+  static $pb.PbList<OrienteerGameSaveControlPoint> createRepeated() => $pb.PbList<OrienteerGameSaveControlPoint>();
+  @$core.pragma('dart2js:noInline')
+  static OrienteerGameSaveControlPoint getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<OrienteerGameSaveControlPoint>(create);
+  static OrienteerGameSaveControlPoint? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get controlPointId => $_getI64(0);
+  @$pb.TagNumber(1)
+  set controlPointId($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasControlPointId() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearControlPointId() => clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.bool get isCheckSuccess => $_getBF(1);
+  @$pb.TagNumber(2)
+  set isCheckSuccess($core.bool v) { $_setBool(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasIsCheckSuccess() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearIsCheckSuccess() => clearField(2);
+
+  @$pb.TagNumber(3)
+  $2.Duration get checkAfterStart => $_getN(2);
+  @$pb.TagNumber(3)
+  set checkAfterStart($2.Duration v) { setField(3, v); }
+  @$pb.TagNumber(3)
+  $core.bool hasCheckAfterStart() => $_has(2);
+  @$pb.TagNumber(3)
+  void clearCheckAfterStart() => clearField(3);
+  @$pb.TagNumber(3)
+  $2.Duration ensureCheckAfterStart() => $_ensure(2);
+
+  @$pb.TagNumber(4)
+  $core.double get distinctAfterStart => $_getN(3);
+  @$pb.TagNumber(4)
+  set distinctAfterStart($core.double v) { $_setDouble(3, v); }
+  @$pb.TagNumber(4)
+  $core.bool hasDistinctAfterStart() => $_has(3);
+  @$pb.TagNumber(4)
+  void clearDistinctAfterStart() => clearField(4);
+
+  @$pb.TagNumber(5)
+  $core.double get longitude => $_getN(4);
+  @$pb.TagNumber(5)
+  set longitude($core.double v) { $_setDouble(4, v); }
+  @$pb.TagNumber(5)
+  $core.bool hasLongitude() => $_has(4);
+  @$pb.TagNumber(5)
+  void clearLongitude() => clearField(5);
+
+  @$pb.TagNumber(6)
+  $core.double get latitude => $_getN(5);
+  @$pb.TagNumber(6)
+  set latitude($core.double v) { $_setDouble(5, v); }
+  @$pb.TagNumber(6)
+  $core.bool hasLatitude() => $_has(5);
+  @$pb.TagNumber(6)
+  void clearLatitude() => clearField(6);
+
+  @$pb.TagNumber(7)
+  $core.double get altitude => $_getN(6);
+  @$pb.TagNumber(7)
+  set altitude($core.double v) { $_setDouble(6, v); }
+  @$pb.TagNumber(7)
+  $core.bool hasAltitude() => $_has(6);
+  @$pb.TagNumber(7)
+  void clearAltitude() => clearField(7);
+}
+
+
+const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
+const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

+ 293 - 0
app_business/lib/generated/base.pbenum.dart

@@ -0,0 +1,293 @@
+//
+//  Generated code. Do not modify.
+//  source: base.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+
+import 'package:protobuf/protobuf.dart' as $pb;
+
+class ErrorCode extends $pb.ProtobufEnum {
+  static const ErrorCode OK = ErrorCode._(0, _omitEnumNames ? '' : 'OK');
+  static const ErrorCode TokenExpire = ErrorCode._(1000, _omitEnumNames ? '' : 'TokenExpire');
+  static const ErrorCode UserBan = ErrorCode._(1001, _omitEnumNames ? '' : 'UserBan');
+  static const ErrorCode VfCodeExpire = ErrorCode._(1002, _omitEnumNames ? '' : 'VfCodeExpire');
+  static const ErrorCode SmsSendFail = ErrorCode._(1003, _omitEnumNames ? '' : 'SmsSendFail');
+  static const ErrorCode UserStatusErr = ErrorCode._(1008, _omitEnumNames ? '' : 'UserStatusErr');
+  static const ErrorCode StatusErr = ErrorCode._(1009, _omitEnumNames ? '' : 'StatusErr');
+  static const ErrorCode PhoneNotExist = ErrorCode._(2001, _omitEnumNames ? '' : 'PhoneNotExist');
+  static const ErrorCode UnknownErr = ErrorCode._(2002, _omitEnumNames ? '' : 'UnknownErr');
+  static const ErrorCode ParamErr = ErrorCode._(5000, _omitEnumNames ? '' : 'ParamErr');
+  static const ErrorCode HeadSourceErr = ErrorCode._(5001, _omitEnumNames ? '' : 'HeadSourceErr');
+  static const ErrorCode DATABASE = ErrorCode._(9000, _omitEnumNames ? '' : 'DATABASE');
+  static const ErrorCode NoRecord = ErrorCode._(9001, _omitEnumNames ? '' : 'NoRecord');
+
+  static const $core.List<ErrorCode> values = <ErrorCode> [
+    OK,
+    TokenExpire,
+    UserBan,
+    VfCodeExpire,
+    SmsSendFail,
+    UserStatusErr,
+    StatusErr,
+    PhoneNotExist,
+    UnknownErr,
+    ParamErr,
+    HeadSourceErr,
+    DATABASE,
+    NoRecord,
+  ];
+
+  static final $core.Map<$core.int, ErrorCode> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static ErrorCode? valueOf($core.int value) => _byValue[value];
+
+  const ErrorCode._($core.int v, $core.String n) : super(v, n);
+}
+
+class ShopType extends $pb.ProtobufEnum {
+  static const ShopType UnKnowShop = ShopType._(0, _omitEnumNames ? '' : 'UnKnowShop');
+  static const ShopType ParkShop = ShopType._(1, _omitEnumNames ? '' : 'ParkShop');
+  static const ShopType IPShop = ShopType._(2, _omitEnumNames ? '' : 'IPShop');
+  static const ShopType AdminShop = ShopType._(3, _omitEnumNames ? '' : 'AdminShop');
+
+  static const $core.List<ShopType> values = <ShopType> [
+    UnKnowShop,
+    ParkShop,
+    IPShop,
+    AdminShop,
+  ];
+
+  static final $core.Map<$core.int, ShopType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static ShopType? valueOf($core.int value) => _byValue[value];
+
+  const ShopType._($core.int v, $core.String n) : super(v, n);
+}
+
+/// UserType 用户类型
+class UserType extends $pb.ProtobufEnum {
+  static const UserType UnDefine = UserType._(0, _omitEnumNames ? '' : 'UnDefine');
+  static const UserType AppUser = UserType._(1, _omitEnumNames ? '' : 'AppUser');
+  static const UserType ParkAdmin = UserType._(2, _omitEnumNames ? '' : 'ParkAdmin');
+  static const UserType IPAdmin = UserType._(3, _omitEnumNames ? '' : 'IPAdmin');
+  static const UserType SysAdmin = UserType._(4, _omitEnumNames ? '' : 'SysAdmin');
+  static const UserType ToAdmin = UserType._(5, _omitEnumNames ? '' : 'ToAdmin');
+
+  static const $core.List<UserType> values = <UserType> [
+    UnDefine,
+    AppUser,
+    ParkAdmin,
+    IPAdmin,
+    SysAdmin,
+    ToAdmin,
+  ];
+
+  static final $core.Map<$core.int, UserType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static UserType? valueOf($core.int value) => _byValue[value];
+
+  const UserType._($core.int v, $core.String n) : super(v, n);
+}
+
+/// LoginSource 登陆来源
+class LoginSource extends $pb.ProtobufEnum {
+  static const LoginSource UnDef = LoginSource._(0, _omitEnumNames ? '' : 'UnDef');
+  static const LoginSource UserApp = LoginSource._(1, _omitEnumNames ? '' : 'UserApp');
+  static const LoginSource WebAdmin = LoginSource._(2, _omitEnumNames ? '' : 'WebAdmin');
+  static const LoginSource ShopApp = LoginSource._(3, _omitEnumNames ? '' : 'ShopApp');
+  static const LoginSource ToApp = LoginSource._(4, _omitEnumNames ? '' : 'ToApp');
+
+  static const $core.List<LoginSource> values = <LoginSource> [
+    UnDef,
+    UserApp,
+    WebAdmin,
+    ShopApp,
+    ToApp,
+  ];
+
+  static final $core.Map<$core.int, LoginSource> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static LoginSource? valueOf($core.int value) => _byValue[value];
+
+  const LoginSource._($core.int v, $core.String n) : super(v, n);
+}
+
+class SmsType extends $pb.ProtobufEnum {
+  static const SmsType UnKnow = SmsType._(0, _omitEnumNames ? '' : 'UnKnow');
+  static const SmsType Login = SmsType._(1, _omitEnumNames ? '' : 'Login');
+  static const SmsType SignUp = SmsType._(2, _omitEnumNames ? '' : 'SignUp');
+
+  static const $core.List<SmsType> values = <SmsType> [
+    UnKnow,
+    Login,
+    SignUp,
+  ];
+
+  static final $core.Map<$core.int, SmsType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static SmsType? valueOf($core.int value) => _byValue[value];
+
+  const SmsType._($core.int v, $core.String n) : super(v, n);
+}
+
+class ProjectContentType extends $pb.ProtobufEnum {
+  static const ProjectContentType Text = ProjectContentType._(0, _omitEnumNames ? '' : 'Text');
+  static const ProjectContentType Html = ProjectContentType._(1, _omitEnumNames ? '' : 'Html');
+
+  static const $core.List<ProjectContentType> values = <ProjectContentType> [
+    Text,
+    Html,
+  ];
+
+  static final $core.Map<$core.int, ProjectContentType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static ProjectContentType? valueOf($core.int value) => _byValue[value];
+
+  const ProjectContentType._($core.int v, $core.String n) : super(v, n);
+}
+
+class CriterionType extends $pb.ProtobufEnum {
+  static const CriterionType CrUnKnow = CriterionType._(0, _omitEnumNames ? '' : 'CrUnKnow');
+  static const CriterionType CrOrder = CriterionType._(1, _omitEnumNames ? '' : 'CrOrder');
+  static const CriterionType CrNum = CriterionType._(2, _omitEnumNames ? '' : 'CrNum');
+
+  static const $core.List<CriterionType> values = <CriterionType> [
+    CrUnKnow,
+    CrOrder,
+    CrNum,
+  ];
+
+  static final $core.Map<$core.int, CriterionType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static CriterionType? valueOf($core.int value) => _byValue[value];
+
+  const CriterionType._($core.int v, $core.String n) : super(v, n);
+}
+
+class CType extends $pb.ProtobufEnum {
+  static const CType UnKnowType = CType._(0, _omitEnumNames ? '' : 'UnKnowType');
+  static const CType BeginType = CType._(1, _omitEnumNames ? '' : 'BeginType');
+  static const CType MiddleType = CType._(2, _omitEnumNames ? '' : 'MiddleType');
+  static const CType EndType = CType._(3, _omitEnumNames ? '' : 'EndType');
+
+  static const $core.List<CType> values = <CType> [
+    UnKnowType,
+    BeginType,
+    MiddleType,
+    EndType,
+  ];
+
+  static final $core.Map<$core.int, CType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static CType? valueOf($core.int value) => _byValue[value];
+
+  const CType._($core.int v, $core.String n) : super(v, n);
+}
+
+class StatusType extends $pb.ProtobufEnum {
+  static const StatusType UnKnowStatus = StatusType._(0, _omitEnumNames ? '' : 'UnKnowStatus');
+  static const StatusType NormalStatus = StatusType._(1, _omitEnumNames ? '' : 'NormalStatus');
+  static const StatusType DisabledStatus = StatusType._(8, _omitEnumNames ? '' : 'DisabledStatus');
+  static const StatusType DeleteStatus = StatusType._(9, _omitEnumNames ? '' : 'DeleteStatus');
+
+  static const $core.List<StatusType> values = <StatusType> [
+    UnKnowStatus,
+    NormalStatus,
+    DisabledStatus,
+    DeleteStatus,
+  ];
+
+  static final $core.Map<$core.int, StatusType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static StatusType? valueOf($core.int value) => _byValue[value];
+
+  const StatusType._($core.int v, $core.String n) : super(v, n);
+}
+
+class HrBandType extends $pb.ProtobufEnum {
+  static const HrBandType UnKnowHrBand = HrBandType._(0, _omitEnumNames ? '' : 'UnKnowHrBand');
+  static const HrBandType UseHrBand = HrBandType._(1, _omitEnumNames ? '' : 'UseHrBand');
+  static const HrBandType NotUseHrBand = HrBandType._(2, _omitEnumNames ? '' : 'NotUseHrBand');
+
+  static const $core.List<HrBandType> values = <HrBandType> [
+    UnKnowHrBand,
+    UseHrBand,
+    NotUseHrBand,
+  ];
+
+  static final $core.Map<$core.int, HrBandType> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static HrBandType? valueOf($core.int value) => _byValue[value];
+
+  const HrBandType._($core.int v, $core.String n) : super(v, n);
+}
+
+class GameState extends $pb.ProtobufEnum {
+  static const GameState AllGameState = GameState._(0, _omitEnumNames ? '' : 'AllGameState');
+  static const GameState NormalGameState = GameState._(1, _omitEnumNames ? '' : 'NormalGameState');
+  static const GameState abnormalGameState = GameState._(2, _omitEnumNames ? '' : 'abnormalGameState');
+
+  static const $core.List<GameState> values = <GameState> [
+    AllGameState,
+    NormalGameState,
+    abnormalGameState,
+  ];
+
+  static final $core.Map<$core.int, GameState> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static GameState? valueOf($core.int value) => _byValue[value];
+
+  const GameState._($core.int v, $core.String n) : super(v, n);
+}
+
+class GameHistorySource extends $pb.ProtobufEnum {
+  static const GameHistorySource GameHistorySourcAll = GameHistorySource._(0, _omitEnumNames ? '' : 'GameHistorySourcAll');
+  static const GameHistorySource GameHistorySourceOrienteer = GameHistorySource._(1, _omitEnumNames ? '' : 'GameHistorySourceOrienteer');
+  static const GameHistorySource GameHistorySourceAss = GameHistorySource._(2, _omitEnumNames ? '' : 'GameHistorySourceAss');
+
+  static const $core.List<GameHistorySource> values = <GameHistorySource> [
+    GameHistorySourcAll,
+    GameHistorySourceOrienteer,
+    GameHistorySourceAss,
+  ];
+
+  static final $core.Map<$core.int, GameHistorySource> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static GameHistorySource? valueOf($core.int value) => _byValue[value];
+
+  const GameHistorySource._($core.int v, $core.String n) : super(v, n);
+}
+
+class BackGroundColor extends $pb.ProtobufEnum {
+  static const BackGroundColor UnKnowColor = BackGroundColor._(0, _omitEnumNames ? '' : 'UnKnowColor');
+  static const BackGroundColor BlueColor = BackGroundColor._(1, _omitEnumNames ? '' : 'BlueColor');
+  static const BackGroundColor GreenColor = BackGroundColor._(2, _omitEnumNames ? '' : 'GreenColor');
+  static const BackGroundColor BrownColor = BackGroundColor._(3, _omitEnumNames ? '' : 'BrownColor');
+
+  static const $core.List<BackGroundColor> values = <BackGroundColor> [
+    UnKnowColor,
+    BlueColor,
+    GreenColor,
+    BrownColor,
+  ];
+
+  static final $core.Map<$core.int, BackGroundColor> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static BackGroundColor? valueOf($core.int value) => _byValue[value];
+
+  const BackGroundColor._($core.int v, $core.String n) : super(v, n);
+}
+
+class User_Sex extends $pb.ProtobufEnum {
+  static const User_Sex UnDefine = User_Sex._(0, _omitEnumNames ? '' : 'UnDefine');
+  static const User_Sex Male = User_Sex._(1, _omitEnumNames ? '' : 'Male');
+  static const User_Sex Female = User_Sex._(2, _omitEnumNames ? '' : 'Female');
+
+  static const $core.List<User_Sex> values = <User_Sex> [
+    UnDefine,
+    Male,
+    Female,
+  ];
+
+  static final $core.Map<$core.int, User_Sex> _byValue = $pb.ProtobufEnum.initByValue(values);
+  static User_Sex? valueOf($core.int value) => _byValue[value];
+
+  const User_Sex._($core.int v, $core.String n) : super(v, n);
+}
+
+
+const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');

+ 1431 - 0
app_business/lib/generated/base.pbjson.dart

@@ -0,0 +1,1431 @@
+//
+//  Generated code. Do not modify.
+//  source: base.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:convert' as $convert;
+import 'dart:core' as $core;
+import 'dart:typed_data' as $typed_data;
+
+@$core.Deprecated('Use errorCodeDescriptor instead')
+const ErrorCode$json = {
+  '1': 'ErrorCode',
+  '2': [
+    {'1': 'OK', '2': 0},
+    {'1': 'TokenExpire', '2': 1000},
+    {'1': 'UserBan', '2': 1001},
+    {'1': 'VfCodeExpire', '2': 1002},
+    {'1': 'SmsSendFail', '2': 1003},
+    {'1': 'UserStatusErr', '2': 1008},
+    {'1': 'StatusErr', '2': 1009},
+    {'1': 'PhoneNotExist', '2': 2001},
+    {'1': 'UnknownErr', '2': 2002},
+    {'1': 'ParamErr', '2': 5000},
+    {'1': 'HeadSourceErr', '2': 5001},
+    {'1': 'DATABASE', '2': 9000},
+    {'1': 'NoRecord', '2': 9001},
+  ],
+};
+
+/// Descriptor for `ErrorCode`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List errorCodeDescriptor = $convert.base64Decode(
+    'CglFcnJvckNvZGUSBgoCT0sQABIQCgtUb2tlbkV4cGlyZRDoBxIMCgdVc2VyQmFuEOkHEhEKDF'
+    'ZmQ29kZUV4cGlyZRDqBxIQCgtTbXNTZW5kRmFpbBDrBxISCg1Vc2VyU3RhdHVzRXJyEPAHEg4K'
+    'CVN0YXR1c0VychDxBxISCg1QaG9uZU5vdEV4aXN0ENEPEg8KClVua25vd25FcnIQ0g8SDQoIUG'
+    'FyYW1FcnIQiCcSEgoNSGVhZFNvdXJjZUVychCJJxINCghEQVRBQkFTRRCoRhINCghOb1JlY29y'
+    'ZBCpRg==');
+
+@$core.Deprecated('Use shopTypeDescriptor instead')
+const ShopType$json = {
+  '1': 'ShopType',
+  '2': [
+    {'1': 'UnKnowShop', '2': 0},
+    {'1': 'ParkShop', '2': 1},
+    {'1': 'IPShop', '2': 2},
+    {'1': 'AdminShop', '2': 3},
+  ],
+};
+
+/// Descriptor for `ShopType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List shopTypeDescriptor = $convert.base64Decode(
+    'CghTaG9wVHlwZRIOCgpVbktub3dTaG9wEAASDAoIUGFya1Nob3AQARIKCgZJUFNob3AQAhINCg'
+    'lBZG1pblNob3AQAw==');
+
+@$core.Deprecated('Use userTypeDescriptor instead')
+const UserType$json = {
+  '1': 'UserType',
+  '2': [
+    {'1': 'UnDefine', '2': 0},
+    {'1': 'AppUser', '2': 1},
+    {'1': 'ParkAdmin', '2': 2},
+    {'1': 'IPAdmin', '2': 3},
+    {'1': 'SysAdmin', '2': 4},
+    {'1': 'ToAdmin', '2': 5},
+  ],
+};
+
+/// Descriptor for `UserType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List userTypeDescriptor = $convert.base64Decode(
+    'CghVc2VyVHlwZRIMCghVbkRlZmluZRAAEgsKB0FwcFVzZXIQARINCglQYXJrQWRtaW4QAhILCg'
+    'dJUEFkbWluEAMSDAoIU3lzQWRtaW4QBBILCgdUb0FkbWluEAU=');
+
+@$core.Deprecated('Use loginSourceDescriptor instead')
+const LoginSource$json = {
+  '1': 'LoginSource',
+  '2': [
+    {'1': 'UnDef', '2': 0},
+    {'1': 'UserApp', '2': 1},
+    {'1': 'WebAdmin', '2': 2},
+    {'1': 'ShopApp', '2': 3},
+    {'1': 'ToApp', '2': 4},
+  ],
+};
+
+/// Descriptor for `LoginSource`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List loginSourceDescriptor = $convert.base64Decode(
+    'CgtMb2dpblNvdXJjZRIJCgVVbkRlZhAAEgsKB1VzZXJBcHAQARIMCghXZWJBZG1pbhACEgsKB1'
+    'Nob3BBcHAQAxIJCgVUb0FwcBAE');
+
+@$core.Deprecated('Use smsTypeDescriptor instead')
+const SmsType$json = {
+  '1': 'SmsType',
+  '2': [
+    {'1': 'UnKnow', '2': 0},
+    {'1': 'Login', '2': 1},
+    {'1': 'SignUp', '2': 2},
+  ],
+};
+
+/// Descriptor for `SmsType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List smsTypeDescriptor = $convert.base64Decode(
+    'CgdTbXNUeXBlEgoKBlVuS25vdxAAEgkKBUxvZ2luEAESCgoGU2lnblVwEAI=');
+
+@$core.Deprecated('Use projectContentTypeDescriptor instead')
+const ProjectContentType$json = {
+  '1': 'ProjectContentType',
+  '2': [
+    {'1': 'Text', '2': 0},
+    {'1': 'Html', '2': 1},
+  ],
+};
+
+/// Descriptor for `ProjectContentType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List projectContentTypeDescriptor = $convert.base64Decode(
+    'ChJQcm9qZWN0Q29udGVudFR5cGUSCAoEVGV4dBAAEggKBEh0bWwQAQ==');
+
+@$core.Deprecated('Use criterionTypeDescriptor instead')
+const CriterionType$json = {
+  '1': 'CriterionType',
+  '2': [
+    {'1': 'CrUnKnow', '2': 0},
+    {'1': 'CrOrder', '2': 1},
+    {'1': 'CrNum', '2': 2},
+  ],
+};
+
+/// Descriptor for `CriterionType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List criterionTypeDescriptor = $convert.base64Decode(
+    'Cg1Dcml0ZXJpb25UeXBlEgwKCENyVW5Lbm93EAASCwoHQ3JPcmRlchABEgkKBUNyTnVtEAI=');
+
+@$core.Deprecated('Use cTypeDescriptor instead')
+const CType$json = {
+  '1': 'CType',
+  '2': [
+    {'1': 'UnKnowType', '2': 0},
+    {'1': 'BeginType', '2': 1},
+    {'1': 'MiddleType', '2': 2},
+    {'1': 'EndType', '2': 3},
+  ],
+};
+
+/// Descriptor for `CType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List cTypeDescriptor = $convert.base64Decode(
+    'CgVDVHlwZRIOCgpVbktub3dUeXBlEAASDQoJQmVnaW5UeXBlEAESDgoKTWlkZGxlVHlwZRACEg'
+    'sKB0VuZFR5cGUQAw==');
+
+@$core.Deprecated('Use statusTypeDescriptor instead')
+const StatusType$json = {
+  '1': 'StatusType',
+  '2': [
+    {'1': 'UnKnowStatus', '2': 0},
+    {'1': 'NormalStatus', '2': 1},
+    {'1': 'DisabledStatus', '2': 8},
+    {'1': 'DeleteStatus', '2': 9},
+  ],
+};
+
+/// Descriptor for `StatusType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List statusTypeDescriptor = $convert.base64Decode(
+    'CgpTdGF0dXNUeXBlEhAKDFVuS25vd1N0YXR1cxAAEhAKDE5vcm1hbFN0YXR1cxABEhIKDkRpc2'
+    'FibGVkU3RhdHVzEAgSEAoMRGVsZXRlU3RhdHVzEAk=');
+
+@$core.Deprecated('Use hrBandTypeDescriptor instead')
+const HrBandType$json = {
+  '1': 'HrBandType',
+  '2': [
+    {'1': 'UnKnowHrBand', '2': 0},
+    {'1': 'UseHrBand', '2': 1},
+    {'1': 'NotUseHrBand', '2': 2},
+  ],
+};
+
+/// Descriptor for `HrBandType`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List hrBandTypeDescriptor = $convert.base64Decode(
+    'CgpIckJhbmRUeXBlEhAKDFVuS25vd0hyQmFuZBAAEg0KCVVzZUhyQmFuZBABEhAKDE5vdFVzZU'
+    'hyQmFuZBAC');
+
+@$core.Deprecated('Use gameStateDescriptor instead')
+const GameState$json = {
+  '1': 'GameState',
+  '2': [
+    {'1': 'AllGameState', '2': 0},
+    {'1': 'NormalGameState', '2': 1},
+    {'1': 'abnormalGameState', '2': 2},
+  ],
+};
+
+/// Descriptor for `GameState`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List gameStateDescriptor = $convert.base64Decode(
+    'CglHYW1lU3RhdGUSEAoMQWxsR2FtZVN0YXRlEAASEwoPTm9ybWFsR2FtZVN0YXRlEAESFQoRYW'
+    'Jub3JtYWxHYW1lU3RhdGUQAg==');
+
+@$core.Deprecated('Use gameHistorySourceDescriptor instead')
+const GameHistorySource$json = {
+  '1': 'GameHistorySource',
+  '2': [
+    {'1': 'GameHistorySourcAll', '2': 0},
+    {'1': 'GameHistorySourceOrienteer', '2': 1},
+    {'1': 'GameHistorySourceAss', '2': 2},
+  ],
+};
+
+/// Descriptor for `GameHistorySource`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List gameHistorySourceDescriptor = $convert.base64Decode(
+    'ChFHYW1lSGlzdG9yeVNvdXJjZRIXChNHYW1lSGlzdG9yeVNvdXJjQWxsEAASHgoaR2FtZUhpc3'
+    'RvcnlTb3VyY2VPcmllbnRlZXIQARIYChRHYW1lSGlzdG9yeVNvdXJjZUFzcxAC');
+
+@$core.Deprecated('Use backGroundColorDescriptor instead')
+const BackGroundColor$json = {
+  '1': 'BackGroundColor',
+  '2': [
+    {'1': 'UnKnowColor', '2': 0},
+    {'1': 'BlueColor', '2': 1},
+    {'1': 'GreenColor', '2': 2},
+    {'1': 'BrownColor', '2': 3},
+  ],
+};
+
+/// Descriptor for `BackGroundColor`. Decode as a `google.protobuf.EnumDescriptorProto`.
+final $typed_data.Uint8List backGroundColorDescriptor = $convert.base64Decode(
+    'Cg9CYWNrR3JvdW5kQ29sb3ISDwoLVW5Lbm93Q29sb3IQABINCglCbHVlQ29sb3IQARIOCgpHcm'
+    'VlbkNvbG9yEAISDgoKQnJvd25Db2xvchAD');
+
+@$core.Deprecated('Use netImageDescriptor instead')
+const NetImage$json = {
+  '1': 'NetImage',
+  '2': [
+    {'1': 'url', '3': 1, '4': 1, '5': 9, '10': 'url'},
+    {'1': 'md5', '3': 2, '4': 1, '5': 12, '10': 'md5'},
+  ],
+};
+
+/// Descriptor for `NetImage`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List netImageDescriptor = $convert.base64Decode(
+    'CghOZXRJbWFnZRIQCgN1cmwYASABKAlSA3VybBIQCgNtZDUYAiABKAxSA21kNQ==');
+
+@$core.Deprecated('Use userDescriptor instead')
+const User$json = {
+  '1': 'User',
+  '4': [User_Sex$json],
+};
+
+@$core.Deprecated('Use userDescriptor instead')
+const User_Sex$json = {
+  '1': 'Sex',
+  '2': [
+    {'1': 'UnDefine', '2': 0},
+    {'1': 'Male', '2': 1},
+    {'1': 'Female', '2': 2},
+  ],
+};
+
+/// Descriptor for `User`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List userDescriptor = $convert.base64Decode(
+    'CgRVc2VyIikKA1NleBIMCghVbkRlZmluZRAAEggKBE1hbGUQARIKCgZGZW1hbGUQAg==');
+
+@$core.Deprecated('Use gameGpsInfoDescriptor instead')
+const GameGpsInfo$json = {
+  '1': 'GameGpsInfo',
+  '2': [
+    {'1': 'gpsTime', '3': 1, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'gpsTime'},
+    {'1': 'longitude', '3': 2, '4': 1, '5': 1, '10': 'longitude'},
+    {'1': 'latitude', '3': 3, '4': 1, '5': 1, '10': 'latitude'},
+    {'1': 'directionRadian', '3': 4, '4': 1, '5': 1, '10': 'directionRadian'},
+    {'1': 'altitude', '3': 5, '4': 1, '5': 1, '10': 'altitude'},
+  ],
+};
+
+/// Descriptor for `GameGpsInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List gameGpsInfoDescriptor = $convert.base64Decode(
+    'CgtHYW1lR3BzSW5mbxI0CgdncHNUaW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdG'
+    'FtcFIHZ3BzVGltZRIcCglsb25naXR1ZGUYAiABKAFSCWxvbmdpdHVkZRIaCghsYXRpdHVkZRgD'
+    'IAEoAVIIbGF0aXR1ZGUSKAoPZGlyZWN0aW9uUmFkaWFuGAQgASgBUg9kaXJlY3Rpb25SYWRpYW'
+    '4SGgoIYWx0aXR1ZGUYBSABKAFSCGFsdGl0dWRl');
+
+@$core.Deprecated('Use heartRateDescriptor instead')
+const HeartRate$json = {
+  '1': 'HeartRate',
+  '2': [
+    {'1': 'timeStampMs', '3': 1, '4': 1, '5': 3, '10': 'timeStampMs'},
+    {'1': 'hr', '3': 2, '4': 1, '5': 5, '10': 'hr'},
+  ],
+};
+
+/// Descriptor for `HeartRate`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List heartRateDescriptor = $convert.base64Decode(
+    'CglIZWFydFJhdGUSIAoLdGltZVN0YW1wTXMYASABKANSC3RpbWVTdGFtcE1zEg4KAmhyGAIgAS'
+    'gFUgJocg==');
+
+@$core.Deprecated('Use signInReplyDescriptor instead')
+const SignInReply$json = {
+  '1': 'SignInReply',
+  '2': [
+    {'1': 'token', '3': 1, '4': 1, '5': 9, '10': 'token'},
+  ],
+};
+
+/// Descriptor for `SignInReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List signInReplyDescriptor = $convert.base64Decode(
+    'CgtTaWduSW5SZXBseRIUCgV0b2tlbhgBIAEoCVIFdG9rZW4=');
+
+@$core.Deprecated('Use gameArriveControlPointDescriptor instead')
+const GameArriveControlPoint$json = {
+  '1': 'GameArriveControlPoint',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+    {'1': 'sn', '3': 2, '4': 1, '5': 9, '10': 'sn'},
+    {'1': 'orderNo', '3': 3, '4': 1, '5': 5, '10': 'orderNo'},
+    {'1': 'totalNo', '3': 4, '4': 1, '5': 5, '10': 'totalNo'},
+  ],
+};
+
+/// Descriptor for `GameArriveControlPoint`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List gameArriveControlPointDescriptor = $convert.base64Decode(
+    'ChZHYW1lQXJyaXZlQ29udHJvbFBvaW50Eg4KAmlkGAEgASgDUgJpZBIOCgJzbhgCIAEoCVICc2'
+    '4SGAoHb3JkZXJObxgDIAEoBVIHb3JkZXJObxIYCgd0b3RhbE5vGAQgASgFUgd0b3RhbE5v');
+
+@$core.Deprecated('Use mapRouteDescriptor instead')
+const MapRoute$json = {
+  '1': 'MapRoute',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+    {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
+    {'1': 'image', '3': 3, '4': 1, '5': 11, '6': '.base.v1.NetImage', '10': 'image'},
+    {'1': 'isNfc', '3': 4, '4': 1, '5': 8, '10': 'isNfc'},
+    {'1': 'distanceMeter', '3': 5, '4': 1, '5': 5, '10': 'distanceMeter'},
+    {'1': 'altitudeDiffMeter', '3': 6, '4': 1, '5': 5, '10': 'altitudeDiffMeter'},
+    {'1': 'useCount', '3': 7, '4': 1, '5': 5, '10': 'useCount'},
+  ],
+};
+
+/// Descriptor for `MapRoute`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List mapRouteDescriptor = $convert.base64Decode(
+    'CghNYXBSb3V0ZRIOCgJpZBgBIAEoA1ICaWQSEgoEbmFtZRgCIAEoCVIEbmFtZRInCgVpbWFnZR'
+    'gDIAEoCzIRLmJhc2UudjEuTmV0SW1hZ2VSBWltYWdlEhQKBWlzTmZjGAQgASgIUgVpc05mYxIk'
+    'Cg1kaXN0YW5jZU1ldGVyGAUgASgFUg1kaXN0YW5jZU1ldGVyEiwKEWFsdGl0dWRlRGlmZk1ldG'
+    'VyGAYgASgFUhFhbHRpdHVkZURpZmZNZXRlchIaCgh1c2VDb3VudBgHIAEoBVIIdXNlQ291bnQ=');
+
+@$core.Deprecated('Use idArrRequestDescriptor instead')
+const IdArrRequest$json = {
+  '1': 'IdArrRequest',
+  '2': [
+    {'1': 'IdArr', '3': 2, '4': 3, '5': 5, '10': 'IdArr'},
+  ],
+};
+
+/// Descriptor for `IdArrRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List idArrRequestDescriptor = $convert.base64Decode(
+    'CgxJZEFyclJlcXVlc3QSFAoFSWRBcnIYAiADKAVSBUlkQXJy');
+
+@$core.Deprecated('Use baseMapInfoDescriptor instead')
+const BaseMapInfo$json = {
+  '1': 'BaseMapInfo',
+  '2': [
+    {'1': 'shopId', '3': 1, '4': 1, '5': 5, '10': 'shopId'},
+    {'1': 'mapName', '3': 2, '4': 1, '5': 9, '10': 'mapName'},
+    {'1': 'zipImage', '3': 3, '4': 1, '5': 11, '6': '.base.v1.NetImage', '10': 'zipImage'},
+  ],
+};
+
+/// Descriptor for `BaseMapInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List baseMapInfoDescriptor = $convert.base64Decode(
+    'CgtCYXNlTWFwSW5mbxIWCgZzaG9wSWQYASABKAVSBnNob3BJZBIYCgdtYXBOYW1lGAIgASgJUg'
+    'dtYXBOYW1lEi0KCHppcEltYWdlGAMgASgLMhEuYmFzZS52MS5OZXRJbWFnZVIIemlwSW1hZ2U=');
+
+@$core.Deprecated('Use regionDescriptor instead')
+const Region$json = {
+  '1': 'Region',
+  '2': [
+    {'1': 'code', '3': 1, '4': 1, '5': 9, '10': 'code'},
+    {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
+  ],
+};
+
+/// Descriptor for `Region`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List regionDescriptor = $convert.base64Decode(
+    'CgZSZWdpb24SEgoEY29kZRgBIAEoCVIEY29kZRISCgRuYW1lGAIgASgJUgRuYW1l');
+
+@$core.Deprecated('Use shopListDescriptor instead')
+const ShopList$json = {
+  '1': 'ShopList',
+  '2': [
+    {'1': 'shopId', '3': 1, '4': 1, '5': 5, '10': 'shopId'},
+    {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
+  ],
+};
+
+/// Descriptor for `ShopList`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List shopListDescriptor = $convert.base64Decode(
+    'CghTaG9wTGlzdBIWCgZzaG9wSWQYASABKAVSBnNob3BJZBISCgRuYW1lGAIgASgJUgRuYW1l');
+
+@$core.Deprecated('Use getSmsSendLeftTimeRequestDescriptor instead')
+const GetSmsSendLeftTimeRequest$json = {
+  '1': 'GetSmsSendLeftTimeRequest',
+  '2': [
+    {'1': 'phone', '3': 1, '4': 1, '5': 9, '10': 'phone'},
+  ],
+};
+
+/// Descriptor for `GetSmsSendLeftTimeRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List getSmsSendLeftTimeRequestDescriptor = $convert.base64Decode(
+    'ChlHZXRTbXNTZW5kTGVmdFRpbWVSZXF1ZXN0EhQKBXBob25lGAEgASgJUgVwaG9uZQ==');
+
+@$core.Deprecated('Use getSmsSendLeftTimeReplyDescriptor instead')
+const GetSmsSendLeftTimeReply$json = {
+  '1': 'GetSmsSendLeftTimeReply',
+  '2': [
+    {'1': 'second', '3': 1, '4': 1, '5': 5, '10': 'second'},
+  ],
+};
+
+/// Descriptor for `GetSmsSendLeftTimeReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List getSmsSendLeftTimeReplyDescriptor = $convert.base64Decode(
+    'ChdHZXRTbXNTZW5kTGVmdFRpbWVSZXBseRIWCgZzZWNvbmQYASABKAVSBnNlY29uZA==');
+
+@$core.Deprecated('Use controlInfoListDescriptor instead')
+const ControlInfoList$json = {
+  '1': 'ControlInfoList',
+  '2': [
+    {'1': 'ciId', '3': 1, '4': 1, '5': 5, '10': 'ciId'},
+    {'1': 'ciCode', '3': 2, '4': 1, '5': 9, '10': 'ciCode'},
+  ],
+};
+
+/// Descriptor for `ControlInfoList`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List controlInfoListDescriptor = $convert.base64Decode(
+    'Cg9Db250cm9sSW5mb0xpc3QSEgoEY2lJZBgBIAEoBVIEY2lJZBIWCgZjaUNvZGUYAiABKAlSBm'
+    'NpQ29kZQ==');
+
+@$core.Deprecated('Use defaultReplyDescriptor instead')
+const DefaultReply$json = {
+  '1': 'DefaultReply',
+};
+
+/// Descriptor for `DefaultReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List defaultReplyDescriptor = $convert.base64Decode(
+    'CgxEZWZhdWx0UmVwbHk=');
+
+@$core.Deprecated('Use idRequestDescriptor instead')
+const IdRequest$json = {
+  '1': 'IdRequest',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+  ],
+};
+
+/// Descriptor for `IdRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List idRequestDescriptor = $convert.base64Decode(
+    'CglJZFJlcXVlc3QSDgoCaWQYASABKANSAmlk');
+
+@$core.Deprecated('Use defaultRequestDescriptor instead')
+const DefaultRequest$json = {
+  '1': 'DefaultRequest',
+};
+
+/// Descriptor for `DefaultRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List defaultRequestDescriptor = $convert.base64Decode(
+    'Cg5EZWZhdWx0UmVxdWVzdA==');
+
+@$core.Deprecated('Use positionDescriptor instead')
+const Position$json = {
+  '1': 'Position',
+  '2': [
+    {'1': 'longitude', '3': 1, '4': 1, '5': 1, '10': 'longitude'},
+    {'1': 'latitude', '3': 2, '4': 1, '5': 1, '10': 'latitude'},
+    {'1': 'altitude', '3': 3, '4': 1, '5': 1, '10': 'altitude'},
+  ],
+};
+
+/// Descriptor for `Position`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List positionDescriptor = $convert.base64Decode(
+    'CghQb3NpdGlvbhIcCglsb25naXR1ZGUYASABKAFSCWxvbmdpdHVkZRIaCghsYXRpdHVkZRgCIA'
+    'EoAVIIbGF0aXR1ZGUSGgoIYWx0aXR1ZGUYAyABKAFSCGFsdGl0dWRl');
+
+@$core.Deprecated('Use controlPointInfoDescriptor instead')
+const ControlPointInfo$json = {
+  '1': 'ControlPointInfo',
+  '2': [
+    {'1': 'displayInfo', '3': 1, '4': 1, '5': 11, '6': '.google.protobuf.Any', '10': 'displayInfo'},
+  ],
+};
+
+/// Descriptor for `ControlPointInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List controlPointInfoDescriptor = $convert.base64Decode(
+    'ChBDb250cm9sUG9pbnRJbmZvEjYKC2Rpc3BsYXlJbmZvGAEgASgLMhQuZ29vZ2xlLnByb3RvYn'
+    'VmLkFueVILZGlzcGxheUluZm8=');
+
+@$core.Deprecated('Use controlPointDisplayInfoSingleChoiceDescriptor instead')
+const ControlPointDisplayInfoSingleChoice$json = {
+  '1': 'ControlPointDisplayInfoSingleChoice',
+  '2': [
+    {'1': 'question', '3': 1, '4': 1, '5': 9, '10': 'question'},
+    {'1': 'image', '3': 2, '4': 1, '5': 11, '6': '.base.v1.NetImage', '10': 'image'},
+    {'1': 'answer', '3': 3, '4': 3, '5': 9, '10': 'answer'},
+    {'1': 'rightAnswerIndex', '3': 4, '4': 1, '5': 5, '10': 'rightAnswerIndex'},
+    {'1': 'qbId', '3': 5, '4': 1, '5': 5, '10': 'qbId'},
+  ],
+};
+
+/// Descriptor for `ControlPointDisplayInfoSingleChoice`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List controlPointDisplayInfoSingleChoiceDescriptor = $convert.base64Decode(
+    'CiNDb250cm9sUG9pbnREaXNwbGF5SW5mb1NpbmdsZUNob2ljZRIaCghxdWVzdGlvbhgBIAEoCV'
+    'IIcXVlc3Rpb24SJwoFaW1hZ2UYAiABKAsyES5iYXNlLnYxLk5ldEltYWdlUgVpbWFnZRIWCgZh'
+    'bnN3ZXIYAyADKAlSBmFuc3dlchIqChByaWdodEFuc3dlckluZGV4GAQgASgFUhByaWdodEFuc3'
+    'dlckluZGV4EhIKBHFiSWQYBSABKAVSBHFiSWQ=');
+
+@$core.Deprecated('Use binaryPartDescriptor instead')
+const BinaryPart$json = {
+  '1': 'BinaryPart',
+  '2': [
+    {'1': 'ext', '3': 1, '4': 1, '5': 9, '10': 'ext'},
+    {'1': 'data', '3': 2, '4': 1, '5': 12, '10': 'data'},
+    {'1': 'allCount', '3': 3, '4': 1, '5': 5, '10': 'allCount'},
+    {'1': 'nonce', '3': 4, '4': 1, '5': 12, '10': 'nonce'},
+  ],
+};
+
+/// Descriptor for `BinaryPart`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List binaryPartDescriptor = $convert.base64Decode(
+    'CgpCaW5hcnlQYXJ0EhAKA2V4dBgBIAEoCVIDZXh0EhIKBGRhdGEYAiABKAxSBGRhdGESGgoIYW'
+    'xsQ291bnQYAyABKAVSCGFsbENvdW50EhQKBW5vbmNlGAQgASgMUgVub25jZQ==');
+
+@$core.Deprecated('Use binaryPartV2Descriptor instead')
+const BinaryPartV2$json = {
+  '1': 'BinaryPartV2',
+  '2': [
+    {'1': 'data', '3': 1, '4': 1, '5': 12, '10': 'data'},
+  ],
+};
+
+/// Descriptor for `BinaryPartV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List binaryPartV2Descriptor = $convert.base64Decode(
+    'CgxCaW5hcnlQYXJ0VjISEgoEZGF0YRgBIAEoDFIEZGF0YQ==');
+
+@$core.Deprecated('Use imageDescriptor instead')
+const Image$json = {
+  '1': 'Image',
+  '2': [
+    {'1': 'ext', '3': 1, '4': 1, '5': 9, '10': 'ext'},
+    {'1': 'data', '3': 2, '4': 1, '5': 12, '10': 'data'},
+  ],
+};
+
+/// Descriptor for `Image`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List imageDescriptor = $convert.base64Decode(
+    'CgVJbWFnZRIQCgNleHQYASABKAlSA2V4dBISCgRkYXRhGAIgASgMUgRkYXRh');
+
+@$core.Deprecated('Use statusEditRequestDescriptor instead')
+const StatusEditRequest$json = {
+  '1': 'StatusEditRequest',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+    {'1': 'status', '3': 2, '4': 1, '5': 14, '6': '.base.v1.StatusType', '10': 'status'},
+  ],
+};
+
+/// Descriptor for `StatusEditRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List statusEditRequestDescriptor = $convert.base64Decode(
+    'ChFTdGF0dXNFZGl0UmVxdWVzdBIOCgJpZBgBIAEoA1ICaWQSKwoGc3RhdHVzGAIgASgOMhMuYm'
+    'FzZS52MS5TdGF0dXNUeXBlUgZzdGF0dXM=');
+
+@$core.Deprecated('Use courseInfoDescriptor instead')
+const CourseInfo$json = {
+  '1': 'CourseInfo',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'},
+    {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
+    {'1': 'totalControlNum', '3': 3, '4': 1, '5': 5, '10': 'totalControlNum'},
+    {'1': 'maxRange', '3': 4, '4': 1, '5': 5, '10': 'maxRange'},
+    {'1': 'control_point_sorted_list', '3': 5, '4': 3, '5': 11, '6': '.base.v1.ControlPoint', '10': 'controlPointSortedList'},
+  ],
+};
+
+/// Descriptor for `CourseInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List courseInfoDescriptor = $convert.base64Decode(
+    'CgpDb3Vyc2VJbmZvEg4KAmlkGAEgASgFUgJpZBISCgRuYW1lGAIgASgJUgRuYW1lEigKD3RvdG'
+    'FsQ29udHJvbE51bRgDIAEoBVIPdG90YWxDb250cm9sTnVtEhoKCG1heFJhbmdlGAQgASgFUght'
+    'YXhSYW5nZRJQChljb250cm9sX3BvaW50X3NvcnRlZF9saXN0GAUgAygLMhUuYmFzZS52MS5Db2'
+    '50cm9sUG9pbnRSFmNvbnRyb2xQb2ludFNvcnRlZExpc3Q=');
+
+@$core.Deprecated('Use controlPointDescriptor instead')
+const ControlPoint$json = {
+  '1': 'ControlPoint',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+    {'1': 'info', '3': 2, '4': 1, '5': 11, '6': '.base.v1.ControlPointInfo', '10': 'info'},
+    {'1': 'nfc_id_list', '3': 3, '4': 3, '5': 9, '10': 'nfcIdList'},
+    {'1': 'on_map_x', '3': 4, '4': 1, '5': 3, '10': 'onMapX'},
+    {'1': 'on_map_y', '3': 5, '4': 1, '5': 3, '10': 'onMapY'},
+    {'1': 'sn', '3': 6, '4': 1, '5': 9, '10': 'sn'},
+    {'1': 'ciPosition', '3': 7, '4': 1, '5': 11, '6': '.base.v1.Position', '10': 'ciPosition'},
+    {'1': 'mapPosition', '3': 8, '4': 1, '5': 11, '6': '.base.v1.Position', '10': 'mapPosition'},
+    {'1': 'category', '3': 9, '4': 1, '5': 5, '10': 'category'},
+  ],
+};
+
+/// Descriptor for `ControlPoint`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List controlPointDescriptor = $convert.base64Decode(
+    'CgxDb250cm9sUG9pbnQSDgoCaWQYASABKANSAmlkEi0KBGluZm8YAiABKAsyGS5iYXNlLnYxLk'
+    'NvbnRyb2xQb2ludEluZm9SBGluZm8SHgoLbmZjX2lkX2xpc3QYAyADKAlSCW5mY0lkTGlzdBIY'
+    'Cghvbl9tYXBfeBgEIAEoA1IGb25NYXBYEhgKCG9uX21hcF95GAUgASgDUgZvbk1hcFkSDgoCc2'
+    '4YBiABKAlSAnNuEjEKCmNpUG9zaXRpb24YByABKAsyES5iYXNlLnYxLlBvc2l0aW9uUgpjaVBv'
+    'c2l0aW9uEjMKC21hcFBvc2l0aW9uGAggASgLMhEuYmFzZS52MS5Qb3NpdGlvblILbWFwUG9zaX'
+    'Rpb24SGgoIY2F0ZWdvcnkYCSABKAVSCGNhdGVnb3J5');
+
+@$core.Deprecated('Use controlPointSimpleDescriptor instead')
+const ControlPointSimple$json = {
+  '1': 'ControlPointSimple',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+    {'1': 'nfc_id_list', '3': 2, '4': 3, '5': 9, '10': 'nfcIdList'},
+    {'1': 'sn', '3': 3, '4': 1, '5': 9, '10': 'sn'},
+  ],
+};
+
+/// Descriptor for `ControlPointSimple`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List controlPointSimpleDescriptor = $convert.base64Decode(
+    'ChJDb250cm9sUG9pbnRTaW1wbGUSDgoCaWQYASABKANSAmlkEh4KC25mY19pZF9saXN0GAIgAy'
+    'gJUgluZmNJZExpc3QSDgoCc24YAyABKAlSAnNu');
+
+@$core.Deprecated('Use gameDetailV2ReplyDescriptor instead')
+const GameDetailV2Reply$json = {
+  '1': 'GameDetailV2Reply',
+  '2': [
+    {'1': 'game_id', '3': 1, '4': 1, '5': 5, '10': 'gameId'},
+    {'1': 'isComplete', '3': 2, '4': 1, '5': 8, '10': 'isComplete'},
+    {'1': 'start_at', '3': 3, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'startAt'},
+    {'1': 'checked_sorted_list', '3': 4, '4': 3, '5': 11, '6': '.base.v1.ControlPointGameInfo', '10': 'checkedSortedList'},
+    {'1': 'duration', '3': 5, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'duration'},
+    {'1': 'stop_at', '3': 6, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'stopAt'},
+    {'1': 'qrJsonCode', '3': 7, '4': 1, '5': 9, '10': 'qrJsonCode'},
+    {'1': 'isSuccess', '3': 8, '4': 1, '5': 8, '10': 'isSuccess'},
+    {'1': 'sysPoint', '3': 9, '4': 1, '5': 5, '10': 'sysPoint'},
+    {'1': 'totalPointNum', '3': 10, '4': 1, '5': 5, '10': 'totalPointNum'},
+    {'1': 'actName', '3': 13, '4': 1, '5': 9, '10': 'actName'},
+    {'1': 'distance', '3': 14, '4': 1, '5': 5, '10': 'distance'},
+    {'1': 'pace', '3': 15, '4': 1, '5': 5, '10': 'pace'},
+    {'1': 'avgHr', '3': 16, '4': 1, '5': 5, '10': 'avgHr'},
+    {'1': 'Calorie', '3': 17, '4': 1, '5': 5, '10': 'Calorie'},
+    {'1': 'Ck', '3': 18, '4': 1, '5': 5, '10': 'Ck'},
+    {'1': 'Ei', '3': 19, '4': 1, '5': 2, '10': 'Ei'},
+    {'1': 'stepNum', '3': 20, '4': 1, '5': 5, '10': 'stepNum'},
+    {'1': 'gameGpsInfo', '3': 21, '4': 3, '5': 11, '6': '.base.v1.GameGpsInfo', '10': 'gameGpsInfo'},
+    {'1': 'map_zip', '3': 22, '4': 1, '5': 11, '6': '.base.v1.NetImage', '10': 'mapZip'},
+    {'1': 'answerHistory', '3': 23, '4': 1, '5': 11, '6': '.base.v1.AnswerHistoryInfo', '10': 'answerHistory'},
+    {'1': 'gameHrInfos', '3': 24, '4': 3, '5': 11, '6': '.base.v1.HeartRate', '10': 'gameHrInfos'},
+    {'1': 'source', '3': 25, '4': 1, '5': 14, '6': '.base.v1.GameHistorySource', '10': 'source'},
+    {'1': 'actId', '3': 26, '4': 1, '5': 5, '10': 'actId'},
+    {'1': 'body', '3': 27, '4': 1, '5': 11, '6': '.base.v1.OrienteerBodyInfo', '10': 'body'},
+  ],
+};
+
+/// Descriptor for `GameDetailV2Reply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List gameDetailV2ReplyDescriptor = $convert.base64Decode(
+    'ChFHYW1lRGV0YWlsVjJSZXBseRIXCgdnYW1lX2lkGAEgASgFUgZnYW1lSWQSHgoKaXNDb21wbG'
+    'V0ZRgCIAEoCFIKaXNDb21wbGV0ZRI1CghzdGFydF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1'
+    'Zi5UaW1lc3RhbXBSB3N0YXJ0QXQSTQoTY2hlY2tlZF9zb3J0ZWRfbGlzdBgEIAMoCzIdLmJhc2'
+    'UudjEuQ29udHJvbFBvaW50R2FtZUluZm9SEWNoZWNrZWRTb3J0ZWRMaXN0EjUKCGR1cmF0aW9u'
+    'GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUghkdXJhdGlvbhIzCgdzdG9wX2F0GA'
+    'YgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIGc3RvcEF0Eh4KCnFySnNvbkNvZGUY'
+    'ByABKAlSCnFySnNvbkNvZGUSHAoJaXNTdWNjZXNzGAggASgIUglpc1N1Y2Nlc3MSGgoIc3lzUG'
+    '9pbnQYCSABKAVSCHN5c1BvaW50EiQKDXRvdGFsUG9pbnROdW0YCiABKAVSDXRvdGFsUG9pbnRO'
+    'dW0SGAoHYWN0TmFtZRgNIAEoCVIHYWN0TmFtZRIaCghkaXN0YW5jZRgOIAEoBVIIZGlzdGFuY2'
+    'USEgoEcGFjZRgPIAEoBVIEcGFjZRIUCgVhdmdIchgQIAEoBVIFYXZnSHISGAoHQ2Fsb3JpZRgR'
+    'IAEoBVIHQ2Fsb3JpZRIOCgJDaxgSIAEoBVICQ2sSDgoCRWkYEyABKAJSAkVpEhgKB3N0ZXBOdW'
+    '0YFCABKAVSB3N0ZXBOdW0SNgoLZ2FtZUdwc0luZm8YFSADKAsyFC5iYXNlLnYxLkdhbWVHcHNJ'
+    'bmZvUgtnYW1lR3BzSW5mbxIqCgdtYXBfemlwGBYgASgLMhEuYmFzZS52MS5OZXRJbWFnZVIGbW'
+    'FwWmlwEkAKDWFuc3dlckhpc3RvcnkYFyABKAsyGi5iYXNlLnYxLkFuc3dlckhpc3RvcnlJbmZv'
+    'Ug1hbnN3ZXJIaXN0b3J5EjQKC2dhbWVIckluZm9zGBggAygLMhIuYmFzZS52MS5IZWFydFJhdG'
+    'VSC2dhbWVIckluZm9zEjIKBnNvdXJjZRgZIAEoDjIaLmJhc2UudjEuR2FtZUhpc3RvcnlTb3Vy'
+    'Y2VSBnNvdXJjZRIUCgVhY3RJZBgaIAEoBVIFYWN0SWQSLgoEYm9keRgbIAEoCzIaLmJhc2Uudj'
+    'EuT3JpZW50ZWVyQm9keUluZm9SBGJvZHk=');
+
+@$core.Deprecated('Use orienteerBodyInfoDescriptor instead')
+const OrienteerBodyInfo$json = {
+  '1': 'OrienteerBodyInfo',
+  '2': [
+    {'1': 'oId', '3': 1, '4': 1, '5': 5, '10': 'oId'},
+    {'1': 'sex', '3': 2, '4': 1, '5': 14, '6': '.base.v1.User.Sex', '10': 'sex'},
+    {'1': 'birthdayYear', '3': 3, '4': 1, '5': 5, '10': 'birthdayYear'},
+    {'1': 'heightMillimeter', '3': 4, '4': 1, '5': 5, '10': 'heightMillimeter'},
+    {'1': 'weightGram', '3': 5, '4': 1, '5': 5, '10': 'weightGram'},
+    {'1': 'staticHr', '3': 6, '4': 1, '5': 5, '10': 'staticHr'},
+  ],
+};
+
+/// Descriptor for `OrienteerBodyInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List orienteerBodyInfoDescriptor = $convert.base64Decode(
+    'ChFPcmllbnRlZXJCb2R5SW5mbxIQCgNvSWQYASABKAVSA29JZBIjCgNzZXgYAiABKA4yES5iYX'
+    'NlLnYxLlVzZXIuU2V4UgNzZXgSIgoMYmlydGhkYXlZZWFyGAMgASgFUgxiaXJ0aGRheVllYXIS'
+    'KgoQaGVpZ2h0TWlsbGltZXRlchgEIAEoBVIQaGVpZ2h0TWlsbGltZXRlchIeCgp3ZWlnaHRHcm'
+    'FtGAUgASgFUgp3ZWlnaHRHcmFtEhoKCHN0YXRpY0hyGAYgASgFUghzdGF0aWNIcg==');
+
+@$core.Deprecated('Use controlPointGameInfoDescriptor instead')
+const ControlPointGameInfo$json = {
+  '1': 'ControlPointGameInfo',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+    {'1': 'sn', '3': 2, '4': 1, '5': 9, '10': 'sn'},
+    {'1': 'cType', '3': 3, '4': 1, '5': 14, '6': '.base.v1.CType', '10': 'cType'},
+    {'1': 'orderNo', '3': 4, '4': 1, '5': 5, '10': 'orderNo'},
+    {'1': 'is_check_success', '3': 5, '4': 1, '5': 8, '10': 'isCheckSuccess'},
+    {'1': 'check_after_last', '3': 6, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'checkAfterLast'},
+    {'1': 'punchTime', '3': 7, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'punchTime'},
+    {'1': 'position', '3': 8, '4': 1, '5': 11, '6': '.base.v1.Position', '10': 'position'},
+    {'1': 'disAfterLast', '3': 9, '4': 1, '5': 5, '10': 'disAfterLast'},
+    {'1': 'disStraightAfterLast', '3': 10, '4': 1, '5': 5, '10': 'disStraightAfterLast'},
+    {'1': 'paceAfterLast', '3': 11, '4': 1, '5': 5, '10': 'paceAfterLast'},
+    {'1': 'paceAfterStart', '3': 12, '4': 1, '5': 5, '10': 'paceAfterStart'},
+    {'1': 'check_after_start', '3': 13, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'checkAfterStart'},
+  ],
+};
+
+/// Descriptor for `ControlPointGameInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List controlPointGameInfoDescriptor = $convert.base64Decode(
+    'ChRDb250cm9sUG9pbnRHYW1lSW5mbxIOCgJpZBgBIAEoA1ICaWQSDgoCc24YAiABKAlSAnNuEi'
+    'QKBWNUeXBlGAMgASgOMg4uYmFzZS52MS5DVHlwZVIFY1R5cGUSGAoHb3JkZXJObxgEIAEoBVIH'
+    'b3JkZXJObxIoChBpc19jaGVja19zdWNjZXNzGAUgASgIUg5pc0NoZWNrU3VjY2VzcxJDChBjaG'
+    'Vja19hZnRlcl9sYXN0GAYgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUg5jaGVja0Fm'
+    'dGVyTGFzdBI4CglwdW5jaFRpbWUYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUg'
+    'lwdW5jaFRpbWUSLQoIcG9zaXRpb24YCCABKAsyES5iYXNlLnYxLlBvc2l0aW9uUghwb3NpdGlv'
+    'bhIiCgxkaXNBZnRlckxhc3QYCSABKAVSDGRpc0FmdGVyTGFzdBIyChRkaXNTdHJhaWdodEFmdG'
+    'VyTGFzdBgKIAEoBVIUZGlzU3RyYWlnaHRBZnRlckxhc3QSJAoNcGFjZUFmdGVyTGFzdBgLIAEo'
+    'BVINcGFjZUFmdGVyTGFzdBImCg5wYWNlQWZ0ZXJTdGFydBgMIAEoBVIOcGFjZUFmdGVyU3Rhcn'
+    'QSRQoRY2hlY2tfYWZ0ZXJfc3RhcnQYDSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25S'
+    'D2NoZWNrQWZ0ZXJTdGFydA==');
+
+@$core.Deprecated('Use answerHistoryInfoDescriptor instead')
+const AnswerHistoryInfo$json = {
+  '1': 'AnswerHistoryInfo',
+  '2': [
+    {'1': 'accuracy', '3': 1, '4': 1, '5': 5, '10': 'accuracy'},
+    {'1': 'totalAnswerNum', '3': 2, '4': 1, '5': 5, '10': 'totalAnswerNum'},
+    {'1': 'correctAnswerNum', '3': 3, '4': 1, '5': 5, '10': 'correctAnswerNum'},
+    {'1': 'ranking', '3': 4, '4': 1, '5': 5, '10': 'ranking'},
+    {'1': 'rankingDay', '3': 5, '4': 1, '5': 5, '10': 'rankingDay'},
+    {'1': 'list', '3': 6, '4': 3, '5': 11, '6': '.base.v1.AnswerDetailInfo', '10': 'list'},
+    {'1': 'rankingSurpass', '3': 7, '4': 1, '5': 5, '10': 'rankingSurpass'},
+  ],
+};
+
+/// Descriptor for `AnswerHistoryInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List answerHistoryInfoDescriptor = $convert.base64Decode(
+    'ChFBbnN3ZXJIaXN0b3J5SW5mbxIaCghhY2N1cmFjeRgBIAEoBVIIYWNjdXJhY3kSJgoOdG90YW'
+    'xBbnN3ZXJOdW0YAiABKAVSDnRvdGFsQW5zd2VyTnVtEioKEGNvcnJlY3RBbnN3ZXJOdW0YAyAB'
+    'KAVSEGNvcnJlY3RBbnN3ZXJOdW0SGAoHcmFua2luZxgEIAEoBVIHcmFua2luZxIeCgpyYW5raW'
+    '5nRGF5GAUgASgFUgpyYW5raW5nRGF5Ei0KBGxpc3QYBiADKAsyGS5iYXNlLnYxLkFuc3dlckRl'
+    'dGFpbEluZm9SBGxpc3QSJgoOcmFua2luZ1N1cnBhc3MYByABKAVSDnJhbmtpbmdTdXJwYXNz');
+
+@$core.Deprecated('Use answerDetailInfoDescriptor instead')
+const AnswerDetailInfo$json = {
+  '1': 'AnswerDetailInfo',
+  '2': [
+    {'1': 'qbId', '3': 1, '4': 1, '5': 5, '10': 'qbId'},
+    {'1': 'question', '3': 2, '4': 1, '5': 9, '10': 'question'},
+    {'1': 'image', '3': 3, '4': 1, '5': 11, '6': '.base.v1.NetImage', '10': 'image'},
+    {'1': 'answer', '3': 4, '4': 3, '5': 9, '10': 'answer'},
+    {'1': 'rightAnswerIndex', '3': 5, '4': 1, '5': 5, '10': 'rightAnswerIndex'},
+    {'1': 'userAnswerIndex', '3': 6, '4': 1, '5': 5, '10': 'userAnswerIndex'},
+    {'1': 'answerCorrect', '3': 7, '4': 1, '5': 8, '10': 'answerCorrect'},
+    {'1': 'isAnswer', '3': 8, '4': 1, '5': 8, '10': 'isAnswer'},
+  ],
+};
+
+/// Descriptor for `AnswerDetailInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List answerDetailInfoDescriptor = $convert.base64Decode(
+    'ChBBbnN3ZXJEZXRhaWxJbmZvEhIKBHFiSWQYASABKAVSBHFiSWQSGgoIcXVlc3Rpb24YAiABKA'
+    'lSCHF1ZXN0aW9uEicKBWltYWdlGAMgASgLMhEuYmFzZS52MS5OZXRJbWFnZVIFaW1hZ2USFgoG'
+    'YW5zd2VyGAQgAygJUgZhbnN3ZXISKgoQcmlnaHRBbnN3ZXJJbmRleBgFIAEoBVIQcmlnaHRBbn'
+    'N3ZXJJbmRleBIoCg91c2VyQW5zd2VySW5kZXgYBiABKAVSD3VzZXJBbnN3ZXJJbmRleBIkCg1h'
+    'bnN3ZXJDb3JyZWN0GAcgASgIUg1hbnN3ZXJDb3JyZWN0EhoKCGlzQW5zd2VyGAggASgIUghpc0'
+    'Fuc3dlcg==');
+
+@$core.Deprecated('Use toActivityRegusterAddRequestDescriptor instead')
+const ToActivityRegusterAddRequest$json = {
+  '1': 'ToActivityRegusterAddRequest',
+  '2': [
+    {'1': 'regName', '3': 1, '4': 1, '5': 9, '10': 'regName'},
+    {'1': 'startSecond', '3': 2, '4': 1, '5': 3, '10': 'startSecond'},
+    {'1': 'endSecond', '3': 3, '4': 1, '5': 3, '10': 'endSecond'},
+    {'1': 'organizer', '3': 4, '4': 1, '5': 9, '10': 'organizer'},
+  ],
+};
+
+/// Descriptor for `ToActivityRegusterAddRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActivityRegusterAddRequestDescriptor = $convert.base64Decode(
+    'ChxUb0FjdGl2aXR5UmVndXN0ZXJBZGRSZXF1ZXN0EhgKB3JlZ05hbWUYASABKAlSB3JlZ05hbW'
+    'USIAoLc3RhcnRTZWNvbmQYAiABKANSC3N0YXJ0U2Vjb25kEhwKCWVuZFNlY29uZBgDIAEoA1IJ'
+    'ZW5kU2Vjb25kEhwKCW9yZ2FuaXplchgEIAEoCVIJb3JnYW5pemVy');
+
+@$core.Deprecated('Use toActivityRegusterEditRequestDescriptor instead')
+const ToActivityRegusterEditRequest$json = {
+  '1': 'ToActivityRegusterEditRequest',
+  '2': [
+    {'1': 'regId', '3': 1, '4': 1, '5': 5, '10': 'regId'},
+    {'1': 'regName', '3': 2, '4': 1, '5': 9, '10': 'regName'},
+    {'1': 'startSecond', '3': 3, '4': 1, '5': 3, '10': 'startSecond'},
+    {'1': 'endSecond', '3': 4, '4': 1, '5': 3, '10': 'endSecond'},
+    {'1': 'organizer', '3': 5, '4': 1, '5': 9, '10': 'organizer'},
+  ],
+};
+
+/// Descriptor for `ToActivityRegusterEditRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActivityRegusterEditRequestDescriptor = $convert.base64Decode(
+    'Ch1Ub0FjdGl2aXR5UmVndXN0ZXJFZGl0UmVxdWVzdBIUCgVyZWdJZBgBIAEoBVIFcmVnSWQSGA'
+    'oHcmVnTmFtZRgCIAEoCVIHcmVnTmFtZRIgCgtzdGFydFNlY29uZBgDIAEoA1ILc3RhcnRTZWNv'
+    'bmQSHAoJZW5kU2Vjb25kGAQgASgDUgllbmRTZWNvbmQSHAoJb3JnYW5pemVyGAUgASgJUglvcm'
+    'dhbml6ZXI=');
+
+@$core.Deprecated('Use toActivityRegusterListRequestDescriptor instead')
+const ToActivityRegusterListRequest$json = {
+  '1': 'ToActivityRegusterListRequest',
+  '2': [
+    {'1': 'offset', '3': 1, '4': 1, '5': 5, '10': 'offset'},
+    {'1': 'limit', '3': 2, '4': 1, '5': 5, '10': 'limit'},
+  ],
+};
+
+/// Descriptor for `ToActivityRegusterListRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActivityRegusterListRequestDescriptor = $convert.base64Decode(
+    'Ch1Ub0FjdGl2aXR5UmVndXN0ZXJMaXN0UmVxdWVzdBIWCgZvZmZzZXQYASABKAVSBm9mZnNldB'
+    'IUCgVsaW1pdBgCIAEoBVIFbGltaXQ=');
+
+@$core.Deprecated('Use toActivityRegusterListReplyDescriptor instead')
+const ToActivityRegusterListReply$json = {
+  '1': 'ToActivityRegusterListReply',
+  '2': [
+    {'1': 'list', '3': 1, '4': 3, '5': 11, '6': '.base.v1.ToActivityRegusterInfo', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToActivityRegusterListReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActivityRegusterListReplyDescriptor = $convert.base64Decode(
+    'ChtUb0FjdGl2aXR5UmVndXN0ZXJMaXN0UmVwbHkSMwoEbGlzdBgBIAMoCzIfLmJhc2UudjEuVG'
+    '9BY3Rpdml0eVJlZ3VzdGVySW5mb1IEbGlzdA==');
+
+@$core.Deprecated('Use toActivityRegusterInfoDescriptor instead')
+const ToActivityRegusterInfo$json = {
+  '1': 'ToActivityRegusterInfo',
+  '2': [
+    {'1': 'regId', '3': 1, '4': 1, '5': 5, '10': 'regId'},
+    {'1': 'regName', '3': 2, '4': 1, '5': 9, '10': 'regName'},
+    {'1': 'startSecond', '3': 3, '4': 1, '5': 3, '10': 'startSecond'},
+    {'1': 'endSecond', '3': 4, '4': 1, '5': 3, '10': 'endSecond'},
+    {'1': 'organizer', '3': 5, '4': 1, '5': 9, '10': 'organizer'},
+    {'1': 'key', '3': 6, '4': 1, '5': 9, '10': 'key'},
+  ],
+};
+
+/// Descriptor for `ToActivityRegusterInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActivityRegusterInfoDescriptor = $convert.base64Decode(
+    'ChZUb0FjdGl2aXR5UmVndXN0ZXJJbmZvEhQKBXJlZ0lkGAEgASgFUgVyZWdJZBIYCgdyZWdOYW'
+    '1lGAIgASgJUgdyZWdOYW1lEiAKC3N0YXJ0U2Vjb25kGAMgASgDUgtzdGFydFNlY29uZBIcCgll'
+    'bmRTZWNvbmQYBCABKANSCWVuZFNlY29uZBIcCglvcmdhbml6ZXIYBSABKAlSCW9yZ2FuaXplch'
+    'IQCgNrZXkYBiABKAlSA2tleQ==');
+
+@$core.Deprecated('Use toGameRankingRequestDescriptor instead')
+const ToGameRankingRequest$json = {
+  '1': 'ToGameRankingRequest',
+  '2': [
+    {'1': 'mapId', '3': 1, '4': 1, '5': 5, '10': 'mapId'},
+    {'1': 'startSecond', '3': 2, '4': 1, '5': 3, '10': 'startSecond'},
+  ],
+};
+
+/// Descriptor for `ToGameRankingRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toGameRankingRequestDescriptor = $convert.base64Decode(
+    'ChRUb0dhbWVSYW5raW5nUmVxdWVzdBIUCgVtYXBJZBgBIAEoBVIFbWFwSWQSIAoLc3RhcnRTZW'
+    'NvbmQYAiABKANSC3N0YXJ0U2Vjb25k');
+
+@$core.Deprecated('Use toGameRankingReplyDescriptor instead')
+const ToGameRankingReply$json = {
+  '1': 'ToGameRankingReply',
+  '2': [
+    {'1': 'list', '3': 1, '4': 3, '5': 11, '6': '.base.v1.ToActionRankInfo', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToGameRankingReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toGameRankingReplyDescriptor = $convert.base64Decode(
+    'ChJUb0dhbWVSYW5raW5nUmVwbHkSLQoEbGlzdBgBIAMoCzIZLmJhc2UudjEuVG9BY3Rpb25SYW'
+    '5rSW5mb1IEbGlzdA==');
+
+@$core.Deprecated('Use toActionRankInfoDescriptor instead')
+const ToActionRankInfo$json = {
+  '1': 'ToActionRankInfo',
+  '2': [
+    {'1': 'actId', '3': 1, '4': 1, '5': 5, '10': 'actId'},
+    {'1': 'actName', '3': 2, '4': 1, '5': 9, '10': 'actName'},
+    {'1': 'totalUserNum', '3': 3, '4': 1, '5': 5, '10': 'totalUserNum'},
+    {'1': 'rankList', '3': 4, '4': 3, '5': 11, '6': '.base.v1.ToOrienteerRankInfo', '10': 'rankList'},
+  ],
+};
+
+/// Descriptor for `ToActionRankInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActionRankInfoDescriptor = $convert.base64Decode(
+    'ChBUb0FjdGlvblJhbmtJbmZvEhQKBWFjdElkGAEgASgFUgVhY3RJZBIYCgdhY3ROYW1lGAIgAS'
+    'gJUgdhY3ROYW1lEiIKDHRvdGFsVXNlck51bRgDIAEoBVIMdG90YWxVc2VyTnVtEjgKCHJhbmtM'
+    'aXN0GAQgAygLMhwuYmFzZS52MS5Ub09yaWVudGVlclJhbmtJbmZvUghyYW5rTGlzdA==');
+
+@$core.Deprecated('Use toOrienteerRankInfoDescriptor instead')
+const ToOrienteerRankInfo$json = {
+  '1': 'ToOrienteerRankInfo',
+  '2': [
+    {'1': 'gameId', '3': 1, '4': 1, '5': 5, '10': 'gameId'},
+    {'1': 'oName', '3': 2, '4': 1, '5': 9, '10': 'oName'},
+    {'1': 'phone', '3': 3, '4': 1, '5': 9, '10': 'phone'},
+    {'1': 'courseName', '3': 4, '4': 1, '5': 9, '10': 'courseName'},
+    {'1': 'state', '3': 5, '4': 1, '5': 5, '10': 'state'},
+    {'1': 'start_at', '3': 6, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'startAt'},
+    {'1': 'duration', '3': 7, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'duration'},
+    {'1': 'distance', '3': 8, '4': 1, '5': 5, '10': 'distance'},
+    {'1': 'totalControlNum', '3': 9, '4': 1, '5': 5, '10': 'totalControlNum'},
+    {'1': 'oId', '3': 10, '4': 1, '5': 5, '10': 'oId'},
+  ],
+};
+
+/// Descriptor for `ToOrienteerRankInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toOrienteerRankInfoDescriptor = $convert.base64Decode(
+    'ChNUb09yaWVudGVlclJhbmtJbmZvEhYKBmdhbWVJZBgBIAEoBVIGZ2FtZUlkEhQKBW9OYW1lGA'
+    'IgASgJUgVvTmFtZRIUCgVwaG9uZRgDIAEoCVIFcGhvbmUSHgoKY291cnNlTmFtZRgEIAEoCVIK'
+    'Y291cnNlTmFtZRIUCgVzdGF0ZRgFIAEoBVIFc3RhdGUSNQoIc3RhcnRfYXQYBiABKAsyGi5nb2'
+    '9nbGUucHJvdG9idWYuVGltZXN0YW1wUgdzdGFydEF0EjUKCGR1cmF0aW9uGAcgASgLMhkuZ29v'
+    'Z2xlLnByb3RvYnVmLkR1cmF0aW9uUghkdXJhdGlvbhIaCghkaXN0YW5jZRgIIAEoBVIIZGlzdG'
+    'FuY2USKAoPdG90YWxDb250cm9sTnVtGAkgASgFUg90b3RhbENvbnRyb2xOdW0SEAoDb0lkGAog'
+    'ASgFUgNvSWQ=');
+
+@$core.Deprecated('Use toGetUpdateVersionRequestDescriptor instead')
+const ToGetUpdateVersionRequest$json = {
+  '1': 'ToGetUpdateVersionRequest',
+  '2': [
+    {'1': 'vCode', '3': 1, '4': 1, '5': 9, '10': 'vCode'},
+    {'1': 'vShop', '3': 2, '4': 1, '5': 5, '10': 'vShop'},
+  ],
+};
+
+/// Descriptor for `ToGetUpdateVersionRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toGetUpdateVersionRequestDescriptor = $convert.base64Decode(
+    'ChlUb0dldFVwZGF0ZVZlcnNpb25SZXF1ZXN0EhQKBXZDb2RlGAEgASgJUgV2Q29kZRIUCgV2U2'
+    'hvcBgCIAEoBVIFdlNob3A=');
+
+@$core.Deprecated('Use toGetUpdateVersionReplyDescriptor instead')
+const ToGetUpdateVersionReply$json = {
+  '1': 'ToGetUpdateVersionReply',
+  '2': [
+    {'1': 'needUpdate', '3': 1, '4': 1, '5': 8, '10': 'needUpdate'},
+    {'1': 'vCode', '3': 2, '4': 1, '5': 9, '10': 'vCode'},
+    {'1': 'vMemo', '3': 3, '4': 1, '5': 9, '10': 'vMemo'},
+    {'1': 'vUrl', '3': 4, '4': 1, '5': 9, '10': 'vUrl'},
+  ],
+};
+
+/// Descriptor for `ToGetUpdateVersionReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toGetUpdateVersionReplyDescriptor = $convert.base64Decode(
+    'ChdUb0dldFVwZGF0ZVZlcnNpb25SZXBseRIeCgpuZWVkVXBkYXRlGAEgASgIUgpuZWVkVXBkYX'
+    'RlEhQKBXZDb2RlGAIgASgJUgV2Q29kZRIUCgV2TWVtbxgDIAEoCVIFdk1lbW8SEgoEdlVybBgE'
+    'IAEoCVIEdlVybA==');
+
+@$core.Deprecated('Use toGameDetailReplyDescriptor instead')
+const ToGameDetailReply$json = {
+  '1': 'ToGameDetailReply',
+  '2': [
+    {'1': 'game_id', '3': 1, '4': 1, '5': 5, '10': 'gameId'},
+    {'1': 'isComplete', '3': 2, '4': 1, '5': 8, '10': 'isComplete'},
+    {'1': 'start_at', '3': 3, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'startAt'},
+    {'1': 'checked_sorted_list', '3': 4, '4': 3, '5': 11, '6': '.base.v1.ToControlPoint', '10': 'checkedSortedList'},
+    {'1': 'duration', '3': 5, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'duration'},
+    {'1': 'stop_at', '3': 6, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'stopAt'},
+    {'1': 'isSuccess', '3': 8, '4': 1, '5': 8, '10': 'isSuccess'},
+    {'1': 'sysPoint', '3': 9, '4': 1, '5': 5, '10': 'sysPoint'},
+    {'1': 'totalPointNum', '3': 10, '4': 1, '5': 5, '10': 'totalPointNum'},
+    {'1': 'actName', '3': 13, '4': 1, '5': 9, '10': 'actName'},
+    {'1': 'distance', '3': 14, '4': 1, '5': 5, '10': 'distance'},
+    {'1': 'pace', '3': 15, '4': 1, '5': 5, '10': 'pace'},
+    {'1': 'avgHr', '3': 16, '4': 1, '5': 5, '10': 'avgHr'},
+    {'1': 'Calorie', '3': 17, '4': 1, '5': 5, '10': 'Calorie'},
+    {'1': 'Ck', '3': 18, '4': 1, '5': 5, '10': 'Ck'},
+    {'1': 'Ei', '3': 19, '4': 1, '5': 2, '10': 'Ei'},
+    {'1': 'stepNum', '3': 20, '4': 1, '5': 5, '10': 'stepNum'},
+    {'1': 'gameGpsInfo', '3': 21, '4': 3, '5': 11, '6': '.base.v1.GameGpsInfo', '10': 'gameGpsInfo'},
+    {'1': 'gameHrInfos', '3': 24, '4': 3, '5': 11, '6': '.base.v1.HeartRate', '10': 'gameHrInfos'},
+    {'1': 'source', '3': 25, '4': 1, '5': 14, '6': '.base.v1.GameHistorySource', '10': 'source'},
+    {'1': 'actId', '3': 26, '4': 1, '5': 5, '10': 'actId'},
+  ],
+};
+
+/// Descriptor for `ToGameDetailReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toGameDetailReplyDescriptor = $convert.base64Decode(
+    'ChFUb0dhbWVEZXRhaWxSZXBseRIXCgdnYW1lX2lkGAEgASgFUgZnYW1lSWQSHgoKaXNDb21wbG'
+    'V0ZRgCIAEoCFIKaXNDb21wbGV0ZRI1CghzdGFydF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1'
+    'Zi5UaW1lc3RhbXBSB3N0YXJ0QXQSRwoTY2hlY2tlZF9zb3J0ZWRfbGlzdBgEIAMoCzIXLmJhc2'
+    'UudjEuVG9Db250cm9sUG9pbnRSEWNoZWNrZWRTb3J0ZWRMaXN0EjUKCGR1cmF0aW9uGAUgASgL'
+    'MhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUghkdXJhdGlvbhIzCgdzdG9wX2F0GAYgASgLMh'
+    'ouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIGc3RvcEF0EhwKCWlzU3VjY2VzcxgIIAEoCFIJ'
+    'aXNTdWNjZXNzEhoKCHN5c1BvaW50GAkgASgFUghzeXNQb2ludBIkCg10b3RhbFBvaW50TnVtGA'
+    'ogASgFUg10b3RhbFBvaW50TnVtEhgKB2FjdE5hbWUYDSABKAlSB2FjdE5hbWUSGgoIZGlzdGFu'
+    'Y2UYDiABKAVSCGRpc3RhbmNlEhIKBHBhY2UYDyABKAVSBHBhY2USFAoFYXZnSHIYECABKAVSBW'
+    'F2Z0hyEhgKB0NhbG9yaWUYESABKAVSB0NhbG9yaWUSDgoCQ2sYEiABKAVSAkNrEg4KAkVpGBMg'
+    'ASgCUgJFaRIYCgdzdGVwTnVtGBQgASgFUgdzdGVwTnVtEjYKC2dhbWVHcHNJbmZvGBUgAygLMh'
+    'QuYmFzZS52MS5HYW1lR3BzSW5mb1ILZ2FtZUdwc0luZm8SNAoLZ2FtZUhySW5mb3MYGCADKAsy'
+    'Ei5iYXNlLnYxLkhlYXJ0UmF0ZVILZ2FtZUhySW5mb3MSMgoGc291cmNlGBkgASgOMhouYmFzZS'
+    '52MS5HYW1lSGlzdG9yeVNvdXJjZVIGc291cmNlEhQKBWFjdElkGBogASgFUgVhY3RJZA==');
+
+@$core.Deprecated('Use toHisUserListQueryReplyDescriptor instead')
+const ToHisUserListQueryReply$json = {
+  '1': 'ToHisUserListQueryReply',
+  '2': [
+    {'1': 'list', '3': 1, '4': 3, '5': 11, '6': '.base.v1.ToHisUserBasic', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToHisUserListQueryReply`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toHisUserListQueryReplyDescriptor = $convert.base64Decode(
+    'ChdUb0hpc1VzZXJMaXN0UXVlcnlSZXBseRIrCgRsaXN0GAEgAygLMhcuYmFzZS52MS5Ub0hpc1'
+    'VzZXJCYXNpY1IEbGlzdA==');
+
+@$core.Deprecated('Use toHisUserBasicDescriptor instead')
+const ToHisUserBasic$json = {
+  '1': 'ToHisUserBasic',
+  '2': [
+    {'1': 'OId', '3': 1, '4': 1, '5': 5, '10': 'OId'},
+    {'1': 'OName', '3': 2, '4': 1, '5': 9, '10': 'OName'},
+    {'1': 'list', '3': 3, '4': 3, '5': 11, '6': '.base.v1.ToHisUserInfo', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToHisUserBasic`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toHisUserBasicDescriptor = $convert.base64Decode(
+    'Cg5Ub0hpc1VzZXJCYXNpYxIQCgNPSWQYASABKAVSA09JZBIUCgVPTmFtZRgCIAEoCVIFT05hbW'
+    'USKgoEbGlzdBgDIAMoCzIWLmJhc2UudjEuVG9IaXNVc2VySW5mb1IEbGlzdA==');
+
+@$core.Deprecated('Use toHisUserInfoDescriptor instead')
+const ToHisUserInfo$json = {
+  '1': 'ToHisUserInfo',
+  '2': [
+    {'1': 'GameId', '3': 1, '4': 1, '5': 5, '10': 'GameId'},
+    {'1': 'CourseName', '3': 2, '4': 1, '5': 9, '10': 'CourseName'},
+    {'1': 'ActName', '3': 3, '4': 1, '5': 9, '10': 'ActName'},
+    {'1': 'isComplete', '3': 4, '4': 1, '5': 8, '10': 'isComplete'},
+    {'1': 'start_at', '3': 5, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'startAt'},
+    {'1': 'duration', '3': 6, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'duration'},
+  ],
+};
+
+/// Descriptor for `ToHisUserInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toHisUserInfoDescriptor = $convert.base64Decode(
+    'Cg1Ub0hpc1VzZXJJbmZvEhYKBkdhbWVJZBgBIAEoBVIGR2FtZUlkEh4KCkNvdXJzZU5hbWUYAi'
+    'ABKAlSCkNvdXJzZU5hbWUSGAoHQWN0TmFtZRgDIAEoCVIHQWN0TmFtZRIeCgppc0NvbXBsZXRl'
+    'GAQgASgIUgppc0NvbXBsZXRlEjUKCHN0YXJ0X2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLl'
+    'RpbWVzdGFtcFIHc3RhcnRBdBI1CghkdXJhdGlvbhgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5E'
+    'dXJhdGlvblIIZHVyYXRpb24=');
+
+@$core.Deprecated('Use toUserInActionBasicQueryRequestDescriptor instead')
+const ToUserInActionBasicQueryRequest$json = {
+  '1': 'ToUserInActionBasicQueryRequest',
+  '2': [
+    {'1': 'ActId', '3': 1, '4': 1, '5': 5, '10': 'ActId'},
+    {'1': 'UserId', '3': 2, '4': 1, '5': 5, '10': 'UserId'},
+  ],
+};
+
+/// Descriptor for `ToUserInActionBasicQueryRequest`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toUserInActionBasicQueryRequestDescriptor = $convert.base64Decode(
+    'Ch9Ub1VzZXJJbkFjdGlvbkJhc2ljUXVlcnlSZXF1ZXN0EhQKBUFjdElkGAEgASgFUgVBY3RJZB'
+    'IWCgZVc2VySWQYAiABKAVSBlVzZXJJZA==');
+
+@$core.Deprecated('Use toGetBinaryByMd5RequestDescriptor instead')
+const ToGetBinaryByMd5Request$json = {
+  '1': 'ToGetBinaryByMd5Request',
+  '2': [
+    {'1': 'md5', '3': 1, '4': 1, '5': 12, '10': 'md5'},
+  ],
+};
+
+/// Descriptor for `ToGetBinaryByMd5Request`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toGetBinaryByMd5RequestDescriptor = $convert.base64Decode(
+    'ChdUb0dldEJpbmFyeUJ5TWQ1UmVxdWVzdBIQCgNtZDUYASABKAxSA21kNQ==');
+
+@$core.Deprecated('Use getServerTimeRpDescriptor instead')
+const GetServerTimeRp$json = {
+  '1': 'GetServerTimeRp',
+  '2': [
+    {'1': 'millisecondStamp', '3': 1, '4': 1, '5': 3, '10': 'millisecondStamp'},
+  ],
+};
+
+/// Descriptor for `GetServerTimeRp`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List getServerTimeRpDescriptor = $convert.base64Decode(
+    'Cg9HZXRTZXJ2ZXJUaW1lUnASKgoQbWlsbGlzZWNvbmRTdGFtcBgBIAEoA1IQbWlsbGlzZWNvbm'
+    'RTdGFtcA==');
+
+@$core.Deprecated('Use toSendCodeToPhoneRequestV2Descriptor instead')
+const ToSendCodeToPhoneRequestV2$json = {
+  '1': 'ToSendCodeToPhoneRequestV2',
+  '2': [
+    {'1': 'phone', '3': 1, '4': 1, '5': 9, '10': 'phone'},
+    {'1': 'smsType', '3': 2, '4': 1, '5': 14, '6': '.base.v1.SmsType', '10': 'smsType'},
+  ],
+};
+
+/// Descriptor for `ToSendCodeToPhoneRequestV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toSendCodeToPhoneRequestV2Descriptor = $convert.base64Decode(
+    'ChpUb1NlbmRDb2RlVG9QaG9uZVJlcXVlc3RWMhIUCgVwaG9uZRgBIAEoCVIFcGhvbmUSKgoHc2'
+    '1zVHlwZRgCIAEoDjIQLmJhc2UudjEuU21zVHlwZVIHc21zVHlwZQ==');
+
+@$core.Deprecated('Use toSignInRequestV2Descriptor instead')
+const ToSignInRequestV2$json = {
+  '1': 'ToSignInRequestV2',
+  '2': [
+    {'1': 'userCode', '3': 1, '4': 1, '5': 9, '10': 'userCode'},
+    {'1': 'password', '3': 2, '4': 1, '5': 9, '10': 'password'},
+    {'1': 'ip', '3': 3, '4': 1, '5': 9, '10': 'ip'},
+  ],
+};
+
+/// Descriptor for `ToSignInRequestV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toSignInRequestV2Descriptor = $convert.base64Decode(
+    'ChFUb1NpZ25JblJlcXVlc3RWMhIaCgh1c2VyQ29kZRgBIAEoCVIIdXNlckNvZGUSGgoIcGFzc3'
+    'dvcmQYAiABKAlSCHBhc3N3b3JkEg4KAmlwGAMgASgJUgJpcA==');
+
+@$core.Deprecated('Use mapListRequestV2Descriptor instead')
+const MapListRequestV2$json = {
+  '1': 'MapListRequestV2',
+  '2': [
+    {'1': 'position', '3': 1, '4': 1, '5': 11, '6': '.base.v1.Position', '10': 'position'},
+    {'1': 'offset', '3': 2, '4': 1, '5': 5, '10': 'offset'},
+    {'1': 'limit', '3': 3, '4': 1, '5': 5, '10': 'limit'},
+  ],
+};
+
+/// Descriptor for `MapListRequestV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List mapListRequestV2Descriptor = $convert.base64Decode(
+    'ChBNYXBMaXN0UmVxdWVzdFYyEi0KCHBvc2l0aW9uGAEgASgLMhEuYmFzZS52MS5Qb3NpdGlvbl'
+    'IIcG9zaXRpb24SFgoGb2Zmc2V0GAIgASgFUgZvZmZzZXQSFAoFbGltaXQYAyABKAVSBWxpbWl0');
+
+@$core.Deprecated('Use toMapListReplyV2Descriptor instead')
+const ToMapListReplyV2$json = {
+  '1': 'ToMapListReplyV2',
+  '2': [
+    {'1': 'list', '3': 1, '4': 3, '5': 11, '6': '.base.v1.ToMapSimpleV2', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToMapListReplyV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toMapListReplyV2Descriptor = $convert.base64Decode(
+    'ChBUb01hcExpc3RSZXBseVYyEioKBGxpc3QYASADKAsyFi5iYXNlLnYxLlRvTWFwU2ltcGxlVj'
+    'JSBGxpc3Q=');
+
+@$core.Deprecated('Use toMapSimpleV2Descriptor instead')
+const ToMapSimpleV2$json = {
+  '1': 'ToMapSimpleV2',
+  '2': [
+    {'1': 'mapId', '3': 1, '4': 1, '5': 5, '10': 'mapId'},
+    {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
+    {'1': 'mapScaleNumber', '3': 3, '4': 1, '5': 5, '10': 'mapScaleNumber'},
+    {'1': 'description', '3': 4, '4': 1, '5': 9, '10': 'description'},
+    {'1': 'distance', '3': 5, '4': 1, '5': 1, '10': 'distance'},
+    {'1': 'image', '3': 6, '4': 1, '5': 11, '6': '.base.v1.NetImage', '10': 'image'},
+  ],
+};
+
+/// Descriptor for `ToMapSimpleV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toMapSimpleV2Descriptor = $convert.base64Decode(
+    'Cg1Ub01hcFNpbXBsZVYyEhQKBW1hcElkGAEgASgFUgVtYXBJZBISCgRuYW1lGAIgASgJUgRuYW'
+    '1lEiYKDm1hcFNjYWxlTnVtYmVyGAMgASgFUg5tYXBTY2FsZU51bWJlchIgCgtkZXNjcmlwdGlv'
+    'bhgEIAEoCVILZGVzY3JpcHRpb24SGgoIZGlzdGFuY2UYBSABKAFSCGRpc3RhbmNlEicKBWltYW'
+    'dlGAYgASgLMhEuYmFzZS52MS5OZXRJbWFnZVIFaW1hZ2U=');
+
+@$core.Deprecated('Use toMapInfoV2Descriptor instead')
+const ToMapInfoV2$json = {
+  '1': 'ToMapInfoV2',
+  '2': [
+    {'1': 'mapId', '3': 1, '4': 1, '5': 5, '10': 'mapId'},
+    {'1': 'mapName', '3': 2, '4': 1, '5': 9, '10': 'mapName'},
+    {'1': 'zipImage', '3': 3, '4': 1, '5': 11, '6': '.base.v1.NetImage', '10': 'zipImage'},
+  ],
+};
+
+/// Descriptor for `ToMapInfoV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toMapInfoV2Descriptor = $convert.base64Decode(
+    'CgtUb01hcEluZm9WMhIUCgVtYXBJZBgBIAEoBVIFbWFwSWQSGAoHbWFwTmFtZRgCIAEoCVIHbW'
+    'FwTmFtZRItCgh6aXBJbWFnZRgDIAEoCzIRLmJhc2UudjEuTmV0SW1hZ2VSCHppcEltYWdl');
+
+@$core.Deprecated('Use toUserDetailQueryRequestV2Descriptor instead')
+const ToUserDetailQueryRequestV2$json = {
+  '1': 'ToUserDetailQueryRequestV2',
+  '2': [
+    {'1': 'mapId', '3': 1, '4': 1, '5': 5, '10': 'mapId'},
+  ],
+};
+
+/// Descriptor for `ToUserDetailQueryRequestV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toUserDetailQueryRequestV2Descriptor = $convert.base64Decode(
+    'ChpUb1VzZXJEZXRhaWxRdWVyeVJlcXVlc3RWMhIUCgVtYXBJZBgBIAEoBVIFbWFwSWQ=');
+
+@$core.Deprecated('Use toUserDetailQueryReplyV2Descriptor instead')
+const ToUserDetailQueryReplyV2$json = {
+  '1': 'ToUserDetailQueryReplyV2',
+  '2': [
+    {'1': 'list', '3': 1, '4': 3, '5': 11, '6': '.base.v1.ToActionInfo', '10': 'list'},
+  ],
+};
+
+/// Descriptor for `ToUserDetailQueryReplyV2`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toUserDetailQueryReplyV2Descriptor = $convert.base64Decode(
+    'ChhUb1VzZXJEZXRhaWxRdWVyeVJlcGx5VjISKQoEbGlzdBgBIAMoCzIVLmJhc2UudjEuVG9BY3'
+    'Rpb25JbmZvUgRsaXN0');
+
+@$core.Deprecated('Use toActionInfoDescriptor instead')
+const ToActionInfo$json = {
+  '1': 'ToActionInfo',
+  '2': [
+    {'1': 'actId', '3': 1, '4': 1, '5': 5, '10': 'actId'},
+    {'1': 'userList', '3': 4, '4': 3, '5': 11, '6': '.base.v1.ToOrienteerInGameInfo', '10': 'userList'},
+  ],
+};
+
+/// Descriptor for `ToActionInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActionInfoDescriptor = $convert.base64Decode(
+    'CgxUb0FjdGlvbkluZm8SFAoFYWN0SWQYASABKAVSBWFjdElkEjoKCHVzZXJMaXN0GAQgAygLMh'
+    '4uYmFzZS52MS5Ub09yaWVudGVlckluR2FtZUluZm9SCHVzZXJMaXN0');
+
+@$core.Deprecated('Use toActionBasicInfoDescriptor instead')
+const ToActionBasicInfo$json = {
+  '1': 'ToActionBasicInfo',
+  '2': [
+    {'1': 'actId', '3': 1, '4': 1, '5': 5, '10': 'actId'},
+    {'1': 'actName', '3': 2, '4': 1, '5': 9, '10': 'actName'},
+    {'1': 'totalControlNum', '3': 3, '4': 1, '5': 5, '10': 'totalControlNum'},
+  ],
+};
+
+/// Descriptor for `ToActionBasicInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toActionBasicInfoDescriptor = $convert.base64Decode(
+    'ChFUb0FjdGlvbkJhc2ljSW5mbxIUCgVhY3RJZBgBIAEoBVIFYWN0SWQSGAoHYWN0TmFtZRgCIA'
+    'EoCVIHYWN0TmFtZRIoCg90b3RhbENvbnRyb2xOdW0YAyABKAVSD3RvdGFsQ29udHJvbE51bQ==');
+
+@$core.Deprecated('Use toOrienteerInGameInfoDescriptor instead')
+const ToOrienteerInGameInfo$json = {
+  '1': 'ToOrienteerInGameInfo',
+  '2': [
+    {'1': 'UserId', '3': 1, '4': 1, '5': 5, '10': 'UserId'},
+    {'1': 'gpsInfo', '3': 3, '4': 1, '5': 11, '6': '.base.v1.OrienteerGpsInfo', '10': 'gpsInfo'},
+    {'1': 'hrInfo', '3': 4, '4': 1, '5': 11, '6': '.base.v1.OrienteerHrInfo', '10': 'hrInfo'},
+    {'1': 'gameSaveInfo', '3': 5, '4': 1, '5': 11, '6': '.base.v1.OrienteerGameSaveInfo', '10': 'gameSaveInfo'},
+    {'1': 'otherInfo', '3': 7, '4': 1, '5': 11, '6': '.base.v1.OrienteerOtherInfo', '10': 'otherInfo'},
+  ],
+};
+
+/// Descriptor for `ToOrienteerInGameInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toOrienteerInGameInfoDescriptor = $convert.base64Decode(
+    'ChVUb09yaWVudGVlckluR2FtZUluZm8SFgoGVXNlcklkGAEgASgFUgZVc2VySWQSMwoHZ3BzSW'
+    '5mbxgDIAEoCzIZLmJhc2UudjEuT3JpZW50ZWVyR3BzSW5mb1IHZ3BzSW5mbxIwCgZockluZm8Y'
+    'BCABKAsyGC5iYXNlLnYxLk9yaWVudGVlckhySW5mb1IGaHJJbmZvEkIKDGdhbWVTYXZlSW5mbx'
+    'gFIAEoCzIeLmJhc2UudjEuT3JpZW50ZWVyR2FtZVNhdmVJbmZvUgxnYW1lU2F2ZUluZm8SOQoJ'
+    'b3RoZXJJbmZvGAcgASgLMhsuYmFzZS52MS5PcmllbnRlZXJPdGhlckluZm9SCW90aGVySW5mbw'
+    '==');
+
+@$core.Deprecated('Use toUserInActionBasicInfoDescriptor instead')
+const ToUserInActionBasicInfo$json = {
+  '1': 'ToUserInActionBasicInfo',
+  '2': [
+    {'1': 'UserId', '3': 1, '4': 1, '5': 5, '10': 'UserId'},
+    {'1': 'baseInfo', '3': 2, '4': 1, '5': 11, '6': '.base.v1.OrienteerBaseInfo', '10': 'baseInfo'},
+    {'1': 'courseBaseInfo', '3': 6, '4': 1, '5': 11, '6': '.base.v1.CourseBaseInfo', '10': 'courseBaseInfo'},
+  ],
+};
+
+/// Descriptor for `ToUserInActionBasicInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toUserInActionBasicInfoDescriptor = $convert.base64Decode(
+    'ChdUb1VzZXJJbkFjdGlvbkJhc2ljSW5mbxIWCgZVc2VySWQYASABKAVSBlVzZXJJZBI2CghiYX'
+    'NlSW5mbxgCIAEoCzIaLmJhc2UudjEuT3JpZW50ZWVyQmFzZUluZm9SCGJhc2VJbmZvEj8KDmNv'
+    'dXJzZUJhc2VJbmZvGAYgASgLMhcuYmFzZS52MS5Db3Vyc2VCYXNlSW5mb1IOY291cnNlQmFzZU'
+    'luZm8=');
+
+@$core.Deprecated('Use orienteerBaseInfoDescriptor instead')
+const OrienteerBaseInfo$json = {
+  '1': 'OrienteerBaseInfo',
+  '2': [
+    {'1': 'Name', '3': 1, '4': 1, '5': 9, '10': 'Name'},
+    {'1': 'Phone', '3': 2, '4': 1, '5': 9, '10': 'Phone'},
+    {'1': 'HeadUrl', '3': 3, '4': 1, '5': 9, '10': 'HeadUrl'},
+  ],
+};
+
+/// Descriptor for `OrienteerBaseInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List orienteerBaseInfoDescriptor = $convert.base64Decode(
+    'ChFPcmllbnRlZXJCYXNlSW5mbxISCgROYW1lGAEgASgJUgROYW1lEhQKBVBob25lGAIgASgJUg'
+    'VQaG9uZRIYCgdIZWFkVXJsGAMgASgJUgdIZWFkVXJs');
+
+@$core.Deprecated('Use orienteerGpsInfoDescriptor instead')
+const OrienteerGpsInfo$json = {
+  '1': 'OrienteerGpsInfo',
+  '2': [
+    {'1': 'gameGpsInfos', '3': 1, '4': 3, '5': 11, '6': '.base.v1.GameGpsInfo', '10': 'gameGpsInfos'},
+    {'1': 'Distance', '3': 2, '4': 1, '5': 5, '10': 'Distance'},
+    {'1': 'Pace', '3': 3, '4': 1, '5': 5, '10': 'Pace'},
+  ],
+};
+
+/// Descriptor for `OrienteerGpsInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List orienteerGpsInfoDescriptor = $convert.base64Decode(
+    'ChBPcmllbnRlZXJHcHNJbmZvEjgKDGdhbWVHcHNJbmZvcxgBIAMoCzIULmJhc2UudjEuR2FtZU'
+    'dwc0luZm9SDGdhbWVHcHNJbmZvcxIaCghEaXN0YW5jZRgCIAEoBVIIRGlzdGFuY2USEgoEUGFj'
+    'ZRgDIAEoBVIEUGFjZQ==');
+
+@$core.Deprecated('Use orienteerHrInfoDescriptor instead')
+const OrienteerHrInfo$json = {
+  '1': 'OrienteerHrInfo',
+  '2': [
+    {'1': 'hrInfo', '3': 1, '4': 3, '5': 11, '6': '.base.v1.HeartRate', '10': 'hrInfo'},
+  ],
+};
+
+/// Descriptor for `OrienteerHrInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List orienteerHrInfoDescriptor = $convert.base64Decode(
+    'Cg9PcmllbnRlZXJIckluZm8SKgoGaHJJbmZvGAEgAygLMhIuYmFzZS52MS5IZWFydFJhdGVSBm'
+    'hySW5mbw==');
+
+@$core.Deprecated('Use orienteerOtherInfoDescriptor instead')
+const OrienteerOtherInfo$json = {
+  '1': 'OrienteerOtherInfo',
+  '2': [
+    {'1': 'StepNum', '3': 1, '4': 1, '5': 5, '10': 'StepNum'},
+    {'1': 'HeartRatePercent', '3': 2, '4': 1, '5': 5, '10': 'HeartRatePercent'},
+  ],
+};
+
+/// Descriptor for `OrienteerOtherInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List orienteerOtherInfoDescriptor = $convert.base64Decode(
+    'ChJPcmllbnRlZXJPdGhlckluZm8SGAoHU3RlcE51bRgBIAEoBVIHU3RlcE51bRIqChBIZWFydF'
+    'JhdGVQZXJjZW50GAIgASgFUhBIZWFydFJhdGVQZXJjZW50');
+
+@$core.Deprecated('Use courseBaseInfoDescriptor instead')
+const CourseBaseInfo$json = {
+  '1': 'CourseBaseInfo',
+  '2': [
+    {'1': 'CourseId', '3': 1, '4': 1, '5': 5, '10': 'CourseId'},
+    {'1': 'CourseName', '3': 2, '4': 1, '5': 9, '10': 'CourseName'},
+    {'1': 'controlPointSortedList', '3': 3, '4': 3, '5': 11, '6': '.base.v1.ToControlPoint', '10': 'controlPointSortedList'},
+  ],
+};
+
+/// Descriptor for `CourseBaseInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List courseBaseInfoDescriptor = $convert.base64Decode(
+    'Cg5Db3Vyc2VCYXNlSW5mbxIaCghDb3Vyc2VJZBgBIAEoBVIIQ291cnNlSWQSHgoKQ291cnNlTm'
+    'FtZRgCIAEoCVIKQ291cnNlTmFtZRJPChZjb250cm9sUG9pbnRTb3J0ZWRMaXN0GAMgAygLMhcu'
+    'YmFzZS52MS5Ub0NvbnRyb2xQb2ludFIWY29udHJvbFBvaW50U29ydGVkTGlzdA==');
+
+@$core.Deprecated('Use toControlPointDescriptor instead')
+const ToControlPoint$json = {
+  '1': 'ToControlPoint',
+  '2': [
+    {'1': 'id', '3': 1, '4': 1, '5': 3, '10': 'id'},
+    {'1': 'sn', '3': 2, '4': 1, '5': 9, '10': 'sn'},
+    {'1': 'ciPosition', '3': 3, '4': 1, '5': 11, '6': '.base.v1.Position', '10': 'ciPosition'},
+    {'1': 'cType', '3': 4, '4': 1, '5': 14, '6': '.base.v1.CType', '10': 'cType'},
+    {'1': 'orderNo', '3': 5, '4': 1, '5': 5, '10': 'orderNo'},
+    {'1': 'is_check_success', '3': 6, '4': 1, '5': 8, '10': 'isCheckSuccess'},
+    {'1': 'check_after_last', '3': 7, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'checkAfterLast'},
+    {'1': 'punchTime', '3': 8, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'punchTime'},
+    {'1': 'disAfterLast', '3': 9, '4': 1, '5': 5, '10': 'disAfterLast'},
+    {'1': 'disStraightAfterLast', '3': 10, '4': 1, '5': 5, '10': 'disStraightAfterLast'},
+    {'1': 'paceAfterLast', '3': 11, '4': 1, '5': 5, '10': 'paceAfterLast'},
+    {'1': 'paceAfterStart', '3': 12, '4': 1, '5': 5, '10': 'paceAfterStart'},
+    {'1': 'check_after_start', '3': 13, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'checkAfterStart'},
+  ],
+};
+
+/// Descriptor for `ToControlPoint`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List toControlPointDescriptor = $convert.base64Decode(
+    'Cg5Ub0NvbnRyb2xQb2ludBIOCgJpZBgBIAEoA1ICaWQSDgoCc24YAiABKAlSAnNuEjEKCmNpUG'
+    '9zaXRpb24YAyABKAsyES5iYXNlLnYxLlBvc2l0aW9uUgpjaVBvc2l0aW9uEiQKBWNUeXBlGAQg'
+    'ASgOMg4uYmFzZS52MS5DVHlwZVIFY1R5cGUSGAoHb3JkZXJObxgFIAEoBVIHb3JkZXJObxIoCh'
+    'Bpc19jaGVja19zdWNjZXNzGAYgASgIUg5pc0NoZWNrU3VjY2VzcxJDChBjaGVja19hZnRlcl9s'
+    'YXN0GAcgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUg5jaGVja0FmdGVyTGFzdBI4Cg'
+    'lwdW5jaFRpbWUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUglwdW5jaFRpbWUS'
+    'IgoMZGlzQWZ0ZXJMYXN0GAkgASgFUgxkaXNBZnRlckxhc3QSMgoUZGlzU3RyYWlnaHRBZnRlck'
+    'xhc3QYCiABKAVSFGRpc1N0cmFpZ2h0QWZ0ZXJMYXN0EiQKDXBhY2VBZnRlckxhc3QYCyABKAVS'
+    'DXBhY2VBZnRlckxhc3QSJgoOcGFjZUFmdGVyU3RhcnQYDCABKAVSDnBhY2VBZnRlclN0YXJ0Ek'
+    'UKEWNoZWNrX2FmdGVyX3N0YXJ0GA0gASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUg9j'
+    'aGVja0FmdGVyU3RhcnQ=');
+
+@$core.Deprecated('Use orienteerGameSaveInfoDescriptor instead')
+const OrienteerGameSaveInfo$json = {
+  '1': 'OrienteerGameSaveInfo',
+  '2': [
+    {'1': 'start_at', '3': 1, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '10': 'startAt'},
+    {'1': 'duration', '3': 2, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'duration'},
+    {'1': 'nextControlPoint', '3': 3, '4': 1, '5': 11, '6': '.base.v1.GameArriveControlPoint', '10': 'nextControlPoint'},
+    {'1': 'checked_sorted_list', '3': 4, '4': 3, '5': 11, '6': '.base.v1.OrienteerGameSaveControlPoint', '10': 'checkedSortedList'},
+  ],
+};
+
+/// Descriptor for `OrienteerGameSaveInfo`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List orienteerGameSaveInfoDescriptor = $convert.base64Decode(
+    'ChVPcmllbnRlZXJHYW1lU2F2ZUluZm8SNQoIc3RhcnRfYXQYASABKAsyGi5nb29nbGUucHJvdG'
+    '9idWYuVGltZXN0YW1wUgdzdGFydEF0EjUKCGR1cmF0aW9uGAIgASgLMhkuZ29vZ2xlLnByb3Rv'
+    'YnVmLkR1cmF0aW9uUghkdXJhdGlvbhJLChBuZXh0Q29udHJvbFBvaW50GAMgASgLMh8uYmFzZS'
+    '52MS5HYW1lQXJyaXZlQ29udHJvbFBvaW50UhBuZXh0Q29udHJvbFBvaW50ElYKE2NoZWNrZWRf'
+    'c29ydGVkX2xpc3QYBCADKAsyJi5iYXNlLnYxLk9yaWVudGVlckdhbWVTYXZlQ29udHJvbFBvaW'
+    '50UhFjaGVja2VkU29ydGVkTGlzdA==');
+
+@$core.Deprecated('Use orienteerGameSaveControlPointDescriptor instead')
+const OrienteerGameSaveControlPoint$json = {
+  '1': 'OrienteerGameSaveControlPoint',
+  '2': [
+    {'1': 'control_point_id', '3': 1, '4': 1, '5': 3, '10': 'controlPointId'},
+    {'1': 'is_check_success', '3': 2, '4': 1, '5': 8, '10': 'isCheckSuccess'},
+    {'1': 'check_after_start', '3': 3, '4': 1, '5': 11, '6': '.google.protobuf.Duration', '10': 'checkAfterStart'},
+    {'1': 'distinct_after_start', '3': 4, '4': 1, '5': 1, '10': 'distinctAfterStart'},
+    {'1': 'longitude', '3': 5, '4': 1, '5': 1, '10': 'longitude'},
+    {'1': 'latitude', '3': 6, '4': 1, '5': 1, '10': 'latitude'},
+    {'1': 'altitude', '3': 7, '4': 1, '5': 1, '10': 'altitude'},
+  ],
+};
+
+/// Descriptor for `OrienteerGameSaveControlPoint`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List orienteerGameSaveControlPointDescriptor = $convert.base64Decode(
+    'Ch1PcmllbnRlZXJHYW1lU2F2ZUNvbnRyb2xQb2ludBIoChBjb250cm9sX3BvaW50X2lkGAEgAS'
+    'gDUg5jb250cm9sUG9pbnRJZBIoChBpc19jaGVja19zdWNjZXNzGAIgASgIUg5pc0NoZWNrU3Vj'
+    'Y2VzcxJFChFjaGVja19hZnRlcl9zdGFydBgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdG'
+    'lvblIPY2hlY2tBZnRlclN0YXJ0EjAKFGRpc3RpbmN0X2FmdGVyX3N0YXJ0GAQgASgBUhJkaXN0'
+    'aW5jdEFmdGVyU3RhcnQSHAoJbG9uZ2l0dWRlGAUgASgBUglsb25naXR1ZGUSGgoIbGF0aXR1ZG'
+    'UYBiABKAFSCGxhdGl0dWRlEhoKCGFsdGl0dWRlGAcgASgBUghhbHRpdHVkZQ==');
+

+ 208 - 0
app_business/lib/generated/google/protobuf/any.pb.dart

@@ -0,0 +1,208 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/any.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+
+import 'package:protobuf/protobuf.dart' as $pb;
+import 'package:protobuf/src/protobuf/mixins/well_known.dart' as $mixin;
+
+///  `Any` contains an arbitrary serialized protocol buffer message along with a
+///  URL that describes the type of the serialized message.
+///
+///  Protobuf library provides support to pack/unpack Any values in the form
+///  of utility functions or additional generated methods of the Any type.
+///
+///  Example 1: Pack and unpack a message in C++.
+///
+///      Foo foo = ...;
+///      Any any;
+///      any.PackFrom(foo);
+///      ...
+///      if (any.UnpackTo(&foo)) {
+///        ...
+///      }
+///
+///  Example 2: Pack and unpack a message in Java.
+///
+///      Foo foo = ...;
+///      Any any = Any.pack(foo);
+///      ...
+///      if (any.is(Foo.class)) {
+///        foo = any.unpack(Foo.class);
+///      }
+///      // or ...
+///      if (any.isSameTypeAs(Foo.getDefaultInstance())) {
+///        foo = any.unpack(Foo.getDefaultInstance());
+///      }
+///
+///   Example 3: Pack and unpack a message in Python.
+///
+///      foo = Foo(...)
+///      any = Any()
+///      any.Pack(foo)
+///      ...
+///      if any.Is(Foo.DESCRIPTOR):
+///        any.Unpack(foo)
+///        ...
+///
+///   Example 4: Pack and unpack a message in Go
+///
+///       foo := &pb.Foo{...}
+///       any, err := anypb.New(foo)
+///       if err != nil {
+///         ...
+///       }
+///       ...
+///       foo := &pb.Foo{}
+///       if err := any.UnmarshalTo(foo); err != nil {
+///         ...
+///       }
+///
+///  The pack methods provided by protobuf library will by default use
+///  'type.googleapis.com/full.type.name' as the type URL and the unpack
+///  methods only use the fully qualified type name after the last '/'
+///  in the type URL, for example "foo.bar.com/x/y.z" will yield type
+///  name "y.z".
+///
+///  JSON
+///  ====
+///  The JSON representation of an `Any` value uses the regular
+///  representation of the deserialized, embedded message, with an
+///  additional field `@type` which contains the type URL. Example:
+///
+///      package google.profile;
+///      message Person {
+///        string first_name = 1;
+///        string last_name = 2;
+///      }
+///
+///      {
+///        "@type": "type.googleapis.com/google.profile.Person",
+///        "firstName": <string>,
+///        "lastName": <string>
+///      }
+///
+///  If the embedded message type is well-known and has a custom JSON
+///  representation, that representation will be embedded adding a field
+///  `value` which holds the custom JSON in addition to the `@type`
+///  field. Example (for message [google.protobuf.Duration][]):
+///
+///      {
+///        "@type": "type.googleapis.com/google.protobuf.Duration",
+///        "value": "1.212s"
+///      }
+class Any extends $pb.GeneratedMessage with $mixin.AnyMixin {
+  factory Any({
+    $core.String? typeUrl,
+    $core.List<$core.int>? value,
+  }) {
+    final $result = create();
+    if (typeUrl != null) {
+      $result.typeUrl = typeUrl;
+    }
+    if (value != null) {
+      $result.value = value;
+    }
+    return $result;
+  }
+  Any._() : super();
+  factory Any.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory Any.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Any', package: const $pb.PackageName(_omitMessageNames ? '' : 'google.protobuf'), createEmptyInstance: create, toProto3Json: $mixin.AnyMixin.toProto3JsonHelper, fromProto3Json: $mixin.AnyMixin.fromProto3JsonHelper)
+    ..aOS(1, _omitFieldNames ? '' : 'typeUrl')
+    ..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'value', $pb.PbFieldType.OY)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  Any clone() => Any()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  Any copyWith(void Function(Any) updates) => super.copyWith((message) => updates(message as Any)) as Any;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static Any create() => Any._();
+  Any createEmptyInstance() => create();
+  static $pb.PbList<Any> createRepeated() => $pb.PbList<Any>();
+  @$core.pragma('dart2js:noInline')
+  static Any getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Any>(create);
+  static Any? _defaultInstance;
+
+  ///  A URL/resource name that uniquely identifies the type of the serialized
+  ///  protocol buffer message. This string must contain at least
+  ///  one "/" character. The last segment of the URL's path must represent
+  ///  the fully qualified name of the type (as in
+  ///  `path/google.protobuf.Duration`). The name should be in a canonical form
+  ///  (e.g., leading "." is not accepted).
+  ///
+  ///  In practice, teams usually precompile into the binary all types that they
+  ///  expect it to use in the context of Any. However, for URLs which use the
+  ///  scheme `http`, `https`, or no scheme, one can optionally set up a type
+  ///  server that maps type URLs to message definitions as follows:
+  ///
+  ///  * If no scheme is provided, `https` is assumed.
+  ///  * An HTTP GET on the URL must yield a [google.protobuf.Type][]
+  ///    value in binary format, or produce an error.
+  ///  * Applications are allowed to cache lookup results based on the
+  ///    URL, or have them precompiled into a binary to avoid any
+  ///    lookup. Therefore, binary compatibility needs to be preserved
+  ///    on changes to types. (Use versioned type names to manage
+  ///    breaking changes.)
+  ///
+  ///  Note: this functionality is not currently available in the official
+  ///  protobuf release, and it is not used for type URLs beginning with
+  ///  type.googleapis.com. As of May 2023, there are no widely used type server
+  ///  implementations and no plans to implement one.
+  ///
+  ///  Schemes other than `http`, `https` (or the empty scheme) might be
+  ///  used with implementation specific semantics.
+  @$pb.TagNumber(1)
+  $core.String get typeUrl => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set typeUrl($core.String v) { $_setString(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasTypeUrl() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearTypeUrl() => clearField(1);
+
+  /// Must be a valid serialized protocol buffer of the above specified type.
+  @$pb.TagNumber(2)
+  $core.List<$core.int> get value => $_getN(1);
+  @$pb.TagNumber(2)
+  set value($core.List<$core.int> v) { $_setBytes(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasValue() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearValue() => clearField(2);
+  /// Creates a new [Any] encoding [message].
+  ///
+  /// The [typeUrl] will be [typeUrlPrefix]/`fullName` where `fullName` is
+  /// the fully qualified name of the type of [message].
+  static Any pack($pb.GeneratedMessage message,
+  {$core.String typeUrlPrefix = 'type.googleapis.com'}) {
+    final result = create();
+    $mixin.AnyMixin.packIntoAny(result, message,
+        typeUrlPrefix: typeUrlPrefix);
+    return result;
+  }
+}
+
+
+const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
+const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

+ 11 - 0
app_business/lib/generated/google/protobuf/any.pbenum.dart

@@ -0,0 +1,11 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/any.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+

+ 28 - 0
app_business/lib/generated/google/protobuf/any.pbjson.dart

@@ -0,0 +1,28 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/any.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:convert' as $convert;
+import 'dart:core' as $core;
+import 'dart:typed_data' as $typed_data;
+
+@$core.Deprecated('Use anyDescriptor instead')
+const Any$json = {
+  '1': 'Any',
+  '2': [
+    {'1': 'type_url', '3': 1, '4': 1, '5': 9, '10': 'typeUrl'},
+    {'1': 'value', '3': 2, '4': 1, '5': 12, '10': 'value'},
+  ],
+};
+
+/// Descriptor for `Any`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List anyDescriptor = $convert.base64Decode(
+    'CgNBbnkSGQoIdHlwZV91cmwYASABKAlSB3R5cGVVcmwSFAoFdmFsdWUYAiABKAxSBXZhbHVl');
+

+ 151 - 0
app_business/lib/generated/google/protobuf/duration.pb.dart

@@ -0,0 +1,151 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/duration.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+
+import 'package:fixnum/fixnum.dart' as $fixnum;
+import 'package:protobuf/protobuf.dart' as $pb;
+import 'package:protobuf/src/protobuf/mixins/well_known.dart' as $mixin;
+
+///  A Duration represents a signed, fixed-length span of time represented
+///  as a count of seconds and fractions of seconds at nanosecond
+///  resolution. It is independent of any calendar and concepts like "day"
+///  or "month". It is related to Timestamp in that the difference between
+///  two Timestamp values is a Duration and it can be added or subtracted
+///  from a Timestamp. Range is approximately +-10,000 years.
+///
+///  # Examples
+///
+///  Example 1: Compute Duration from two Timestamps in pseudo code.
+///
+///      Timestamp start = ...;
+///      Timestamp end = ...;
+///      Duration duration = ...;
+///
+///      duration.seconds = end.seconds - start.seconds;
+///      duration.nanos = end.nanos - start.nanos;
+///
+///      if (duration.seconds < 0 && duration.nanos > 0) {
+///        duration.seconds += 1;
+///        duration.nanos -= 1000000000;
+///      } else if (duration.seconds > 0 && duration.nanos < 0) {
+///        duration.seconds -= 1;
+///        duration.nanos += 1000000000;
+///      }
+///
+///  Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+///
+///      Timestamp start = ...;
+///      Duration duration = ...;
+///      Timestamp end = ...;
+///
+///      end.seconds = start.seconds + duration.seconds;
+///      end.nanos = start.nanos + duration.nanos;
+///
+///      if (end.nanos < 0) {
+///        end.seconds -= 1;
+///        end.nanos += 1000000000;
+///      } else if (end.nanos >= 1000000000) {
+///        end.seconds += 1;
+///        end.nanos -= 1000000000;
+///      }
+///
+///  Example 3: Compute Duration from datetime.timedelta in Python.
+///
+///      td = datetime.timedelta(days=3, minutes=10)
+///      duration = Duration()
+///      duration.FromTimedelta(td)
+///
+///  # JSON Mapping
+///
+///  In JSON format, the Duration type is encoded as a string rather than an
+///  object, where the string ends in the suffix "s" (indicating seconds) and
+///  is preceded by the number of seconds, with nanoseconds expressed as
+///  fractional seconds. For example, 3 seconds with 0 nanoseconds should be
+///  encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
+///  be expressed in JSON format as "3.000000001s", and 3 seconds and 1
+///  microsecond should be expressed in JSON format as "3.000001s".
+class Duration extends $pb.GeneratedMessage with $mixin.DurationMixin {
+  factory Duration({
+    $fixnum.Int64? seconds,
+    $core.int? nanos,
+  }) {
+    final $result = create();
+    if (seconds != null) {
+      $result.seconds = seconds;
+    }
+    if (nanos != null) {
+      $result.nanos = nanos;
+    }
+    return $result;
+  }
+  Duration._() : super();
+  factory Duration.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory Duration.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Duration', package: const $pb.PackageName(_omitMessageNames ? '' : 'google.protobuf'), createEmptyInstance: create, toProto3Json: $mixin.DurationMixin.toProto3JsonHelper, fromProto3Json: $mixin.DurationMixin.fromProto3JsonHelper)
+    ..aInt64(1, _omitFieldNames ? '' : 'seconds')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'nanos', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  Duration clone() => Duration()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  Duration copyWith(void Function(Duration) updates) => super.copyWith((message) => updates(message as Duration)) as Duration;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static Duration create() => Duration._();
+  Duration createEmptyInstance() => create();
+  static $pb.PbList<Duration> createRepeated() => $pb.PbList<Duration>();
+  @$core.pragma('dart2js:noInline')
+  static Duration getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Duration>(create);
+  static Duration? _defaultInstance;
+
+  /// Signed seconds of the span of time. Must be from -315,576,000,000
+  /// to +315,576,000,000 inclusive. Note: these bounds are computed from:
+  /// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get seconds => $_getI64(0);
+  @$pb.TagNumber(1)
+  set seconds($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasSeconds() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearSeconds() => clearField(1);
+
+  /// Signed fractions of a second at nanosecond resolution of the span
+  /// of time. Durations less than one second are represented with a 0
+  /// `seconds` field and a positive or negative `nanos` field. For durations
+  /// of one second or more, a non-zero value for the `nanos` field must be
+  /// of the same sign as the `seconds` field. Must be from -999,999,999
+  /// to +999,999,999 inclusive.
+  @$pb.TagNumber(2)
+  $core.int get nanos => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set nanos($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasNanos() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearNanos() => clearField(2);
+}
+
+
+const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
+const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

+ 11 - 0
app_business/lib/generated/google/protobuf/duration.pbenum.dart

@@ -0,0 +1,11 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/duration.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+

+ 29 - 0
app_business/lib/generated/google/protobuf/duration.pbjson.dart

@@ -0,0 +1,29 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/duration.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:convert' as $convert;
+import 'dart:core' as $core;
+import 'dart:typed_data' as $typed_data;
+
+@$core.Deprecated('Use durationDescriptor instead')
+const Duration$json = {
+  '1': 'Duration',
+  '2': [
+    {'1': 'seconds', '3': 1, '4': 1, '5': 3, '10': 'seconds'},
+    {'1': 'nanos', '3': 2, '4': 1, '5': 5, '10': 'nanos'},
+  ],
+};
+
+/// Descriptor for `Duration`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List durationDescriptor = $convert.base64Decode(
+    'CghEdXJhdGlvbhIYCgdzZWNvbmRzGAEgASgDUgdzZWNvbmRzEhQKBW5hbm9zGAIgASgFUgVuYW'
+    '5vcw==');
+

+ 188 - 0
app_business/lib/generated/google/protobuf/timestamp.pb.dart

@@ -0,0 +1,188 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/timestamp.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+
+import 'package:fixnum/fixnum.dart' as $fixnum;
+import 'package:protobuf/protobuf.dart' as $pb;
+import 'package:protobuf/src/protobuf/mixins/well_known.dart' as $mixin;
+
+///  A Timestamp represents a point in time independent of any time zone or local
+///  calendar, encoded as a count of seconds and fractions of seconds at
+///  nanosecond resolution. The count is relative to an epoch at UTC midnight on
+///  January 1, 1970, in the proleptic Gregorian calendar which extends the
+///  Gregorian calendar backwards to year one.
+///
+///  All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
+///  second table is needed for interpretation, using a [24-hour linear
+///  smear](https://developers.google.com/time/smear).
+///
+///  The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
+///  restricting to that range, we ensure that we can convert to and from [RFC
+///  3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
+///
+///  # Examples
+///
+///  Example 1: Compute Timestamp from POSIX `time()`.
+///
+///      Timestamp timestamp;
+///      timestamp.set_seconds(time(NULL));
+///      timestamp.set_nanos(0);
+///
+///  Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+///
+///      struct timeval tv;
+///      gettimeofday(&tv, NULL);
+///
+///      Timestamp timestamp;
+///      timestamp.set_seconds(tv.tv_sec);
+///      timestamp.set_nanos(tv.tv_usec * 1000);
+///
+///  Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+///
+///      FILETIME ft;
+///      GetSystemTimeAsFileTime(&ft);
+///      UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+///
+///      // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
+///      // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
+///      Timestamp timestamp;
+///      timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
+///      timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+///
+///  Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+///
+///      long millis = System.currentTimeMillis();
+///
+///      Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
+///          .setNanos((int) ((millis % 1000) * 1000000)).build();
+///
+///  Example 5: Compute Timestamp from Java `Instant.now()`.
+///
+///      Instant now = Instant.now();
+///
+///      Timestamp timestamp =
+///          Timestamp.newBuilder().setSeconds(now.getEpochSecond())
+///              .setNanos(now.getNano()).build();
+///
+///  Example 6: Compute Timestamp from current time in Python.
+///
+///      timestamp = Timestamp()
+///      timestamp.GetCurrentTime()
+///
+///  # JSON Mapping
+///
+///  In JSON format, the Timestamp type is encoded as a string in the
+///  [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
+///  format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
+///  where {year} is always expressed using four digits while {month}, {day},
+///  {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
+///  seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
+///  are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
+///  is required. A proto3 JSON serializer should always use UTC (as indicated by
+///  "Z") when printing the Timestamp type and a proto3 JSON parser should be
+///  able to accept both UTC and other timezones (as indicated by an offset).
+///
+///  For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
+///  01:30 UTC on January 15, 2017.
+///
+///  In JavaScript, one can convert a Date object to this format using the
+///  standard
+///  [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
+///  method. In Python, a standard `datetime.datetime` object can be converted
+///  to this format using
+///  [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
+///  the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
+///  the Joda Time's [`ISODateTimeFormat.dateTime()`](
+///  http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
+///  ) to obtain a formatter capable of generating timestamps in this format.
+class Timestamp extends $pb.GeneratedMessage with $mixin.TimestampMixin {
+  factory Timestamp({
+    $fixnum.Int64? seconds,
+    $core.int? nanos,
+  }) {
+    final $result = create();
+    if (seconds != null) {
+      $result.seconds = seconds;
+    }
+    if (nanos != null) {
+      $result.nanos = nanos;
+    }
+    return $result;
+  }
+  Timestamp._() : super();
+  factory Timestamp.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
+  factory Timestamp.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Timestamp', package: const $pb.PackageName(_omitMessageNames ? '' : 'google.protobuf'), createEmptyInstance: create, toProto3Json: $mixin.TimestampMixin.toProto3JsonHelper, fromProto3Json: $mixin.TimestampMixin.fromProto3JsonHelper)
+    ..aInt64(1, _omitFieldNames ? '' : 'seconds')
+    ..a<$core.int>(2, _omitFieldNames ? '' : 'nanos', $pb.PbFieldType.O3)
+    ..hasRequiredFields = false
+  ;
+
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
+  'Will be removed in next major version')
+  Timestamp clone() => Timestamp()..mergeFromMessage(this);
+  @$core.Deprecated(
+  'Using this can add significant overhead to your binary. '
+  'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
+  'Will be removed in next major version')
+  Timestamp copyWith(void Function(Timestamp) updates) => super.copyWith((message) => updates(message as Timestamp)) as Timestamp;
+
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static Timestamp create() => Timestamp._();
+  Timestamp createEmptyInstance() => create();
+  static $pb.PbList<Timestamp> createRepeated() => $pb.PbList<Timestamp>();
+  @$core.pragma('dart2js:noInline')
+  static Timestamp getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Timestamp>(create);
+  static Timestamp? _defaultInstance;
+
+  /// Represents seconds of UTC time since Unix epoch
+  /// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
+  /// 9999-12-31T23:59:59Z inclusive.
+  @$pb.TagNumber(1)
+  $fixnum.Int64 get seconds => $_getI64(0);
+  @$pb.TagNumber(1)
+  set seconds($fixnum.Int64 v) { $_setInt64(0, v); }
+  @$pb.TagNumber(1)
+  $core.bool hasSeconds() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearSeconds() => clearField(1);
+
+  /// Non-negative fractions of a second at nanosecond resolution. Negative
+  /// second values with fractions must still have non-negative nanos values
+  /// that count forward in time. Must be from 0 to 999,999,999
+  /// inclusive.
+  @$pb.TagNumber(2)
+  $core.int get nanos => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set nanos($core.int v) { $_setSignedInt32(1, v); }
+  @$pb.TagNumber(2)
+  $core.bool hasNanos() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearNanos() => clearField(2);
+  /// Creates a new instance from [dateTime].
+  ///
+  /// Time zone information will not be preserved.
+  static Timestamp fromDateTime($core.DateTime dateTime) {
+    final result = create();
+    $mixin.TimestampMixin.setFromDateTime(result, dateTime);
+    return result;
+  }
+}
+
+
+const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
+const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

+ 11 - 0
app_business/lib/generated/google/protobuf/timestamp.pbenum.dart

@@ -0,0 +1,11 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/timestamp.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+

+ 29 - 0
app_business/lib/generated/google/protobuf/timestamp.pbjson.dart

@@ -0,0 +1,29 @@
+//
+//  Generated code. Do not modify.
+//  source: google/protobuf/timestamp.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:convert' as $convert;
+import 'dart:core' as $core;
+import 'dart:typed_data' as $typed_data;
+
+@$core.Deprecated('Use timestampDescriptor instead')
+const Timestamp$json = {
+  '1': 'Timestamp',
+  '2': [
+    {'1': 'seconds', '3': 1, '4': 1, '5': 3, '10': 'seconds'},
+    {'1': 'nanos', '3': 2, '4': 1, '5': 5, '10': 'nanos'},
+  ],
+};
+
+/// Descriptor for `Timestamp`. Decode as a `google.protobuf.DescriptorProto`.
+final $typed_data.Uint8List timestampDescriptor = $convert.base64Decode(
+    'CglUaW1lc3RhbXASGAoHc2Vjb25kcxgBIAEoA1IHc2Vjb25kcxIUCgVuYW5vcxgCIAEoBVIFbm'
+    'Fub3M=');
+

+ 13 - 0
app_business/lib/generated/track_offical.pb.dart

@@ -0,0 +1,13 @@
+//
+//  Generated code. Do not modify.
+//  source: track_offical.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:core' as $core;
+

+ 11 - 0
app_business/lib/generated/track_offical.pbenum.dart

@@ -0,0 +1,11 @@
+//
+//  Generated code. Do not modify.
+//  source: track_offical.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+

+ 219 - 0
app_business/lib/generated/track_offical.pbgrpc.dart

@@ -0,0 +1,219 @@
+//
+//  Generated code. Do not modify.
+//  source: track_offical.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:async' as $async;
+import 'dart:core' as $core;
+
+import 'package:grpc/service_api.dart' as $grpc;
+import 'package:protobuf/protobuf.dart' as $pb;
+
+import 'base.pb.dart' as $0;
+
+export 'track_offical.pb.dart';
+
+@$pb.GrpcServiceName('to.v1.ApiTo')
+class ApiToClient extends $grpc.Client {
+  static final _$toSendCodeToPhoneV2 = $grpc.ClientMethod<$0.ToSendCodeToPhoneRequestV2, $0.DefaultReply>(
+      '/to.v1.ApiTo/ToSendCodeToPhoneV2',
+      ($0.ToSendCodeToPhoneRequestV2 value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.DefaultReply.fromBuffer(value));
+  static final _$toGetSmsSendLeftTimeV2 = $grpc.ClientMethod<$0.GetSmsSendLeftTimeRequest, $0.GetSmsSendLeftTimeReply>(
+      '/to.v1.ApiTo/ToGetSmsSendLeftTimeV2',
+      ($0.GetSmsSendLeftTimeRequest value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.GetSmsSendLeftTimeReply.fromBuffer(value));
+  static final _$toSignInV2 = $grpc.ClientMethod<$0.ToSignInRequestV2, $0.SignInReply>(
+      '/to.v1.ApiTo/ToSignInV2',
+      ($0.ToSignInRequestV2 value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.SignInReply.fromBuffer(value));
+  static final _$toSignOutV2 = $grpc.ClientMethod<$0.DefaultRequest, $0.DefaultReply>(
+      '/to.v1.ApiTo/ToSignOutV2',
+      ($0.DefaultRequest value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.DefaultReply.fromBuffer(value));
+  static final _$toGetServerTime = $grpc.ClientMethod<$0.DefaultRequest, $0.GetServerTimeRp>(
+      '/to.v1.ApiTo/ToGetServerTime',
+      ($0.DefaultRequest value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.GetServerTimeRp.fromBuffer(value));
+  static final _$toGetUpdateVersion = $grpc.ClientMethod<$0.ToGetUpdateVersionRequest, $0.ToGetUpdateVersionReply>(
+      '/to.v1.ApiTo/ToGetUpdateVersion',
+      ($0.ToGetUpdateVersionRequest value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.ToGetUpdateVersionReply.fromBuffer(value));
+  static final _$toMapListV2 = $grpc.ClientMethod<$0.MapListRequestV2, $0.ToMapListReplyV2>(
+      '/to.v1.ApiTo/ToMapListV2',
+      ($0.MapListRequestV2 value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.ToMapListReplyV2.fromBuffer(value));
+  static final _$toMapDetailV2 = $grpc.ClientMethod<$0.IdRequest, $0.ToMapInfoV2>(
+      '/to.v1.ApiTo/ToMapDetailV2',
+      ($0.IdRequest value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.ToMapInfoV2.fromBuffer(value));
+  static final _$toGetBinaryByMd5 = $grpc.ClientMethod<$0.ToGetBinaryByMd5Request, $0.BinaryPartV2>(
+      '/to.v1.ApiTo/ToGetBinaryByMd5',
+      ($0.ToGetBinaryByMd5Request value) => value.writeToBuffer(),
+      ($core.List<$core.int> value) => $0.BinaryPartV2.fromBuffer(value));
+
+  ApiToClient($grpc.ClientChannel channel,
+      {$grpc.CallOptions? options,
+      $core.Iterable<$grpc.ClientInterceptor>? interceptors})
+      : super(channel, options: options,
+        interceptors: interceptors);
+
+  $grpc.ResponseFuture<$0.DefaultReply> toSendCodeToPhoneV2($0.ToSendCodeToPhoneRequestV2 request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toSendCodeToPhoneV2, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.GetSmsSendLeftTimeReply> toGetSmsSendLeftTimeV2($0.GetSmsSendLeftTimeRequest request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toGetSmsSendLeftTimeV2, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.SignInReply> toSignInV2($0.ToSignInRequestV2 request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toSignInV2, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.DefaultReply> toSignOutV2($0.DefaultRequest request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toSignOutV2, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.GetServerTimeRp> toGetServerTime($0.DefaultRequest request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toGetServerTime, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.ToGetUpdateVersionReply> toGetUpdateVersion($0.ToGetUpdateVersionRequest request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toGetUpdateVersion, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.ToMapListReplyV2> toMapListV2($0.MapListRequestV2 request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toMapListV2, request, options: options);
+  }
+
+  $grpc.ResponseFuture<$0.ToMapInfoV2> toMapDetailV2($0.IdRequest request, {$grpc.CallOptions? options}) {
+    return $createUnaryCall(_$toMapDetailV2, request, options: options);
+  }
+
+  $grpc.ResponseStream<$0.BinaryPartV2> toGetBinaryByMd5($0.ToGetBinaryByMd5Request request, {$grpc.CallOptions? options}) {
+    return $createStreamingCall(_$toGetBinaryByMd5, $async.Stream.fromIterable([request]), options: options);
+  }
+}
+
+@$pb.GrpcServiceName('to.v1.ApiTo')
+abstract class ApiToServiceBase extends $grpc.Service {
+  $core.String get $name => 'to.v1.ApiTo';
+
+  ApiToServiceBase() {
+    $addMethod($grpc.ServiceMethod<$0.ToSendCodeToPhoneRequestV2, $0.DefaultReply>(
+        'ToSendCodeToPhoneV2',
+        toSendCodeToPhoneV2_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.ToSendCodeToPhoneRequestV2.fromBuffer(value),
+        ($0.DefaultReply value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.GetSmsSendLeftTimeRequest, $0.GetSmsSendLeftTimeReply>(
+        'ToGetSmsSendLeftTimeV2',
+        toGetSmsSendLeftTimeV2_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.GetSmsSendLeftTimeRequest.fromBuffer(value),
+        ($0.GetSmsSendLeftTimeReply value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.ToSignInRequestV2, $0.SignInReply>(
+        'ToSignInV2',
+        toSignInV2_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.ToSignInRequestV2.fromBuffer(value),
+        ($0.SignInReply value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.DefaultRequest, $0.DefaultReply>(
+        'ToSignOutV2',
+        toSignOutV2_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.DefaultRequest.fromBuffer(value),
+        ($0.DefaultReply value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.DefaultRequest, $0.GetServerTimeRp>(
+        'ToGetServerTime',
+        toGetServerTime_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.DefaultRequest.fromBuffer(value),
+        ($0.GetServerTimeRp value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.ToGetUpdateVersionRequest, $0.ToGetUpdateVersionReply>(
+        'ToGetUpdateVersion',
+        toGetUpdateVersion_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.ToGetUpdateVersionRequest.fromBuffer(value),
+        ($0.ToGetUpdateVersionReply value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.MapListRequestV2, $0.ToMapListReplyV2>(
+        'ToMapListV2',
+        toMapListV2_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.MapListRequestV2.fromBuffer(value),
+        ($0.ToMapListReplyV2 value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.IdRequest, $0.ToMapInfoV2>(
+        'ToMapDetailV2',
+        toMapDetailV2_Pre,
+        false,
+        false,
+        ($core.List<$core.int> value) => $0.IdRequest.fromBuffer(value),
+        ($0.ToMapInfoV2 value) => value.writeToBuffer()));
+    $addMethod($grpc.ServiceMethod<$0.ToGetBinaryByMd5Request, $0.BinaryPartV2>(
+        'ToGetBinaryByMd5',
+        toGetBinaryByMd5_Pre,
+        false,
+        true,
+        ($core.List<$core.int> value) => $0.ToGetBinaryByMd5Request.fromBuffer(value),
+        ($0.BinaryPartV2 value) => value.writeToBuffer()));
+  }
+
+  $async.Future<$0.DefaultReply> toSendCodeToPhoneV2_Pre($grpc.ServiceCall call, $async.Future<$0.ToSendCodeToPhoneRequestV2> request) async {
+    return toSendCodeToPhoneV2(call, await request);
+  }
+
+  $async.Future<$0.GetSmsSendLeftTimeReply> toGetSmsSendLeftTimeV2_Pre($grpc.ServiceCall call, $async.Future<$0.GetSmsSendLeftTimeRequest> request) async {
+    return toGetSmsSendLeftTimeV2(call, await request);
+  }
+
+  $async.Future<$0.SignInReply> toSignInV2_Pre($grpc.ServiceCall call, $async.Future<$0.ToSignInRequestV2> request) async {
+    return toSignInV2(call, await request);
+  }
+
+  $async.Future<$0.DefaultReply> toSignOutV2_Pre($grpc.ServiceCall call, $async.Future<$0.DefaultRequest> request) async {
+    return toSignOutV2(call, await request);
+  }
+
+  $async.Future<$0.GetServerTimeRp> toGetServerTime_Pre($grpc.ServiceCall call, $async.Future<$0.DefaultRequest> request) async {
+    return toGetServerTime(call, await request);
+  }
+
+  $async.Future<$0.ToGetUpdateVersionReply> toGetUpdateVersion_Pre($grpc.ServiceCall call, $async.Future<$0.ToGetUpdateVersionRequest> request) async {
+    return toGetUpdateVersion(call, await request);
+  }
+
+  $async.Future<$0.ToMapListReplyV2> toMapListV2_Pre($grpc.ServiceCall call, $async.Future<$0.MapListRequestV2> request) async {
+    return toMapListV2(call, await request);
+  }
+
+  $async.Future<$0.ToMapInfoV2> toMapDetailV2_Pre($grpc.ServiceCall call, $async.Future<$0.IdRequest> request) async {
+    return toMapDetailV2(call, await request);
+  }
+
+  $async.Stream<$0.BinaryPartV2> toGetBinaryByMd5_Pre($grpc.ServiceCall call, $async.Future<$0.ToGetBinaryByMd5Request> request) async* {
+    yield* toGetBinaryByMd5(call, await request);
+  }
+
+  $async.Future<$0.DefaultReply> toSendCodeToPhoneV2($grpc.ServiceCall call, $0.ToSendCodeToPhoneRequestV2 request);
+  $async.Future<$0.GetSmsSendLeftTimeReply> toGetSmsSendLeftTimeV2($grpc.ServiceCall call, $0.GetSmsSendLeftTimeRequest request);
+  $async.Future<$0.SignInReply> toSignInV2($grpc.ServiceCall call, $0.ToSignInRequestV2 request);
+  $async.Future<$0.DefaultReply> toSignOutV2($grpc.ServiceCall call, $0.DefaultRequest request);
+  $async.Future<$0.GetServerTimeRp> toGetServerTime($grpc.ServiceCall call, $0.DefaultRequest request);
+  $async.Future<$0.ToGetUpdateVersionReply> toGetUpdateVersion($grpc.ServiceCall call, $0.ToGetUpdateVersionRequest request);
+  $async.Future<$0.ToMapListReplyV2> toMapListV2($grpc.ServiceCall call, $0.MapListRequestV2 request);
+  $async.Future<$0.ToMapInfoV2> toMapDetailV2($grpc.ServiceCall call, $0.IdRequest request);
+  $async.Stream<$0.BinaryPartV2> toGetBinaryByMd5($grpc.ServiceCall call, $0.ToGetBinaryByMd5Request request);
+}

+ 15 - 0
app_business/lib/generated/track_offical.pbjson.dart

@@ -0,0 +1,15 @@
+//
+//  Generated code. Do not modify.
+//  source: track_offical.proto
+//
+// @dart = 2.12
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names, library_prefixes
+// ignore_for_file: non_constant_identifier_names, prefer_final_fields
+// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+
+import 'dart:convert' as $convert;
+import 'dart:core' as $core;
+import 'dart:typed_data' as $typed_data;
+

+ 5 - 0
app_business/lib/service/abase.dart

@@ -0,0 +1,5 @@
+export 'package:get/get.dart';
+
+abstract class IService {
+  Future<void> init();
+}

+ 15 - 0
app_business/lib/service/all_init.dart

@@ -0,0 +1,15 @@
+import 'package:app_business/service/api.dart';
+import 'package:app_business/service/app.dart';
+
+import 'abase.dart';
+
+Future<void> allInit() async {
+  final services = <IService>[
+    Get.put<AppService>(AppService()),
+    Get.put<ApiService>(ApiService()),
+  ];
+
+  for (var service in services) {
+    await service.init();
+  }
+}

+ 132 - 0
app_business/lib/service/api.dart

@@ -0,0 +1,132 @@
+import 'dart:async';
+import 'dart:typed_data';
+
+import 'package:app_business/app_config.dart';
+import 'package:app_business/generated/base.pb.dart' as pb;
+import 'package:app_business/generated/track_offical.pbgrpc.dart' as pb;
+import 'package:app_business/service/app.dart';
+import 'package:grpc/grpc.dart';
+import 'package:track_common/track_common.dart';
+
+import 'abase.dart';
+
+typedef SmsType = pb.SmsType;
+
+class ApiService extends IService {
+  ClientChannel? channel;
+
+  @override
+  Future<void> init() async {
+    channel = _newChannel();
+  }
+
+  ClientChannel _newChannel() {
+    return ClientChannel(
+      AppConfig.apiHost,
+      port: AppConfig.apiPort,
+      options: const ChannelOptions(credentials: ChannelCredentials.secure()
+          // ChannelCredentials.insecure()
+          ),
+    );
+  }
+
+  pb.ApiToClient get stub {
+    return _newStub(timeout: 10.seconds);
+  }
+
+  pb.ApiToClient _newStub({Duration? timeout, ClientChannel? channel}) {
+    if (this.channel == null) {
+      throw Exception('$runtimeType 未初始化');
+    }
+    final metadata = <String, String>{};
+    metadata['version'] = _appVersion;
+    if (token != null) {
+      metadata['token'] = token!;
+    }
+    // debug("token: $token");
+
+    return pb.ApiToClient(channel ?? this.channel!,
+        options: CallOptions(
+          metadata: metadata,
+          timeout: timeout,
+        ));
+  }
+
+  String get _appVersion => Get.find<AppService>().appVersion;
+
+  set token(String? v) {
+    Get.find<AppService>().token.val = v ?? '';
+  }
+
+  String? get token {
+    final app = Get.find<AppService>();
+    final token = app.token.val;
+    if (token.isEmpty) {
+      return null;
+    }
+    return token;
+  }
+
+  // 获取短信验证码
+  Future<void> authSendCodeToPhone(String phone, SmsType smsType) async {
+    info('authSendCodeToPhone [$phone]');
+    await stub.toSendCodeToPhoneV2(pb.ToSendCodeToPhoneRequestV2()
+      ..phone = phone
+      ..smsType = smsType);
+  }
+
+  // 场控端_登录
+  Future<void> signIn(String userCode, String password, String ip) async {
+    final r = await stub.toSignInV2(pb.ToSignInRequestV2()
+      ..userCode = userCode
+      ..password = password
+      ..ip = ip);
+    token = r.token;
+
+    debug('sign in success: $token');
+  }
+
+  // 场控端_登出
+  void signOut() {
+    stub.toSignOutV2(pb.DefaultRequest());
+    token = null;
+  }
+
+  Future<Duration> getSmsSendLeftTime(String phone) async {
+    final r = await stub
+        .toGetSmsSendLeftTimeV2(pb.GetSmsSendLeftTimeRequest()..phone = phone);
+    info('getSmsSendLeftTime: $phone - ${r.second}s');
+    return r.second.seconds;
+  }
+
+  Future<BinReader> getBinReaderByMd5(Uint8List md5) async {
+    final stream =
+        stub.toGetBinaryByMd5(pb.ToGetBinaryByMd5Request()..md5 = md5);
+    final controller = StreamController<List<int>>();
+    controller.onCancel = () {
+      stream.cancel();
+    };
+
+    Future<void> rcv() async {
+      try {
+        await for (final one in stream) {
+          controller.add(one.data);
+        }
+      } finally {
+        controller.close();
+        stream.cancel();
+      }
+    }
+
+    rcv();
+    stream.headers.then((value) => debug(value));
+    final headers = await stream.headers;
+    final lenStr = headers['all-length']!;
+    final length = int.parse(lenStr);
+    final nonce = headers['nonce']!;
+    final ext = headers['ext']!;
+
+    return BinReader(
+        data: controller.stream, length: length, ext: ext, nonce: nonce);
+  }
+}

+ 17 - 0
app_business/lib/service/app.dart

@@ -0,0 +1,17 @@
+import 'package:get_storage/get_storage.dart';
+import 'package:package_info_plus/package_info_plus.dart';
+
+import 'abase.dart';
+
+class AppService extends IService {
+  late String appVersion;
+  late final ReadWriteValue<String> token;
+
+  @override
+  Future<void> init() async {
+    await GetStorage.init();
+    token = ''.val("token");
+    final packageInfo = await PackageInfo.fromPlatform();
+    appVersion = packageInfo.version;
+  }
+}

+ 2 - 1
app_business/lib/view/all_init.dart

@@ -1,9 +1,10 @@
+import 'package:app_business/service/all_init.dart' as a;
 import 'package:track_common/view.dart';
 
 class InitControllerImp extends InitController {
   @override
   Future<void> allInit() async {
-    return;
+    return a.allInit();
   }
 
   @override

+ 7 - 6
app_business/lib/view/login.dart

@@ -1,21 +1,22 @@
+import 'package:app_business/service/api.dart';
 import 'package:get/get.dart';
 import 'package:track_common/view.dart';
 
 class LoginControllerImp extends LoginController {
+  final _api = Get.find<ApiService>();
+
   @override
   Future<void> authSendCodeToPhone(String phone) async {
-    // TODO: implement authSendCodeToPhone
-    throw UnimplementedError();
+    return _api.authSendCodeToPhone(phone, SmsType.Login);
   }
 
   @override
-  Future<Duration> getCodeLifeTime(String phone) async {
-    return 0.seconds;
+  Future<Duration> getCodeLifeTime(String phone) {
+    return _api.getSmsSendLeftTime(phone);
   }
 
   @override
   Future<void> signIn(String phone, String code) async {
-    // TODO: implement signIn
-    throw UnimplementedError();
+    return _api.signIn(phone, code, '');
   }
 }

+ 2 - 0
app_business/macos/Flutter/GeneratedPluginRegistrant.swift

@@ -6,11 +6,13 @@ import FlutterMacOS
 import Foundation
 
 import common_pub
+import package_info_plus
 import path_provider_foundation
 import rive_common
 
 func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
   CommonPubPlugin.register(with: registry.registrar(forPlugin: "CommonPubPlugin"))
+  FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
   RivePlugin.register(with: registry.registrar(forPlugin: "RivePlugin"))
 }

+ 25 - 1
app_business/pubspec.lock

@@ -196,6 +196,14 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.6.6"
+  get_storage:
+    dependency: "direct main"
+    description:
+      name: get_storage
+      sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.1.1"
   googleapis_auth:
     dependency: transitive
     description:
@@ -213,7 +221,7 @@ packages:
     source: hosted
     version: "2.3.1"
   grpc:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: grpc
       sha256: e93ee3bce45c134bf44e9728119102358c7cd69de7832d9a874e2e74eb8cab40
@@ -316,6 +324,22 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.0.4"
+  package_info_plus:
+    dependency: "direct main"
+    description:
+      name: package_info_plus
+      sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "4.2.0"
+  package_info_plus_platform_interface:
+    dependency: transitive
+    description:
+      name: package_info_plus_platform_interface
+      sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.1"
   path:
     dependency: transitive
     description:

+ 3 - 0
app_business/pubspec.yaml

@@ -43,6 +43,9 @@ dependencies:
     sdk: flutter
   intl: any
   rive: any
+  grpc: ^3.2.4
+  get_storage: ^2.1.1
+  package_info_plus: ^4.2.0
 
 dev_dependencies:
   flutter_test:

+ 1 - 0
libs/track_common/lib/track_common.dart

@@ -1,3 +1,4 @@
 export 'package:common_pub/common_pub.dart';
+export 'package:common_pub/model/game_map.dart';
 
 export 'styles/theme.dart';