diff --git a/csst_dfs_proto/facility/level0/level0_pb2.py b/csst_dfs_proto/facility/level0/level0_pb2.py
index f7e8df82db89c412654d3501235007b5628c7753..0eecbbe88b1af176388b02c84f8eba5d2b501ee0 100644
--- a/csst_dfs_proto/facility/level0/level0_pb2.py
+++ b/csst_dfs_proto/facility/level0/level0_pb2.py
@@ -19,7 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   package='dfs.facility.level0',
   syntax='proto3',
   serialized_options=b'Z$cnlab.net/csst/proto/facility/level0',
-  serialized_pb=b'\n\x1c\x66\x61\x63ility/level0/level0.proto\x12\x13\x64\x66s.facility.level0\x1a\x12\x63ommon/error.proto\"\xba\x02\n\x0cLevel0Record\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x0e\n\x06obs_id\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65tector_no\x18\x04 \x01(\t\x12\x10\n\x08obs_type\x18\x05 \x01(\t\x12\x10\n\x08obs_time\x18\x06 \x01(\t\x12\x10\n\x08\x65xp_time\x18\x07 \x01(\x02\x12\x1a\n\x12\x64\x65tector_status_id\x18\x08 \x01(\x03\x12\x10\n\x08\x66ilename\x18\t \x01(\t\x12\x11\n\tfile_path\x18\n \x01(\t\x12\x12\n\nqc0_status\x18\x0b \x01(\x05\x12\x10\n\x08qc0_time\x18\x0c \x01(\t\x12\x12\n\nprc_status\x18\r \x01(\x05\x12\x10\n\x08prc_time\x18\x0e \x01(\t\x12\x13\n\x0b\x63reate_time\x18\x0f \x01(\t\x12\x0e\n\x06header\x18\x10 \x01(\t\"\xa8\x03\n\x11\x46indLevel0DataReq\x12\x0e\n\x06obs_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65tector_no\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\x12\x16\n\x0e\x65xp_time_start\x18\x04 \x01(\t\x12\x14\n\x0c\x65xp_time_end\x18\x05 \x01(\t\x12\x12\n\nqc0_status\x18\x06 \x01(\x05\x12\x12\n\nprc_status\x18\x07 \x01(\x05\x12\x11\n\tfile_name\x18\x08 \x01(\t\x12\x0e\n\x06ra_obj\x18\t \x01(\x02\x12\x0f\n\x07\x64\x65\x63_obj\x18\n \x01(\x02\x12\x0e\n\x06radius\x18\x0b \x01(\x02\x12\x13\n\x0bobject_name\x18\x0c \x01(\t\x12\x0f\n\x07version\x18\r \x01(\t\x12\r\n\x05limit\x18\x0e \x01(\x05\x12U\n\x10other_conditions\x18\x0f \x03(\x0b\x32;.dfs.facility.level0.FindLevel0DataReq.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x12\x46indLevel0DataResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12\x32\n\x07records\x18\x04 \x03(\x0b\x32!.dfs.facility.level0.Level0Record\"C\n\x10GetLevel0DataReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\"F\n\x11GetLevel0DataResp\x12\x31\n\x06record\x18\x01 \x01(\x0b\x32!.dfs.facility.level0.Level0Record\"G\n\x12WriteLevel0DataReq\x12\x31\n\x06record\x18\x01 \x01(\x0b\x32!.dfs.facility.level0.Level0Record\"w\n\x13WriteLevel0DataResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12\x31\n\x06record\x18\x03 \x01(\x0b\x32!.dfs.facility.level0.Level0Record\"U\n\x12UpdateQc0StatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\x05\"D\n\x13UpdateQc0StatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\"V\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\xef\x03\n\tLevel0Srv\x12Y\n\x04\x46ind\x12&.dfs.facility.level0.FindLevel0DataReq\x1a\'.dfs.facility.level0.FindLevel0DataResp\"\x00\x12V\n\x03Get\x12%.dfs.facility.level0.GetLevel0DataReq\x1a&.dfs.facility.level0.GetLevel0DataResp\"\x00\x12\\\n\x05Write\x12\'.dfs.facility.level0.WriteLevel0DataReq\x1a(.dfs.facility.level0.WriteLevel0DataResp\"\x00\x12\x66\n\x0fUpdateQc0Status\x12\'.dfs.facility.level0.UpdateQc0StatusReq\x1a(.dfs.facility.level0.UpdateQc0StatusResp\"\x00\x12i\n\x10UpdateProcStatus\x12(.dfs.facility.level0.UpdateProcStatusReq\x1a).dfs.facility.level0.UpdateProcStatusResp\"\x00\x42&Z$cnlab.net/csst/proto/facility/level0b\x06proto3'
+  serialized_pb=b'\n\x1c\x66\x61\x63ility/level0/level0.proto\x12\x13\x64\x66s.facility.level0\x1a\x12\x63ommon/error.proto\"\xca\x02\n\x0cLevel0Record\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x0e\n\x06obs_id\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65tector_no\x18\x04 \x01(\t\x12\x10\n\x08obs_type\x18\x05 \x01(\t\x12\x10\n\x08obs_time\x18\x06 \x01(\t\x12\x10\n\x08\x65xp_time\x18\x07 \x01(\x02\x12\x0e\n\x06\x66ilter\x18\x08 \x01(\t\x12\x1a\n\x12\x64\x65tector_status_id\x18\t \x01(\x03\x12\x10\n\x08\x66ilename\x18\n \x01(\t\x12\x11\n\tfile_path\x18\x0b \x01(\t\x12\x12\n\nqc0_status\x18\x0c \x01(\x05\x12\x10\n\x08qc0_time\x18\r \x01(\t\x12\x12\n\nprc_status\x18\x0e \x01(\x05\x12\x10\n\x08prc_time\x18\x0f \x01(\t\x12\x13\n\x0b\x63reate_time\x18\x10 \x01(\t\x12\x0e\n\x06header\x18\x11 \x01(\t\"\xa8\x03\n\x11\x46indLevel0DataReq\x12\x0e\n\x06obs_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65tector_no\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\x12\x16\n\x0e\x65xp_time_start\x18\x04 \x01(\t\x12\x14\n\x0c\x65xp_time_end\x18\x05 \x01(\t\x12\x12\n\nqc0_status\x18\x06 \x01(\x05\x12\x12\n\nprc_status\x18\x07 \x01(\x05\x12\x11\n\tfile_name\x18\x08 \x01(\t\x12\x0e\n\x06ra_obj\x18\t \x01(\x02\x12\x0f\n\x07\x64\x65\x63_obj\x18\n \x01(\x02\x12\x0e\n\x06radius\x18\x0b \x01(\x02\x12\x13\n\x0bobject_name\x18\x0c \x01(\t\x12\x0f\n\x07version\x18\r \x01(\t\x12\r\n\x05limit\x18\x0e \x01(\x05\x12U\n\x10other_conditions\x18\x0f \x03(\x0b\x32;.dfs.facility.level0.FindLevel0DataReq.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x12\x46indLevel0DataResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12\x32\n\x07records\x18\x04 \x03(\x0b\x32!.dfs.facility.level0.Level0Record\"&\n\x11\x46indByBrickIdsReq\x12\x11\n\tbrick_ids\x18\x01 \x03(\x05\"w\n\x12\x46indByBrickIdsResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12\x32\n\x07records\x18\x03 \x03(\x0b\x32!.dfs.facility.level0.Level0Record\"C\n\x10GetLevel0DataReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\"F\n\x11GetLevel0DataResp\x12\x31\n\x06record\x18\x01 \x01(\x0b\x32!.dfs.facility.level0.Level0Record\"G\n\x12WriteLevel0DataReq\x12\x31\n\x06record\x18\x01 \x01(\x0b\x32!.dfs.facility.level0.Level0Record\"w\n\x13WriteLevel0DataResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12\x31\n\x06record\x18\x03 \x01(\x0b\x32!.dfs.facility.level0.Level0Record\"U\n\x12UpdateQc0StatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\x05\"D\n\x13UpdateQc0StatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\"V\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x10\n\x08obs_type\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\xd4\x04\n\tLevel0Srv\x12Y\n\x04\x46ind\x12&.dfs.facility.level0.FindLevel0DataReq\x1a\'.dfs.facility.level0.FindLevel0DataResp\"\x00\x12\x63\n\x0e\x46indByBrickIds\x12&.dfs.facility.level0.FindByBrickIdsReq\x1a\'.dfs.facility.level0.FindByBrickIdsResp\"\x00\x12V\n\x03Get\x12%.dfs.facility.level0.GetLevel0DataReq\x1a&.dfs.facility.level0.GetLevel0DataResp\"\x00\x12\\\n\x05Write\x12\'.dfs.facility.level0.WriteLevel0DataReq\x1a(.dfs.facility.level0.WriteLevel0DataResp\"\x00\x12\x66\n\x0fUpdateQc0Status\x12\'.dfs.facility.level0.UpdateQc0StatusReq\x1a(.dfs.facility.level0.UpdateQc0StatusResp\"\x00\x12i\n\x10UpdateProcStatus\x12(.dfs.facility.level0.UpdateProcStatusReq\x1a).dfs.facility.level0.UpdateProcStatusResp\"\x00\x42&Z$cnlab.net/csst/proto/facility/level0b\x06proto3'
   ,
   dependencies=[common_dot_error__pb2.DESCRIPTOR,])
 
@@ -83,64 +83,71 @@ _LEVEL0RECORD = _descriptor.Descriptor(
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='detector_status_id', full_name='dfs.facility.level0.Level0Record.detector_status_id', index=7,
-      number=8, type=3, cpp_type=2, label=1,
+      name='filter', full_name='dfs.facility.level0.Level0Record.filter', index=7,
+      number=8, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='detector_status_id', full_name='dfs.facility.level0.Level0Record.detector_status_id', index=8,
+      number=9, type=3, cpp_type=2, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='filename', full_name='dfs.facility.level0.Level0Record.filename', index=8,
-      number=9, type=9, cpp_type=9, label=1,
+      name='filename', full_name='dfs.facility.level0.Level0Record.filename', index=9,
+      number=10, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='file_path', full_name='dfs.facility.level0.Level0Record.file_path', index=9,
-      number=10, type=9, cpp_type=9, label=1,
+      name='file_path', full_name='dfs.facility.level0.Level0Record.file_path', index=10,
+      number=11, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='qc0_status', full_name='dfs.facility.level0.Level0Record.qc0_status', index=10,
-      number=11, type=5, cpp_type=1, label=1,
+      name='qc0_status', full_name='dfs.facility.level0.Level0Record.qc0_status', index=11,
+      number=12, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='qc0_time', full_name='dfs.facility.level0.Level0Record.qc0_time', index=11,
-      number=12, type=9, cpp_type=9, label=1,
+      name='qc0_time', full_name='dfs.facility.level0.Level0Record.qc0_time', index=12,
+      number=13, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='prc_status', full_name='dfs.facility.level0.Level0Record.prc_status', index=12,
-      number=13, type=5, cpp_type=1, label=1,
+      name='prc_status', full_name='dfs.facility.level0.Level0Record.prc_status', index=13,
+      number=14, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='prc_time', full_name='dfs.facility.level0.Level0Record.prc_time', index=13,
-      number=14, type=9, cpp_type=9, label=1,
+      name='prc_time', full_name='dfs.facility.level0.Level0Record.prc_time', index=14,
+      number=15, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='create_time', full_name='dfs.facility.level0.Level0Record.create_time', index=14,
-      number=15, type=9, cpp_type=9, label=1,
+      name='create_time', full_name='dfs.facility.level0.Level0Record.create_time', index=15,
+      number=16, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='header', full_name='dfs.facility.level0.Level0Record.header', index=15,
-      number=16, type=9, cpp_type=9, label=1,
+      name='header', full_name='dfs.facility.level0.Level0Record.header', index=16,
+      number=17, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -158,7 +165,7 @@ _LEVEL0RECORD = _descriptor.Descriptor(
   oneofs=[
   ],
   serialized_start=74,
-  serialized_end=388,
+  serialized_end=404,
 )
 
 
@@ -195,8 +202,8 @@ _FINDLEVEL0DATAREQ_OTHERCONDITIONSENTRY = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=761,
-  serialized_end=815,
+  serialized_start=777,
+  serialized_end=831,
 )
 
 _FINDLEVEL0DATAREQ = _descriptor.Descriptor(
@@ -323,8 +330,8 @@ _FINDLEVEL0DATAREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=391,
-  serialized_end=815,
+  serialized_start=407,
+  serialized_end=831,
 )
 
 
@@ -375,8 +382,84 @@ _FINDLEVEL0DATARESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=818,
-  serialized_end=957,
+  serialized_start=834,
+  serialized_end=973,
+)
+
+
+_FINDBYBRICKIDSREQ = _descriptor.Descriptor(
+  name='FindByBrickIdsReq',
+  full_name='dfs.facility.level0.FindByBrickIdsReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='brick_ids', full_name='dfs.facility.level0.FindByBrickIdsReq.brick_ids', index=0,
+      number=1, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=975,
+  serialized_end=1013,
+)
+
+
+_FINDBYBRICKIDSRESP = _descriptor.Descriptor(
+  name='FindByBrickIdsResp',
+  full_name='dfs.facility.level0.FindByBrickIdsResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.facility.level0.FindByBrickIdsResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.facility.level0.FindByBrickIdsResp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='records', full_name='dfs.facility.level0.FindByBrickIdsResp.records', index=2,
+      number=3, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1015,
+  serialized_end=1134,
 )
 
 
@@ -420,8 +503,8 @@ _GETLEVEL0DATAREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=959,
-  serialized_end=1026,
+  serialized_start=1136,
+  serialized_end=1203,
 )
 
 
@@ -451,8 +534,8 @@ _GETLEVEL0DATARESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1028,
-  serialized_end=1098,
+  serialized_start=1205,
+  serialized_end=1275,
 )
 
 
@@ -482,8 +565,8 @@ _WRITELEVEL0DATAREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1100,
-  serialized_end=1171,
+  serialized_start=1277,
+  serialized_end=1348,
 )
 
 
@@ -527,8 +610,8 @@ _WRITELEVEL0DATARESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1173,
-  serialized_end=1292,
+  serialized_start=1350,
+  serialized_end=1469,
 )
 
 
@@ -579,8 +662,8 @@ _UPDATEQC0STATUSREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1294,
-  serialized_end=1379,
+  serialized_start=1471,
+  serialized_end=1556,
 )
 
 
@@ -617,8 +700,8 @@ _UPDATEQC0STATUSRESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1381,
-  serialized_end=1449,
+  serialized_start=1558,
+  serialized_end=1626,
 )
 
 
@@ -669,8 +752,8 @@ _UPDATEPROCSTATUSREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1451,
-  serialized_end=1537,
+  serialized_start=1628,
+  serialized_end=1714,
 )
 
 
@@ -707,14 +790,16 @@ _UPDATEPROCSTATUSRESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1539,
-  serialized_end=1608,
+  serialized_start=1716,
+  serialized_end=1785,
 )
 
 _FINDLEVEL0DATAREQ_OTHERCONDITIONSENTRY.containing_type = _FINDLEVEL0DATAREQ
 _FINDLEVEL0DATAREQ.fields_by_name['other_conditions'].message_type = _FINDLEVEL0DATAREQ_OTHERCONDITIONSENTRY
 _FINDLEVEL0DATARESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
 _FINDLEVEL0DATARESP.fields_by_name['records'].message_type = _LEVEL0RECORD
+_FINDBYBRICKIDSRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_FINDBYBRICKIDSRESP.fields_by_name['records'].message_type = _LEVEL0RECORD
 _GETLEVEL0DATARESP.fields_by_name['record'].message_type = _LEVEL0RECORD
 _WRITELEVEL0DATAREQ.fields_by_name['record'].message_type = _LEVEL0RECORD
 _WRITELEVEL0DATARESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
@@ -724,6 +809,8 @@ _UPDATEPROCSTATUSRESP.fields_by_name['error'].message_type = common_dot_error__p
 DESCRIPTOR.message_types_by_name['Level0Record'] = _LEVEL0RECORD
 DESCRIPTOR.message_types_by_name['FindLevel0DataReq'] = _FINDLEVEL0DATAREQ
 DESCRIPTOR.message_types_by_name['FindLevel0DataResp'] = _FINDLEVEL0DATARESP
+DESCRIPTOR.message_types_by_name['FindByBrickIdsReq'] = _FINDBYBRICKIDSREQ
+DESCRIPTOR.message_types_by_name['FindByBrickIdsResp'] = _FINDBYBRICKIDSRESP
 DESCRIPTOR.message_types_by_name['GetLevel0DataReq'] = _GETLEVEL0DATAREQ
 DESCRIPTOR.message_types_by_name['GetLevel0DataResp'] = _GETLEVEL0DATARESP
 DESCRIPTOR.message_types_by_name['WriteLevel0DataReq'] = _WRITELEVEL0DATAREQ
@@ -763,6 +850,20 @@ FindLevel0DataResp = _reflection.GeneratedProtocolMessageType('FindLevel0DataRes
   })
 _sym_db.RegisterMessage(FindLevel0DataResp)
 
+FindByBrickIdsReq = _reflection.GeneratedProtocolMessageType('FindByBrickIdsReq', (_message.Message,), {
+  'DESCRIPTOR' : _FINDBYBRICKIDSREQ,
+  '__module__' : 'facility.level0.level0_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.facility.level0.FindByBrickIdsReq)
+  })
+_sym_db.RegisterMessage(FindByBrickIdsReq)
+
+FindByBrickIdsResp = _reflection.GeneratedProtocolMessageType('FindByBrickIdsResp', (_message.Message,), {
+  'DESCRIPTOR' : _FINDBYBRICKIDSRESP,
+  '__module__' : 'facility.level0.level0_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.facility.level0.FindByBrickIdsResp)
+  })
+_sym_db.RegisterMessage(FindByBrickIdsResp)
+
 GetLevel0DataReq = _reflection.GeneratedProtocolMessageType('GetLevel0DataReq', (_message.Message,), {
   'DESCRIPTOR' : _GETLEVEL0DATAREQ,
   '__module__' : 'facility.level0.level0_pb2'
@@ -829,8 +930,8 @@ _LEVEL0SRV = _descriptor.ServiceDescriptor(
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
-  serialized_start=1611,
-  serialized_end=2106,
+  serialized_start=1788,
+  serialized_end=2384,
   methods=[
   _descriptor.MethodDescriptor(
     name='Find',
@@ -841,10 +942,19 @@ _LEVEL0SRV = _descriptor.ServiceDescriptor(
     output_type=_FINDLEVEL0DATARESP,
     serialized_options=None,
   ),
+  _descriptor.MethodDescriptor(
+    name='FindByBrickIds',
+    full_name='dfs.facility.level0.Level0Srv.FindByBrickIds',
+    index=1,
+    containing_service=None,
+    input_type=_FINDBYBRICKIDSREQ,
+    output_type=_FINDBYBRICKIDSRESP,
+    serialized_options=None,
+  ),
   _descriptor.MethodDescriptor(
     name='Get',
     full_name='dfs.facility.level0.Level0Srv.Get',
-    index=1,
+    index=2,
     containing_service=None,
     input_type=_GETLEVEL0DATAREQ,
     output_type=_GETLEVEL0DATARESP,
@@ -853,7 +963,7 @@ _LEVEL0SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='Write',
     full_name='dfs.facility.level0.Level0Srv.Write',
-    index=2,
+    index=3,
     containing_service=None,
     input_type=_WRITELEVEL0DATAREQ,
     output_type=_WRITELEVEL0DATARESP,
@@ -862,7 +972,7 @@ _LEVEL0SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='UpdateQc0Status',
     full_name='dfs.facility.level0.Level0Srv.UpdateQc0Status',
-    index=3,
+    index=4,
     containing_service=None,
     input_type=_UPDATEQC0STATUSREQ,
     output_type=_UPDATEQC0STATUSRESP,
@@ -871,7 +981,7 @@ _LEVEL0SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='UpdateProcStatus',
     full_name='dfs.facility.level0.Level0Srv.UpdateProcStatus',
-    index=4,
+    index=5,
     containing_service=None,
     input_type=_UPDATEPROCSTATUSREQ,
     output_type=_UPDATEPROCSTATUSRESP,
diff --git a/csst_dfs_proto/facility/level0/level0_pb2_grpc.py b/csst_dfs_proto/facility/level0/level0_pb2_grpc.py
index 9c337b1704f0cc73c90b3ccc60b38ce0f7d28086..655f7062b5572da79db57268cfb0674712ebeb57 100644
--- a/csst_dfs_proto/facility/level0/level0_pb2_grpc.py
+++ b/csst_dfs_proto/facility/level0/level0_pb2_grpc.py
@@ -18,6 +18,11 @@ class Level0SrvStub(object):
                 request_serializer=facility_dot_level0_dot_level0__pb2.FindLevel0DataReq.SerializeToString,
                 response_deserializer=facility_dot_level0_dot_level0__pb2.FindLevel0DataResp.FromString,
                 )
+        self.FindByBrickIds = channel.unary_unary(
+                '/dfs.facility.level0.Level0Srv/FindByBrickIds',
+                request_serializer=facility_dot_level0_dot_level0__pb2.FindByBrickIdsReq.SerializeToString,
+                response_deserializer=facility_dot_level0_dot_level0__pb2.FindByBrickIdsResp.FromString,
+                )
         self.Get = channel.unary_unary(
                 '/dfs.facility.level0.Level0Srv/Get',
                 request_serializer=facility_dot_level0_dot_level0__pb2.GetLevel0DataReq.SerializeToString,
@@ -49,6 +54,12 @@ class Level0SrvServicer(object):
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def FindByBrickIds(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
     def Get(self, request, context):
         """Missing associated documentation comment in .proto file"""
         context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -81,6 +92,11 @@ def add_Level0SrvServicer_to_server(servicer, server):
                     request_deserializer=facility_dot_level0_dot_level0__pb2.FindLevel0DataReq.FromString,
                     response_serializer=facility_dot_level0_dot_level0__pb2.FindLevel0DataResp.SerializeToString,
             ),
+            'FindByBrickIds': grpc.unary_unary_rpc_method_handler(
+                    servicer.FindByBrickIds,
+                    request_deserializer=facility_dot_level0_dot_level0__pb2.FindByBrickIdsReq.FromString,
+                    response_serializer=facility_dot_level0_dot_level0__pb2.FindByBrickIdsResp.SerializeToString,
+            ),
             'Get': grpc.unary_unary_rpc_method_handler(
                     servicer.Get,
                     request_deserializer=facility_dot_level0_dot_level0__pb2.GetLevel0DataReq.FromString,
@@ -127,6 +143,22 @@ class Level0Srv(object):
             options, channel_credentials,
             call_credentials, compression, wait_for_ready, timeout, metadata)
 
+    @staticmethod
+    def FindByBrickIds(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.facility.level0.Level0Srv/FindByBrickIds',
+            facility_dot_level0_dot_level0__pb2.FindByBrickIdsReq.SerializeToString,
+            facility_dot_level0_dot_level0__pb2.FindByBrickIdsResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
     @staticmethod
     def Get(request,
             target,
diff --git a/csst_dfs_proto/hstdm/level1/__init__.py b/csst_dfs_proto/hstdm/level1/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/csst_dfs_proto/hstdm/level1/level1_pb2.py b/csst_dfs_proto/hstdm/level1/level1_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..b345cc44cc1165afbcf18759550f466984b42622
--- /dev/null
+++ b/csst_dfs_proto/hstdm/level1/level1_pb2.py
@@ -0,0 +1,856 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: hstdm/level1/level1.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from ...common import error_pb2 as common_dot_error__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='hstdm/level1/level1.proto',
+  package='dfs.hstdm.level1',
+  syntax='proto3',
+  serialized_options=b'Z!cnlab.net/csst/proto/hstdm/level1',
+  serialized_pb=b'\n\x19hstdm/level1/level1.proto\x12\x10\x64\x66s.hstdm.level1\x1a\x12\x63ommon/error.proto\"\xe8\x02\n\x0cLevel1Record\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\x12\x12\n\ncor_sci_id\x18\x04 \x01(\x03\x12\x12\n\nprc_params\x18\x05 \x01(\t\x12\x10\n\x08\x66ilename\x18\x06 \x01(\t\x12\x11\n\tfile_path\x18\x07 \x01(\t\x12\x12\n\nqc1_status\x18\x08 \x01(\x05\x12\x10\n\x08qc1_time\x18\t \x01(\t\x12\x12\n\nprc_status\x18\n \x01(\x05\x12\x10\n\x08prc_time\x18\x0b \x01(\t\x12\x13\n\x0b\x63reate_time\x18\x0c \x01(\t\x12\x13\n\x0bpipeline_id\x18\r \x01(\t\x12\x36\n\x04refs\x18\x0e \x03(\x0b\x32(.dfs.hstdm.level1.Level1Record.RefsEntry\x1a+\n\tRefsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"\xba\x02\n\rFindLevel1Req\x12\x11\n\tlevel0_id\x18\x01 \x01(\t\x12\x11\n\tdata_type\x18\x02 \x01(\t\x12\x19\n\x11\x63reate_time_start\x18\x03 \x01(\t\x12\x17\n\x0f\x63reate_time_end\x18\x04 \x01(\t\x12\x12\n\nqc1_status\x18\x05 \x01(\x05\x12\x12\n\nprc_status\x18\x06 \x01(\x05\x12\x10\n\x08\x66ilename\x18\x07 \x01(\t\x12\r\n\x05limit\x18\x08 \x01(\x05\x12N\n\x10other_conditions\x18\t \x03(\x0b\x32\x34.dfs.hstdm.level1.FindLevel1Req.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x84\x01\n\x0e\x46indLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12/\n\x07records\x18\x04 \x03(\x0b\x32\x1e.dfs.hstdm.level1.Level1Record\"@\n\x0cGetLevel1Req\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\"?\n\rGetLevel1Resp\x12.\n\x06record\x18\x01 \x01(\x0b\x32\x1e.dfs.hstdm.level1.Level1Record\"N\n\x0eWriteLevel1Req\x12.\n\x06record\x18\x01 \x01(\x0b\x32\x1e.dfs.hstdm.level1.Level1Record\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"p\n\x0fWriteLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12.\n\x06record\x18\x03 \x01(\x0b\x32\x1e.dfs.hstdm.level1.Level1Record\"0\n\x12UpdateQc1StatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"D\n\x13UpdateQc1StatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\"1\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\xbb\x03\n\tLevel1Srv\x12K\n\x04\x46ind\x12\x1f.dfs.hstdm.level1.FindLevel1Req\x1a .dfs.hstdm.level1.FindLevel1Resp\"\x00\x12H\n\x03Get\x12\x1e.dfs.hstdm.level1.GetLevel1Req\x1a\x1f.dfs.hstdm.level1.GetLevel1Resp\"\x00\x12P\n\x05Write\x12 .dfs.hstdm.level1.WriteLevel1Req\x1a!.dfs.hstdm.level1.WriteLevel1Resp\"\x00(\x01\x12`\n\x0fUpdateQc1Status\x12$.dfs.hstdm.level1.UpdateQc1StatusReq\x1a%.dfs.hstdm.level1.UpdateQc1StatusResp\"\x00\x12\x63\n\x10UpdateProcStatus\x12%.dfs.hstdm.level1.UpdateProcStatusReq\x1a&.dfs.hstdm.level1.UpdateProcStatusResp\"\x00\x42#Z!cnlab.net/csst/proto/hstdm/level1b\x06proto3'
+  ,
+  dependencies=[common_dot_error__pb2.DESCRIPTOR,])
+
+
+
+
+_LEVEL1RECORD_REFSENTRY = _descriptor.Descriptor(
+  name='RefsEntry',
+  full_name='dfs.hstdm.level1.Level1Record.RefsEntry',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='key', full_name='dfs.hstdm.level1.Level1Record.RefsEntry.key', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='value', full_name='dfs.hstdm.level1.Level1Record.RefsEntry.value', index=1,
+      number=2, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=b'8\001',
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=385,
+  serialized_end=428,
+)
+
+_LEVEL1RECORD = _descriptor.Descriptor(
+  name='Level1Record',
+  full_name='dfs.hstdm.level1.Level1Record',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='dfs.hstdm.level1.Level1Record.id', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='level0_id', full_name='dfs.hstdm.level1.Level1Record.level0_id', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='data_type', full_name='dfs.hstdm.level1.Level1Record.data_type', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='cor_sci_id', full_name='dfs.hstdm.level1.Level1Record.cor_sci_id', index=3,
+      number=4, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_params', full_name='dfs.hstdm.level1.Level1Record.prc_params', index=4,
+      number=5, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='filename', full_name='dfs.hstdm.level1.Level1Record.filename', index=5,
+      number=6, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='file_path', full_name='dfs.hstdm.level1.Level1Record.file_path', index=6,
+      number=7, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='qc1_status', full_name='dfs.hstdm.level1.Level1Record.qc1_status', index=7,
+      number=8, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='qc1_time', full_name='dfs.hstdm.level1.Level1Record.qc1_time', index=8,
+      number=9, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_status', full_name='dfs.hstdm.level1.Level1Record.prc_status', index=9,
+      number=10, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_time', full_name='dfs.hstdm.level1.Level1Record.prc_time', index=10,
+      number=11, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='create_time', full_name='dfs.hstdm.level1.Level1Record.create_time', index=11,
+      number=12, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='pipeline_id', full_name='dfs.hstdm.level1.Level1Record.pipeline_id', index=12,
+      number=13, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='refs', full_name='dfs.hstdm.level1.Level1Record.refs', index=13,
+      number=14, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[_LEVEL1RECORD_REFSENTRY, ],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=68,
+  serialized_end=428,
+)
+
+
+_FINDLEVEL1REQ_OTHERCONDITIONSENTRY = _descriptor.Descriptor(
+  name='OtherConditionsEntry',
+  full_name='dfs.hstdm.level1.FindLevel1Req.OtherConditionsEntry',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='key', full_name='dfs.hstdm.level1.FindLevel1Req.OtherConditionsEntry.key', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='value', full_name='dfs.hstdm.level1.FindLevel1Req.OtherConditionsEntry.value', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=b'8\001',
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=691,
+  serialized_end=745,
+)
+
+_FINDLEVEL1REQ = _descriptor.Descriptor(
+  name='FindLevel1Req',
+  full_name='dfs.hstdm.level1.FindLevel1Req',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='level0_id', full_name='dfs.hstdm.level1.FindLevel1Req.level0_id', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='data_type', full_name='dfs.hstdm.level1.FindLevel1Req.data_type', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='create_time_start', full_name='dfs.hstdm.level1.FindLevel1Req.create_time_start', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='create_time_end', full_name='dfs.hstdm.level1.FindLevel1Req.create_time_end', index=3,
+      number=4, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='qc1_status', full_name='dfs.hstdm.level1.FindLevel1Req.qc1_status', index=4,
+      number=5, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_status', full_name='dfs.hstdm.level1.FindLevel1Req.prc_status', index=5,
+      number=6, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='filename', full_name='dfs.hstdm.level1.FindLevel1Req.filename', index=6,
+      number=7, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='limit', full_name='dfs.hstdm.level1.FindLevel1Req.limit', index=7,
+      number=8, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='other_conditions', full_name='dfs.hstdm.level1.FindLevel1Req.other_conditions', index=8,
+      number=9, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[_FINDLEVEL1REQ_OTHERCONDITIONSENTRY, ],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=431,
+  serialized_end=745,
+)
+
+
+_FINDLEVEL1RESP = _descriptor.Descriptor(
+  name='FindLevel1Resp',
+  full_name='dfs.hstdm.level1.FindLevel1Resp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.hstdm.level1.FindLevel1Resp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='totalCount', full_name='dfs.hstdm.level1.FindLevel1Resp.totalCount', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.hstdm.level1.FindLevel1Resp.error', index=2,
+      number=3, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='records', full_name='dfs.hstdm.level1.FindLevel1Resp.records', index=3,
+      number=4, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=748,
+  serialized_end=880,
+)
+
+
+_GETLEVEL1REQ = _descriptor.Descriptor(
+  name='GetLevel1Req',
+  full_name='dfs.hstdm.level1.GetLevel1Req',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='dfs.hstdm.level1.GetLevel1Req.id', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='level0_id', full_name='dfs.hstdm.level1.GetLevel1Req.level0_id', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='data_type', full_name='dfs.hstdm.level1.GetLevel1Req.data_type', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=882,
+  serialized_end=946,
+)
+
+
+_GETLEVEL1RESP = _descriptor.Descriptor(
+  name='GetLevel1Resp',
+  full_name='dfs.hstdm.level1.GetLevel1Resp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='record', full_name='dfs.hstdm.level1.GetLevel1Resp.record', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=948,
+  serialized_end=1011,
+)
+
+
+_WRITELEVEL1REQ = _descriptor.Descriptor(
+  name='WriteLevel1Req',
+  full_name='dfs.hstdm.level1.WriteLevel1Req',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='record', full_name='dfs.hstdm.level1.WriteLevel1Req.record', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='data', full_name='dfs.hstdm.level1.WriteLevel1Req.data', index=1,
+      number=2, type=12, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"",
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1013,
+  serialized_end=1091,
+)
+
+
+_WRITELEVEL1RESP = _descriptor.Descriptor(
+  name='WriteLevel1Resp',
+  full_name='dfs.hstdm.level1.WriteLevel1Resp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.hstdm.level1.WriteLevel1Resp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.hstdm.level1.WriteLevel1Resp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='record', full_name='dfs.hstdm.level1.WriteLevel1Resp.record', index=2,
+      number=3, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1093,
+  serialized_end=1205,
+)
+
+
+_UPDATEQC1STATUSREQ = _descriptor.Descriptor(
+  name='UpdateQc1StatusReq',
+  full_name='dfs.hstdm.level1.UpdateQc1StatusReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='dfs.hstdm.level1.UpdateQc1StatusReq.id', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dfs.hstdm.level1.UpdateQc1StatusReq.status', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1207,
+  serialized_end=1255,
+)
+
+
+_UPDATEQC1STATUSRESP = _descriptor.Descriptor(
+  name='UpdateQc1StatusResp',
+  full_name='dfs.hstdm.level1.UpdateQc1StatusResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.hstdm.level1.UpdateQc1StatusResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.hstdm.level1.UpdateQc1StatusResp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1257,
+  serialized_end=1325,
+)
+
+
+_UPDATEPROCSTATUSREQ = _descriptor.Descriptor(
+  name='UpdateProcStatusReq',
+  full_name='dfs.hstdm.level1.UpdateProcStatusReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='dfs.hstdm.level1.UpdateProcStatusReq.id', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dfs.hstdm.level1.UpdateProcStatusReq.status', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1327,
+  serialized_end=1376,
+)
+
+
+_UPDATEPROCSTATUSRESP = _descriptor.Descriptor(
+  name='UpdateProcStatusResp',
+  full_name='dfs.hstdm.level1.UpdateProcStatusResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.hstdm.level1.UpdateProcStatusResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.hstdm.level1.UpdateProcStatusResp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1378,
+  serialized_end=1447,
+)
+
+_LEVEL1RECORD_REFSENTRY.containing_type = _LEVEL1RECORD
+_LEVEL1RECORD.fields_by_name['refs'].message_type = _LEVEL1RECORD_REFSENTRY
+_FINDLEVEL1REQ_OTHERCONDITIONSENTRY.containing_type = _FINDLEVEL1REQ
+_FINDLEVEL1REQ.fields_by_name['other_conditions'].message_type = _FINDLEVEL1REQ_OTHERCONDITIONSENTRY
+_FINDLEVEL1RESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_FINDLEVEL1RESP.fields_by_name['records'].message_type = _LEVEL1RECORD
+_GETLEVEL1RESP.fields_by_name['record'].message_type = _LEVEL1RECORD
+_WRITELEVEL1REQ.fields_by_name['record'].message_type = _LEVEL1RECORD
+_WRITELEVEL1RESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_WRITELEVEL1RESP.fields_by_name['record'].message_type = _LEVEL1RECORD
+_UPDATEQC1STATUSRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_UPDATEPROCSTATUSRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+DESCRIPTOR.message_types_by_name['Level1Record'] = _LEVEL1RECORD
+DESCRIPTOR.message_types_by_name['FindLevel1Req'] = _FINDLEVEL1REQ
+DESCRIPTOR.message_types_by_name['FindLevel1Resp'] = _FINDLEVEL1RESP
+DESCRIPTOR.message_types_by_name['GetLevel1Req'] = _GETLEVEL1REQ
+DESCRIPTOR.message_types_by_name['GetLevel1Resp'] = _GETLEVEL1RESP
+DESCRIPTOR.message_types_by_name['WriteLevel1Req'] = _WRITELEVEL1REQ
+DESCRIPTOR.message_types_by_name['WriteLevel1Resp'] = _WRITELEVEL1RESP
+DESCRIPTOR.message_types_by_name['UpdateQc1StatusReq'] = _UPDATEQC1STATUSREQ
+DESCRIPTOR.message_types_by_name['UpdateQc1StatusResp'] = _UPDATEQC1STATUSRESP
+DESCRIPTOR.message_types_by_name['UpdateProcStatusReq'] = _UPDATEPROCSTATUSREQ
+DESCRIPTOR.message_types_by_name['UpdateProcStatusResp'] = _UPDATEPROCSTATUSRESP
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Level1Record = _reflection.GeneratedProtocolMessageType('Level1Record', (_message.Message,), {
+
+  'RefsEntry' : _reflection.GeneratedProtocolMessageType('RefsEntry', (_message.Message,), {
+    'DESCRIPTOR' : _LEVEL1RECORD_REFSENTRY,
+    '__module__' : 'hstdm.level1.level1_pb2'
+    # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.Level1Record.RefsEntry)
+    })
+  ,
+  'DESCRIPTOR' : _LEVEL1RECORD,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.Level1Record)
+  })
+_sym_db.RegisterMessage(Level1Record)
+_sym_db.RegisterMessage(Level1Record.RefsEntry)
+
+FindLevel1Req = _reflection.GeneratedProtocolMessageType('FindLevel1Req', (_message.Message,), {
+
+  'OtherConditionsEntry' : _reflection.GeneratedProtocolMessageType('OtherConditionsEntry', (_message.Message,), {
+    'DESCRIPTOR' : _FINDLEVEL1REQ_OTHERCONDITIONSENTRY,
+    '__module__' : 'hstdm.level1.level1_pb2'
+    # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.FindLevel1Req.OtherConditionsEntry)
+    })
+  ,
+  'DESCRIPTOR' : _FINDLEVEL1REQ,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.FindLevel1Req)
+  })
+_sym_db.RegisterMessage(FindLevel1Req)
+_sym_db.RegisterMessage(FindLevel1Req.OtherConditionsEntry)
+
+FindLevel1Resp = _reflection.GeneratedProtocolMessageType('FindLevel1Resp', (_message.Message,), {
+  'DESCRIPTOR' : _FINDLEVEL1RESP,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.FindLevel1Resp)
+  })
+_sym_db.RegisterMessage(FindLevel1Resp)
+
+GetLevel1Req = _reflection.GeneratedProtocolMessageType('GetLevel1Req', (_message.Message,), {
+  'DESCRIPTOR' : _GETLEVEL1REQ,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.GetLevel1Req)
+  })
+_sym_db.RegisterMessage(GetLevel1Req)
+
+GetLevel1Resp = _reflection.GeneratedProtocolMessageType('GetLevel1Resp', (_message.Message,), {
+  'DESCRIPTOR' : _GETLEVEL1RESP,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.GetLevel1Resp)
+  })
+_sym_db.RegisterMessage(GetLevel1Resp)
+
+WriteLevel1Req = _reflection.GeneratedProtocolMessageType('WriteLevel1Req', (_message.Message,), {
+  'DESCRIPTOR' : _WRITELEVEL1REQ,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.WriteLevel1Req)
+  })
+_sym_db.RegisterMessage(WriteLevel1Req)
+
+WriteLevel1Resp = _reflection.GeneratedProtocolMessageType('WriteLevel1Resp', (_message.Message,), {
+  'DESCRIPTOR' : _WRITELEVEL1RESP,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.WriteLevel1Resp)
+  })
+_sym_db.RegisterMessage(WriteLevel1Resp)
+
+UpdateQc1StatusReq = _reflection.GeneratedProtocolMessageType('UpdateQc1StatusReq', (_message.Message,), {
+  'DESCRIPTOR' : _UPDATEQC1STATUSREQ,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.UpdateQc1StatusReq)
+  })
+_sym_db.RegisterMessage(UpdateQc1StatusReq)
+
+UpdateQc1StatusResp = _reflection.GeneratedProtocolMessageType('UpdateQc1StatusResp', (_message.Message,), {
+  'DESCRIPTOR' : _UPDATEQC1STATUSRESP,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.UpdateQc1StatusResp)
+  })
+_sym_db.RegisterMessage(UpdateQc1StatusResp)
+
+UpdateProcStatusReq = _reflection.GeneratedProtocolMessageType('UpdateProcStatusReq', (_message.Message,), {
+  'DESCRIPTOR' : _UPDATEPROCSTATUSREQ,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.UpdateProcStatusReq)
+  })
+_sym_db.RegisterMessage(UpdateProcStatusReq)
+
+UpdateProcStatusResp = _reflection.GeneratedProtocolMessageType('UpdateProcStatusResp', (_message.Message,), {
+  'DESCRIPTOR' : _UPDATEPROCSTATUSRESP,
+  '__module__' : 'hstdm.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1.UpdateProcStatusResp)
+  })
+_sym_db.RegisterMessage(UpdateProcStatusResp)
+
+
+DESCRIPTOR._options = None
+_LEVEL1RECORD_REFSENTRY._options = None
+_FINDLEVEL1REQ_OTHERCONDITIONSENTRY._options = None
+
+_LEVEL1SRV = _descriptor.ServiceDescriptor(
+  name='Level1Srv',
+  full_name='dfs.hstdm.level1.Level1Srv',
+  file=DESCRIPTOR,
+  index=0,
+  serialized_options=None,
+  serialized_start=1450,
+  serialized_end=1893,
+  methods=[
+  _descriptor.MethodDescriptor(
+    name='Find',
+    full_name='dfs.hstdm.level1.Level1Srv.Find',
+    index=0,
+    containing_service=None,
+    input_type=_FINDLEVEL1REQ,
+    output_type=_FINDLEVEL1RESP,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='Get',
+    full_name='dfs.hstdm.level1.Level1Srv.Get',
+    index=1,
+    containing_service=None,
+    input_type=_GETLEVEL1REQ,
+    output_type=_GETLEVEL1RESP,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='Write',
+    full_name='dfs.hstdm.level1.Level1Srv.Write',
+    index=2,
+    containing_service=None,
+    input_type=_WRITELEVEL1REQ,
+    output_type=_WRITELEVEL1RESP,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='UpdateQc1Status',
+    full_name='dfs.hstdm.level1.Level1Srv.UpdateQc1Status',
+    index=3,
+    containing_service=None,
+    input_type=_UPDATEQC1STATUSREQ,
+    output_type=_UPDATEQC1STATUSRESP,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='UpdateProcStatus',
+    full_name='dfs.hstdm.level1.Level1Srv.UpdateProcStatus',
+    index=4,
+    containing_service=None,
+    input_type=_UPDATEPROCSTATUSREQ,
+    output_type=_UPDATEPROCSTATUSRESP,
+    serialized_options=None,
+  ),
+])
+_sym_db.RegisterServiceDescriptor(_LEVEL1SRV)
+
+DESCRIPTOR.services_by_name['Level1Srv'] = _LEVEL1SRV
+
+# @@protoc_insertion_point(module_scope)
diff --git a/csst_dfs_proto/hstdm/level1/level1_pb2_grpc.py b/csst_dfs_proto/hstdm/level1/level1_pb2_grpc.py
new file mode 100644
index 0000000000000000000000000000000000000000..c85ca244ebb1a2f785cb0bc5810a48475d086a0c
--- /dev/null
+++ b/csst_dfs_proto/hstdm/level1/level1_pb2_grpc.py
@@ -0,0 +1,192 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from . import level1_pb2 as hstdm_dot_level1_dot_level1__pb2
+
+
+class Level1SrvStub(object):
+    """Missing associated documentation comment in .proto file"""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.Find = channel.unary_unary(
+                '/dfs.hstdm.level1.Level1Srv/Find',
+                request_serializer=hstdm_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
+                response_deserializer=hstdm_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
+                )
+        self.Get = channel.unary_unary(
+                '/dfs.hstdm.level1.Level1Srv/Get',
+                request_serializer=hstdm_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
+                response_deserializer=hstdm_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
+                )
+        self.Write = channel.stream_unary(
+                '/dfs.hstdm.level1.Level1Srv/Write',
+                request_serializer=hstdm_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
+                response_deserializer=hstdm_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
+                )
+        self.UpdateQc1Status = channel.unary_unary(
+                '/dfs.hstdm.level1.Level1Srv/UpdateQc1Status',
+                request_serializer=hstdm_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
+                response_deserializer=hstdm_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
+                )
+        self.UpdateProcStatus = channel.unary_unary(
+                '/dfs.hstdm.level1.Level1Srv/UpdateProcStatus',
+                request_serializer=hstdm_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
+                response_deserializer=hstdm_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
+                )
+
+
+class Level1SrvServicer(object):
+    """Missing associated documentation comment in .proto file"""
+
+    def Find(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Get(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Write(self, request_iterator, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateQc1Status(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateProcStatus(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_Level1SrvServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'Find': grpc.unary_unary_rpc_method_handler(
+                    servicer.Find,
+                    request_deserializer=hstdm_dot_level1_dot_level1__pb2.FindLevel1Req.FromString,
+                    response_serializer=hstdm_dot_level1_dot_level1__pb2.FindLevel1Resp.SerializeToString,
+            ),
+            'Get': grpc.unary_unary_rpc_method_handler(
+                    servicer.Get,
+                    request_deserializer=hstdm_dot_level1_dot_level1__pb2.GetLevel1Req.FromString,
+                    response_serializer=hstdm_dot_level1_dot_level1__pb2.GetLevel1Resp.SerializeToString,
+            ),
+            'Write': grpc.stream_unary_rpc_method_handler(
+                    servicer.Write,
+                    request_deserializer=hstdm_dot_level1_dot_level1__pb2.WriteLevel1Req.FromString,
+                    response_serializer=hstdm_dot_level1_dot_level1__pb2.WriteLevel1Resp.SerializeToString,
+            ),
+            'UpdateQc1Status': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateQc1Status,
+                    request_deserializer=hstdm_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.FromString,
+                    response_serializer=hstdm_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.SerializeToString,
+            ),
+            'UpdateProcStatus': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateProcStatus,
+                    request_deserializer=hstdm_dot_level1_dot_level1__pb2.UpdateProcStatusReq.FromString,
+                    response_serializer=hstdm_dot_level1_dot_level1__pb2.UpdateProcStatusResp.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dfs.hstdm.level1.Level1Srv', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Level1Srv(object):
+    """Missing associated documentation comment in .proto file"""
+
+    @staticmethod
+    def Find(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.hstdm.level1.Level1Srv/Find',
+            hstdm_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
+            hstdm_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Get(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.hstdm.level1.Level1Srv/Get',
+            hstdm_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
+            hstdm_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Write(request_iterator,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.stream_unary(request_iterator, target, '/dfs.hstdm.level1.Level1Srv/Write',
+            hstdm_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
+            hstdm_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateQc1Status(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.hstdm.level1.Level1Srv/UpdateQc1Status',
+            hstdm_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
+            hstdm_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateProcStatus(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.hstdm.level1.Level1Srv/UpdateProcStatus',
+            hstdm_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
+            hstdm_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/csst_dfs_proto/hstdm/level1prc/__init__.py b/csst_dfs_proto/hstdm/level1prc/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/csst_dfs_proto/hstdm/level1prc/level1prc_pb2.py b/csst_dfs_proto/hstdm/level1prc/level1prc_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..e1521582984d11ed41852cf52112bfb969776378
--- /dev/null
+++ b/csst_dfs_proto/hstdm/level1prc/level1prc_pb2.py
@@ -0,0 +1,527 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: hstdm/level1prc/level1prc.proto
+
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from ...common import error_pb2 as common_dot_error__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='hstdm/level1prc/level1prc.proto',
+  package='dfs.hstdm.level1prc',
+  syntax='proto3',
+  serialized_options=b'Z$cnlab.net/csst/proto/hstdm/level1prc',
+  serialized_pb=b'\n\x1fhstdm/level1prc/level1prc.proto\x12\x13\x64\x66s.hstdm.level1prc\x1a\x12\x63ommon/error.proto\"\xb3\x01\n\x0fLevel1PrcRecord\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel1_id\x18\x02 \x01(\x03\x12\x13\n\x0bpipeline_id\x18\x03 \x01(\t\x12\x12\n\nprc_module\x18\x04 \x01(\t\x12\x18\n\x10params_file_path\x18\x05 \x01(\t\x12\x12\n\nprc_status\x18\x06 \x01(\x05\x12\x10\n\x08prc_time\x18\x07 \x01(\t\x12\x18\n\x10result_file_path\x18\x08 \x01(\t\"\xf0\x01\n\x10\x46indLevel1PrcReq\x12\x11\n\tlevel1_id\x18\x01 \x01(\x03\x12\x13\n\x0bpipeline_id\x18\x02 \x01(\t\x12\x12\n\nprc_module\x18\x03 \x01(\t\x12\x12\n\nprc_status\x18\x04 \x01(\x05\x12T\n\x10other_conditions\x18\x05 \x03(\x0b\x32:.dfs.hstdm.level1prc.FindLevel1PrcReq.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8d\x01\n\x11\x46indLevel1PrcResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12\x35\n\x07records\x18\x04 \x03(\x0b\x32$.dfs.hstdm.level1prc.Level1PrcRecord\"I\n\x11WriteLevel1PrcReq\x12\x34\n\x06record\x18\x01 \x01(\x0b\x32$.dfs.hstdm.level1prc.Level1PrcRecord\"y\n\x12WriteLevel1PrcResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12\x34\n\x06record\x18\x03 \x01(\x0b\x32$.dfs.hstdm.level1prc.Level1PrcRecord\"1\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\xae\x02\n\x0cLevel1PrcSrv\x12W\n\x04\x46ind\x12%.dfs.hstdm.level1prc.FindLevel1PrcReq\x1a&.dfs.hstdm.level1prc.FindLevel1PrcResp\"\x00\x12Z\n\x05Write\x12&.dfs.hstdm.level1prc.WriteLevel1PrcReq\x1a\'.dfs.hstdm.level1prc.WriteLevel1PrcResp\"\x00\x12i\n\x10UpdateProcStatus\x12(.dfs.hstdm.level1prc.UpdateProcStatusReq\x1a).dfs.hstdm.level1prc.UpdateProcStatusResp\"\x00\x42&Z$cnlab.net/csst/proto/hstdm/level1prcb\x06proto3'
+  ,
+  dependencies=[common_dot_error__pb2.DESCRIPTOR,])
+
+
+
+
+_LEVEL1PRCRECORD = _descriptor.Descriptor(
+  name='Level1PrcRecord',
+  full_name='dfs.hstdm.level1prc.Level1PrcRecord',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='dfs.hstdm.level1prc.Level1PrcRecord.id', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='level1_id', full_name='dfs.hstdm.level1prc.Level1PrcRecord.level1_id', index=1,
+      number=2, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='pipeline_id', full_name='dfs.hstdm.level1prc.Level1PrcRecord.pipeline_id', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_module', full_name='dfs.hstdm.level1prc.Level1PrcRecord.prc_module', index=3,
+      number=4, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='params_file_path', full_name='dfs.hstdm.level1prc.Level1PrcRecord.params_file_path', index=4,
+      number=5, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_status', full_name='dfs.hstdm.level1prc.Level1PrcRecord.prc_status', index=5,
+      number=6, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_time', full_name='dfs.hstdm.level1prc.Level1PrcRecord.prc_time', index=6,
+      number=7, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='result_file_path', full_name='dfs.hstdm.level1prc.Level1PrcRecord.result_file_path', index=7,
+      number=8, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=77,
+  serialized_end=256,
+)
+
+
+_FINDLEVEL1PRCREQ_OTHERCONDITIONSENTRY = _descriptor.Descriptor(
+  name='OtherConditionsEntry',
+  full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.OtherConditionsEntry',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='key', full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.OtherConditionsEntry.key', index=0,
+      number=1, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='value', full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.OtherConditionsEntry.value', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=b'8\001',
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=445,
+  serialized_end=499,
+)
+
+_FINDLEVEL1PRCREQ = _descriptor.Descriptor(
+  name='FindLevel1PrcReq',
+  full_name='dfs.hstdm.level1prc.FindLevel1PrcReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='level1_id', full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.level1_id', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='pipeline_id', full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.pipeline_id', index=1,
+      number=2, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_module', full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.prc_module', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='prc_status', full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.prc_status', index=3,
+      number=4, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='other_conditions', full_name='dfs.hstdm.level1prc.FindLevel1PrcReq.other_conditions', index=4,
+      number=5, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[_FINDLEVEL1PRCREQ_OTHERCONDITIONSENTRY, ],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=259,
+  serialized_end=499,
+)
+
+
+_FINDLEVEL1PRCRESP = _descriptor.Descriptor(
+  name='FindLevel1PrcResp',
+  full_name='dfs.hstdm.level1prc.FindLevel1PrcResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.hstdm.level1prc.FindLevel1PrcResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='totalCount', full_name='dfs.hstdm.level1prc.FindLevel1PrcResp.totalCount', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.hstdm.level1prc.FindLevel1PrcResp.error', index=2,
+      number=3, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='records', full_name='dfs.hstdm.level1prc.FindLevel1PrcResp.records', index=3,
+      number=4, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=502,
+  serialized_end=643,
+)
+
+
+_WRITELEVEL1PRCREQ = _descriptor.Descriptor(
+  name='WriteLevel1PrcReq',
+  full_name='dfs.hstdm.level1prc.WriteLevel1PrcReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='record', full_name='dfs.hstdm.level1prc.WriteLevel1PrcReq.record', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=645,
+  serialized_end=718,
+)
+
+
+_WRITELEVEL1PRCRESP = _descriptor.Descriptor(
+  name='WriteLevel1PrcResp',
+  full_name='dfs.hstdm.level1prc.WriteLevel1PrcResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.hstdm.level1prc.WriteLevel1PrcResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.hstdm.level1prc.WriteLevel1PrcResp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='record', full_name='dfs.hstdm.level1prc.WriteLevel1PrcResp.record', index=2,
+      number=3, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=720,
+  serialized_end=841,
+)
+
+
+_UPDATEPROCSTATUSREQ = _descriptor.Descriptor(
+  name='UpdateProcStatusReq',
+  full_name='dfs.hstdm.level1prc.UpdateProcStatusReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='dfs.hstdm.level1prc.UpdateProcStatusReq.id', index=0,
+      number=1, type=3, cpp_type=2, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dfs.hstdm.level1prc.UpdateProcStatusReq.status', index=1,
+      number=2, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=843,
+  serialized_end=892,
+)
+
+
+_UPDATEPROCSTATUSRESP = _descriptor.Descriptor(
+  name='UpdateProcStatusResp',
+  full_name='dfs.hstdm.level1prc.UpdateProcStatusResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.hstdm.level1prc.UpdateProcStatusResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.hstdm.level1prc.UpdateProcStatusResp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=894,
+  serialized_end=963,
+)
+
+_FINDLEVEL1PRCREQ_OTHERCONDITIONSENTRY.containing_type = _FINDLEVEL1PRCREQ
+_FINDLEVEL1PRCREQ.fields_by_name['other_conditions'].message_type = _FINDLEVEL1PRCREQ_OTHERCONDITIONSENTRY
+_FINDLEVEL1PRCRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_FINDLEVEL1PRCRESP.fields_by_name['records'].message_type = _LEVEL1PRCRECORD
+_WRITELEVEL1PRCREQ.fields_by_name['record'].message_type = _LEVEL1PRCRECORD
+_WRITELEVEL1PRCRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_WRITELEVEL1PRCRESP.fields_by_name['record'].message_type = _LEVEL1PRCRECORD
+_UPDATEPROCSTATUSRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+DESCRIPTOR.message_types_by_name['Level1PrcRecord'] = _LEVEL1PRCRECORD
+DESCRIPTOR.message_types_by_name['FindLevel1PrcReq'] = _FINDLEVEL1PRCREQ
+DESCRIPTOR.message_types_by_name['FindLevel1PrcResp'] = _FINDLEVEL1PRCRESP
+DESCRIPTOR.message_types_by_name['WriteLevel1PrcReq'] = _WRITELEVEL1PRCREQ
+DESCRIPTOR.message_types_by_name['WriteLevel1PrcResp'] = _WRITELEVEL1PRCRESP
+DESCRIPTOR.message_types_by_name['UpdateProcStatusReq'] = _UPDATEPROCSTATUSREQ
+DESCRIPTOR.message_types_by_name['UpdateProcStatusResp'] = _UPDATEPROCSTATUSRESP
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Level1PrcRecord = _reflection.GeneratedProtocolMessageType('Level1PrcRecord', (_message.Message,), {
+  'DESCRIPTOR' : _LEVEL1PRCRECORD,
+  '__module__' : 'hstdm.level1prc.level1prc_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.Level1PrcRecord)
+  })
+_sym_db.RegisterMessage(Level1PrcRecord)
+
+FindLevel1PrcReq = _reflection.GeneratedProtocolMessageType('FindLevel1PrcReq', (_message.Message,), {
+
+  'OtherConditionsEntry' : _reflection.GeneratedProtocolMessageType('OtherConditionsEntry', (_message.Message,), {
+    'DESCRIPTOR' : _FINDLEVEL1PRCREQ_OTHERCONDITIONSENTRY,
+    '__module__' : 'hstdm.level1prc.level1prc_pb2'
+    # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.FindLevel1PrcReq.OtherConditionsEntry)
+    })
+  ,
+  'DESCRIPTOR' : _FINDLEVEL1PRCREQ,
+  '__module__' : 'hstdm.level1prc.level1prc_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.FindLevel1PrcReq)
+  })
+_sym_db.RegisterMessage(FindLevel1PrcReq)
+_sym_db.RegisterMessage(FindLevel1PrcReq.OtherConditionsEntry)
+
+FindLevel1PrcResp = _reflection.GeneratedProtocolMessageType('FindLevel1PrcResp', (_message.Message,), {
+  'DESCRIPTOR' : _FINDLEVEL1PRCRESP,
+  '__module__' : 'hstdm.level1prc.level1prc_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.FindLevel1PrcResp)
+  })
+_sym_db.RegisterMessage(FindLevel1PrcResp)
+
+WriteLevel1PrcReq = _reflection.GeneratedProtocolMessageType('WriteLevel1PrcReq', (_message.Message,), {
+  'DESCRIPTOR' : _WRITELEVEL1PRCREQ,
+  '__module__' : 'hstdm.level1prc.level1prc_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.WriteLevel1PrcReq)
+  })
+_sym_db.RegisterMessage(WriteLevel1PrcReq)
+
+WriteLevel1PrcResp = _reflection.GeneratedProtocolMessageType('WriteLevel1PrcResp', (_message.Message,), {
+  'DESCRIPTOR' : _WRITELEVEL1PRCRESP,
+  '__module__' : 'hstdm.level1prc.level1prc_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.WriteLevel1PrcResp)
+  })
+_sym_db.RegisterMessage(WriteLevel1PrcResp)
+
+UpdateProcStatusReq = _reflection.GeneratedProtocolMessageType('UpdateProcStatusReq', (_message.Message,), {
+  'DESCRIPTOR' : _UPDATEPROCSTATUSREQ,
+  '__module__' : 'hstdm.level1prc.level1prc_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.UpdateProcStatusReq)
+  })
+_sym_db.RegisterMessage(UpdateProcStatusReq)
+
+UpdateProcStatusResp = _reflection.GeneratedProtocolMessageType('UpdateProcStatusResp', (_message.Message,), {
+  'DESCRIPTOR' : _UPDATEPROCSTATUSRESP,
+  '__module__' : 'hstdm.level1prc.level1prc_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.hstdm.level1prc.UpdateProcStatusResp)
+  })
+_sym_db.RegisterMessage(UpdateProcStatusResp)
+
+
+DESCRIPTOR._options = None
+_FINDLEVEL1PRCREQ_OTHERCONDITIONSENTRY._options = None
+
+_LEVEL1PRCSRV = _descriptor.ServiceDescriptor(
+  name='Level1PrcSrv',
+  full_name='dfs.hstdm.level1prc.Level1PrcSrv',
+  file=DESCRIPTOR,
+  index=0,
+  serialized_options=None,
+  serialized_start=966,
+  serialized_end=1268,
+  methods=[
+  _descriptor.MethodDescriptor(
+    name='Find',
+    full_name='dfs.hstdm.level1prc.Level1PrcSrv.Find',
+    index=0,
+    containing_service=None,
+    input_type=_FINDLEVEL1PRCREQ,
+    output_type=_FINDLEVEL1PRCRESP,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='Write',
+    full_name='dfs.hstdm.level1prc.Level1PrcSrv.Write',
+    index=1,
+    containing_service=None,
+    input_type=_WRITELEVEL1PRCREQ,
+    output_type=_WRITELEVEL1PRCRESP,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='UpdateProcStatus',
+    full_name='dfs.hstdm.level1prc.Level1PrcSrv.UpdateProcStatus',
+    index=2,
+    containing_service=None,
+    input_type=_UPDATEPROCSTATUSREQ,
+    output_type=_UPDATEPROCSTATUSRESP,
+    serialized_options=None,
+  ),
+])
+_sym_db.RegisterServiceDescriptor(_LEVEL1PRCSRV)
+
+DESCRIPTOR.services_by_name['Level1PrcSrv'] = _LEVEL1PRCSRV
+
+# @@protoc_insertion_point(module_scope)
diff --git a/csst_dfs_proto/hstdm/level1prc/level1prc_pb2_grpc.py b/csst_dfs_proto/hstdm/level1prc/level1prc_pb2_grpc.py
new file mode 100644
index 0000000000000000000000000000000000000000..c9ba26abf31c99375ddde5c762b9a52365f3ceab
--- /dev/null
+++ b/csst_dfs_proto/hstdm/level1prc/level1prc_pb2_grpc.py
@@ -0,0 +1,128 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+import grpc
+
+from . import level1prc_pb2 as hstdm_dot_level1prc_dot_level1prc__pb2
+
+
+class Level1PrcSrvStub(object):
+    """Missing associated documentation comment in .proto file"""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.Find = channel.unary_unary(
+                '/dfs.hstdm.level1prc.Level1PrcSrv/Find',
+                request_serializer=hstdm_dot_level1prc_dot_level1prc__pb2.FindLevel1PrcReq.SerializeToString,
+                response_deserializer=hstdm_dot_level1prc_dot_level1prc__pb2.FindLevel1PrcResp.FromString,
+                )
+        self.Write = channel.unary_unary(
+                '/dfs.hstdm.level1prc.Level1PrcSrv/Write',
+                request_serializer=hstdm_dot_level1prc_dot_level1prc__pb2.WriteLevel1PrcReq.SerializeToString,
+                response_deserializer=hstdm_dot_level1prc_dot_level1prc__pb2.WriteLevel1PrcResp.FromString,
+                )
+        self.UpdateProcStatus = channel.unary_unary(
+                '/dfs.hstdm.level1prc.Level1PrcSrv/UpdateProcStatus',
+                request_serializer=hstdm_dot_level1prc_dot_level1prc__pb2.UpdateProcStatusReq.SerializeToString,
+                response_deserializer=hstdm_dot_level1prc_dot_level1prc__pb2.UpdateProcStatusResp.FromString,
+                )
+
+
+class Level1PrcSrvServicer(object):
+    """Missing associated documentation comment in .proto file"""
+
+    def Find(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Write(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateProcStatus(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_Level1PrcSrvServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'Find': grpc.unary_unary_rpc_method_handler(
+                    servicer.Find,
+                    request_deserializer=hstdm_dot_level1prc_dot_level1prc__pb2.FindLevel1PrcReq.FromString,
+                    response_serializer=hstdm_dot_level1prc_dot_level1prc__pb2.FindLevel1PrcResp.SerializeToString,
+            ),
+            'Write': grpc.unary_unary_rpc_method_handler(
+                    servicer.Write,
+                    request_deserializer=hstdm_dot_level1prc_dot_level1prc__pb2.WriteLevel1PrcReq.FromString,
+                    response_serializer=hstdm_dot_level1prc_dot_level1prc__pb2.WriteLevel1PrcResp.SerializeToString,
+            ),
+            'UpdateProcStatus': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateProcStatus,
+                    request_deserializer=hstdm_dot_level1prc_dot_level1prc__pb2.UpdateProcStatusReq.FromString,
+                    response_serializer=hstdm_dot_level1prc_dot_level1prc__pb2.UpdateProcStatusResp.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dfs.hstdm.level1prc.Level1PrcSrv', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Level1PrcSrv(object):
+    """Missing associated documentation comment in .proto file"""
+
+    @staticmethod
+    def Find(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.hstdm.level1prc.Level1PrcSrv/Find',
+            hstdm_dot_level1prc_dot_level1prc__pb2.FindLevel1PrcReq.SerializeToString,
+            hstdm_dot_level1prc_dot_level1prc__pb2.FindLevel1PrcResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Write(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.hstdm.level1prc.Level1PrcSrv/Write',
+            hstdm_dot_level1prc_dot_level1prc__pb2.WriteLevel1PrcReq.SerializeToString,
+            hstdm_dot_level1prc_dot_level1prc__pb2.WriteLevel1PrcResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateProcStatus(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.hstdm.level1prc.Level1PrcSrv/UpdateProcStatus',
+            hstdm_dot_level1prc_dot_level1prc__pb2.UpdateProcStatusReq.SerializeToString,
+            hstdm_dot_level1prc_dot_level1prc__pb2.UpdateProcStatusResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/csst_dfs_proto/msc/level1/level1_pb2.py b/csst_dfs_proto/msc/level1/level1_pb2.py
index 53c09d89ea3d0d88ac9cfc844504984e9f6fd814..93b75b0dbeffa1331531ce0b4aa482bb173d64b2 100644
--- a/csst_dfs_proto/msc/level1/level1_pb2.py
+++ b/csst_dfs_proto/msc/level1/level1_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: msc/level1/level1.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -20,8 +18,8 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   name='msc/level1/level1.proto',
   package='dfs.msc.level1',
   syntax='proto3',
-  serialized_options=_b('Z\037cnlab.net/csst/proto/msc/level1'),
-  serialized_pb=_b('\n\x17msc/level1/level1.proto\x12\x0e\x64\x66s.msc.level1\x1a\x12\x63ommon/error.proto\"\xe6\x02\n\x0cLevel1Record\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\x12\x12\n\ncor_sci_id\x18\x04 \x01(\x03\x12\x12\n\nprc_params\x18\x05 \x01(\t\x12\x10\n\x08\x66ilename\x18\x06 \x01(\t\x12\x11\n\tfile_path\x18\x07 \x01(\t\x12\x12\n\nqc1_status\x18\x08 \x01(\x05\x12\x10\n\x08qc1_time\x18\t \x01(\t\x12\x12\n\nprc_status\x18\n \x01(\x05\x12\x10\n\x08prc_time\x18\x0b \x01(\t\x12\x13\n\x0b\x63reate_time\x18\x0c \x01(\t\x12\x13\n\x0bpipeline_id\x18\r \x01(\t\x12\x34\n\x04refs\x18\x0e \x03(\x0b\x32&.dfs.msc.level1.Level1Record.RefsEntry\x1a+\n\tRefsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"\xb8\x02\n\rFindLevel1Req\x12\x11\n\tlevel0_id\x18\x01 \x01(\t\x12\x11\n\tdata_type\x18\x02 \x01(\t\x12\x19\n\x11\x63reate_time_start\x18\x03 \x01(\t\x12\x17\n\x0f\x63reate_time_end\x18\x04 \x01(\t\x12\x12\n\nqc1_status\x18\x05 \x01(\x05\x12\x12\n\nprc_status\x18\x06 \x01(\x05\x12\x10\n\x08\x66ilename\x18\x07 \x01(\t\x12\r\n\x05limit\x18\x08 \x01(\x05\x12L\n\x10other_conditions\x18\t \x03(\x0b\x32\x32.dfs.msc.level1.FindLevel1Req.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x0e\x46indLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12-\n\x07records\x18\x04 \x03(\x0b\x32\x1c.dfs.msc.level1.Level1Record\"@\n\x0cGetLevel1Req\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\"=\n\rGetLevel1Resp\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.msc.level1.Level1Record\"L\n\x0eWriteLevel1Req\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.msc.level1.Level1Record\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"n\n\x0fWriteLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12,\n\x06record\x18\x03 \x01(\x0b\x32\x1c.dfs.msc.level1.Level1Record\"0\n\x12UpdateQc1StatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"D\n\x13UpdateQc1StatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\"1\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\xa7\x03\n\tLevel1Srv\x12G\n\x04\x46ind\x12\x1d.dfs.msc.level1.FindLevel1Req\x1a\x1e.dfs.msc.level1.FindLevel1Resp\"\x00\x12\x44\n\x03Get\x12\x1c.dfs.msc.level1.GetLevel1Req\x1a\x1d.dfs.msc.level1.GetLevel1Resp\"\x00\x12L\n\x05Write\x12\x1e.dfs.msc.level1.WriteLevel1Req\x1a\x1f.dfs.msc.level1.WriteLevel1Resp\"\x00(\x01\x12\\\n\x0fUpdateQc1Status\x12\".dfs.msc.level1.UpdateQc1StatusReq\x1a#.dfs.msc.level1.UpdateQc1StatusResp\"\x00\x12_\n\x10UpdateProcStatus\x12#.dfs.msc.level1.UpdateProcStatusReq\x1a$.dfs.msc.level1.UpdateProcStatusResp\"\x00\x42!Z\x1f\x63nlab.net/csst/proto/msc/level1b\x06proto3')
+  serialized_options=b'Z\037cnlab.net/csst/proto/msc/level1',
+  serialized_pb=b'\n\x17msc/level1/level1.proto\x12\x0e\x64\x66s.msc.level1\x1a\x12\x63ommon/error.proto\"\xf6\x02\n\x0cLevel1Record\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\x12\x12\n\ncor_sci_id\x18\x04 \x01(\x03\x12\x12\n\nprc_params\x18\x05 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x06 \x01(\t\x12\x10\n\x08\x66ilename\x18\x07 \x01(\t\x12\x11\n\tfile_path\x18\x08 \x01(\t\x12\x12\n\nqc1_status\x18\t \x01(\x05\x12\x10\n\x08qc1_time\x18\n \x01(\t\x12\x12\n\nprc_status\x18\x0b \x01(\x05\x12\x10\n\x08prc_time\x18\x0c \x01(\t\x12\x13\n\x0b\x63reate_time\x18\r \x01(\t\x12\x13\n\x0bpipeline_id\x18\x0e \x01(\t\x12\x34\n\x04refs\x18\x0f \x03(\x0b\x32&.dfs.msc.level1.Level1Record.RefsEntry\x1a+\n\tRefsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"\xb8\x02\n\rFindLevel1Req\x12\x11\n\tlevel0_id\x18\x01 \x01(\t\x12\x11\n\tdata_type\x18\x02 \x01(\t\x12\x19\n\x11\x63reate_time_start\x18\x03 \x01(\t\x12\x17\n\x0f\x63reate_time_end\x18\x04 \x01(\t\x12\x12\n\nqc1_status\x18\x05 \x01(\x05\x12\x12\n\nprc_status\x18\x06 \x01(\x05\x12\x10\n\x08\x66ilename\x18\x07 \x01(\t\x12\r\n\x05limit\x18\x08 \x01(\x05\x12L\n\x10other_conditions\x18\t \x03(\x0b\x32\x32.dfs.msc.level1.FindLevel1Req.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x0e\x46indLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12-\n\x07records\x18\x04 \x03(\x0b\x32\x1c.dfs.msc.level1.Level1Record\"&\n\x11\x46indByBrickIdsReq\x12\x11\n\tbrick_ids\x18\x01 \x03(\x05\"r\n\x12\x46indByBrickIdsResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12-\n\x07records\x18\x03 \x03(\x0b\x32\x1c.dfs.msc.level1.Level1Record\"@\n\x0cGetLevel1Req\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\"=\n\rGetLevel1Resp\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.msc.level1.Level1Record\"L\n\x0eWriteLevel1Req\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.msc.level1.Level1Record\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"n\n\x0fWriteLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12,\n\x06record\x18\x03 \x01(\x0b\x32\x1c.dfs.msc.level1.Level1Record\"0\n\x12UpdateQc1StatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"D\n\x13UpdateQc1StatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\"1\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\x82\x04\n\tLevel1Srv\x12G\n\x04\x46ind\x12\x1d.dfs.msc.level1.FindLevel1Req\x1a\x1e.dfs.msc.level1.FindLevel1Resp\"\x00\x12Y\n\x0e\x46indByBrickIds\x12!.dfs.msc.level1.FindByBrickIdsReq\x1a\".dfs.msc.level1.FindByBrickIdsResp\"\x00\x12\x44\n\x03Get\x12\x1c.dfs.msc.level1.GetLevel1Req\x1a\x1d.dfs.msc.level1.GetLevel1Resp\"\x00\x12L\n\x05Write\x12\x1e.dfs.msc.level1.WriteLevel1Req\x1a\x1f.dfs.msc.level1.WriteLevel1Resp\"\x00(\x01\x12\\\n\x0fUpdateQc1Status\x12\".dfs.msc.level1.UpdateQc1StatusReq\x1a#.dfs.msc.level1.UpdateQc1StatusResp\"\x00\x12_\n\x10UpdateProcStatus\x12#.dfs.msc.level1.UpdateProcStatusReq\x1a$.dfs.msc.level1.UpdateProcStatusResp\"\x00\x42!Z\x1f\x63nlab.net/csst/proto/msc/level1b\x06proto3'
   ,
   dependencies=[common_dot_error__pb2.DESCRIPTOR,])
 
@@ -38,7 +36,7 @@ _LEVEL1RECORD_REFSENTRY = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='key', full_name='dfs.msc.level1.Level1Record.RefsEntry.key', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -55,14 +53,14 @@ _LEVEL1RECORD_REFSENTRY = _descriptor.Descriptor(
   nested_types=[],
   enum_types=[
   ],
-  serialized_options=_b('8\001'),
+  serialized_options=b'8\001',
   is_extendable=False,
   syntax='proto3',
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=379,
-  serialized_end=422,
+  serialized_start=395,
+  serialized_end=438,
 )
 
 _LEVEL1RECORD = _descriptor.Descriptor(
@@ -82,14 +80,14 @@ _LEVEL1RECORD = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='level0_id', full_name='dfs.msc.level1.Level1Record.level0_id', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='data_type', full_name='dfs.msc.level1.Level1Record.data_type', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -103,69 +101,76 @@ _LEVEL1RECORD = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='prc_params', full_name='dfs.msc.level1.Level1Record.prc_params', index=4,
       number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='filename', full_name='dfs.msc.level1.Level1Record.filename', index=5,
+      name='filter', full_name='dfs.msc.level1.Level1Record.filter', index=5,
       number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='file_path', full_name='dfs.msc.level1.Level1Record.file_path', index=6,
+      name='filename', full_name='dfs.msc.level1.Level1Record.filename', index=6,
       number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='qc1_status', full_name='dfs.msc.level1.Level1Record.qc1_status', index=7,
-      number=8, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
+      name='file_path', full_name='dfs.msc.level1.Level1Record.file_path', index=7,
+      number=8, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='qc1_time', full_name='dfs.msc.level1.Level1Record.qc1_time', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      name='qc1_status', full_name='dfs.msc.level1.Level1Record.qc1_status', index=8,
+      number=9, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='prc_status', full_name='dfs.msc.level1.Level1Record.prc_status', index=9,
-      number=10, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
+      name='qc1_time', full_name='dfs.msc.level1.Level1Record.qc1_time', index=9,
+      number=10, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='prc_time', full_name='dfs.msc.level1.Level1Record.prc_time', index=10,
-      number=11, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      name='prc_status', full_name='dfs.msc.level1.Level1Record.prc_status', index=10,
+      number=11, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='create_time', full_name='dfs.msc.level1.Level1Record.create_time', index=11,
+      name='prc_time', full_name='dfs.msc.level1.Level1Record.prc_time', index=11,
       number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='pipeline_id', full_name='dfs.msc.level1.Level1Record.pipeline_id', index=12,
+      name='create_time', full_name='dfs.msc.level1.Level1Record.create_time', index=12,
       number=13, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='refs', full_name='dfs.msc.level1.Level1Record.refs', index=13,
-      number=14, type=11, cpp_type=10, label=3,
+      name='pipeline_id', full_name='dfs.msc.level1.Level1Record.pipeline_id', index=13,
+      number=14, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='refs', full_name='dfs.msc.level1.Level1Record.refs', index=14,
+      number=15, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -183,7 +188,7 @@ _LEVEL1RECORD = _descriptor.Descriptor(
   oneofs=[
   ],
   serialized_start=64,
-  serialized_end=422,
+  serialized_end=438,
 )
 
 
@@ -197,14 +202,14 @@ _FINDLEVEL1REQ_OTHERCONDITIONSENTRY = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='key', full_name='dfs.msc.level1.FindLevel1Req.OtherConditionsEntry.key', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='value', full_name='dfs.msc.level1.FindLevel1Req.OtherConditionsEntry.value', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -214,14 +219,14 @@ _FINDLEVEL1REQ_OTHERCONDITIONSENTRY = _descriptor.Descriptor(
   nested_types=[],
   enum_types=[
   ],
-  serialized_options=_b('8\001'),
+  serialized_options=b'8\001',
   is_extendable=False,
   syntax='proto3',
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=683,
-  serialized_end=737,
+  serialized_start=699,
+  serialized_end=753,
 )
 
 _FINDLEVEL1REQ = _descriptor.Descriptor(
@@ -234,28 +239,28 @@ _FINDLEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='level0_id', full_name='dfs.msc.level1.FindLevel1Req.level0_id', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='data_type', full_name='dfs.msc.level1.FindLevel1Req.data_type', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='create_time_start', full_name='dfs.msc.level1.FindLevel1Req.create_time_start', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='create_time_end', full_name='dfs.msc.level1.FindLevel1Req.create_time_end', index=3,
       number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -276,7 +281,7 @@ _FINDLEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='filename', full_name='dfs.msc.level1.FindLevel1Req.filename', index=6,
       number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -306,8 +311,8 @@ _FINDLEVEL1REQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=425,
-  serialized_end=737,
+  serialized_start=441,
+  serialized_end=753,
 )
 
 
@@ -358,8 +363,84 @@ _FINDLEVEL1RESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=740,
-  serialized_end=870,
+  serialized_start=756,
+  serialized_end=886,
+)
+
+
+_FINDBYBRICKIDSREQ = _descriptor.Descriptor(
+  name='FindByBrickIdsReq',
+  full_name='dfs.msc.level1.FindByBrickIdsReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='brick_ids', full_name='dfs.msc.level1.FindByBrickIdsReq.brick_ids', index=0,
+      number=1, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=888,
+  serialized_end=926,
+)
+
+
+_FINDBYBRICKIDSRESP = _descriptor.Descriptor(
+  name='FindByBrickIdsResp',
+  full_name='dfs.msc.level1.FindByBrickIdsResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.msc.level1.FindByBrickIdsResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.msc.level1.FindByBrickIdsResp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='records', full_name='dfs.msc.level1.FindByBrickIdsResp.records', index=2,
+      number=3, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=928,
+  serialized_end=1042,
 )
 
 
@@ -380,14 +461,14 @@ _GETLEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='level0_id', full_name='dfs.msc.level1.GetLevel1Req.level0_id', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='data_type', full_name='dfs.msc.level1.GetLevel1Req.data_type', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -403,8 +484,8 @@ _GETLEVEL1REQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=872,
-  serialized_end=936,
+  serialized_start=1044,
+  serialized_end=1108,
 )
 
 
@@ -434,8 +515,8 @@ _GETLEVEL1RESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=938,
-  serialized_end=999,
+  serialized_start=1110,
+  serialized_end=1171,
 )
 
 
@@ -456,7 +537,7 @@ _WRITELEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='data', full_name='dfs.msc.level1.WriteLevel1Req.data', index=1,
       number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
+      has_default_value=False, default_value=b"",
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -472,8 +553,8 @@ _WRITELEVEL1REQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1001,
-  serialized_end=1077,
+  serialized_start=1173,
+  serialized_end=1249,
 )
 
 
@@ -517,8 +598,8 @@ _WRITELEVEL1RESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1079,
-  serialized_end=1189,
+  serialized_start=1251,
+  serialized_end=1361,
 )
 
 
@@ -555,8 +636,8 @@ _UPDATEQC1STATUSREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1191,
-  serialized_end=1239,
+  serialized_start=1363,
+  serialized_end=1411,
 )
 
 
@@ -593,8 +674,8 @@ _UPDATEQC1STATUSRESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1241,
-  serialized_end=1309,
+  serialized_start=1413,
+  serialized_end=1481,
 )
 
 
@@ -631,8 +712,8 @@ _UPDATEPROCSTATUSREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1311,
-  serialized_end=1360,
+  serialized_start=1483,
+  serialized_end=1532,
 )
 
 
@@ -669,8 +750,8 @@ _UPDATEPROCSTATUSRESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1362,
-  serialized_end=1431,
+  serialized_start=1534,
+  serialized_end=1603,
 )
 
 _LEVEL1RECORD_REFSENTRY.containing_type = _LEVEL1RECORD
@@ -679,6 +760,8 @@ _FINDLEVEL1REQ_OTHERCONDITIONSENTRY.containing_type = _FINDLEVEL1REQ
 _FINDLEVEL1REQ.fields_by_name['other_conditions'].message_type = _FINDLEVEL1REQ_OTHERCONDITIONSENTRY
 _FINDLEVEL1RESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
 _FINDLEVEL1RESP.fields_by_name['records'].message_type = _LEVEL1RECORD
+_FINDBYBRICKIDSRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_FINDBYBRICKIDSRESP.fields_by_name['records'].message_type = _LEVEL1RECORD
 _GETLEVEL1RESP.fields_by_name['record'].message_type = _LEVEL1RECORD
 _WRITELEVEL1REQ.fields_by_name['record'].message_type = _LEVEL1RECORD
 _WRITELEVEL1RESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
@@ -688,6 +771,8 @@ _UPDATEPROCSTATUSRESP.fields_by_name['error'].message_type = common_dot_error__p
 DESCRIPTOR.message_types_by_name['Level1Record'] = _LEVEL1RECORD
 DESCRIPTOR.message_types_by_name['FindLevel1Req'] = _FINDLEVEL1REQ
 DESCRIPTOR.message_types_by_name['FindLevel1Resp'] = _FINDLEVEL1RESP
+DESCRIPTOR.message_types_by_name['FindByBrickIdsReq'] = _FINDBYBRICKIDSREQ
+DESCRIPTOR.message_types_by_name['FindByBrickIdsResp'] = _FINDBYBRICKIDSRESP
 DESCRIPTOR.message_types_by_name['GetLevel1Req'] = _GETLEVEL1REQ
 DESCRIPTOR.message_types_by_name['GetLevel1Resp'] = _GETLEVEL1RESP
 DESCRIPTOR.message_types_by_name['WriteLevel1Req'] = _WRITELEVEL1REQ
@@ -735,6 +820,20 @@ FindLevel1Resp = _reflection.GeneratedProtocolMessageType('FindLevel1Resp', (_me
   })
 _sym_db.RegisterMessage(FindLevel1Resp)
 
+FindByBrickIdsReq = _reflection.GeneratedProtocolMessageType('FindByBrickIdsReq', (_message.Message,), {
+  'DESCRIPTOR' : _FINDBYBRICKIDSREQ,
+  '__module__' : 'msc.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.msc.level1.FindByBrickIdsReq)
+  })
+_sym_db.RegisterMessage(FindByBrickIdsReq)
+
+FindByBrickIdsResp = _reflection.GeneratedProtocolMessageType('FindByBrickIdsResp', (_message.Message,), {
+  'DESCRIPTOR' : _FINDBYBRICKIDSRESP,
+  '__module__' : 'msc.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.msc.level1.FindByBrickIdsResp)
+  })
+_sym_db.RegisterMessage(FindByBrickIdsResp)
+
 GetLevel1Req = _reflection.GeneratedProtocolMessageType('GetLevel1Req', (_message.Message,), {
   'DESCRIPTOR' : _GETLEVEL1REQ,
   '__module__' : 'msc.level1.level1_pb2'
@@ -802,8 +901,8 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
-  serialized_start=1434,
-  serialized_end=1857,
+  serialized_start=1606,
+  serialized_end=2120,
   methods=[
   _descriptor.MethodDescriptor(
     name='Find',
@@ -814,10 +913,19 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
     output_type=_FINDLEVEL1RESP,
     serialized_options=None,
   ),
+  _descriptor.MethodDescriptor(
+    name='FindByBrickIds',
+    full_name='dfs.msc.level1.Level1Srv.FindByBrickIds',
+    index=1,
+    containing_service=None,
+    input_type=_FINDBYBRICKIDSREQ,
+    output_type=_FINDBYBRICKIDSRESP,
+    serialized_options=None,
+  ),
   _descriptor.MethodDescriptor(
     name='Get',
     full_name='dfs.msc.level1.Level1Srv.Get',
-    index=1,
+    index=2,
     containing_service=None,
     input_type=_GETLEVEL1REQ,
     output_type=_GETLEVEL1RESP,
@@ -826,7 +934,7 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='Write',
     full_name='dfs.msc.level1.Level1Srv.Write',
-    index=2,
+    index=3,
     containing_service=None,
     input_type=_WRITELEVEL1REQ,
     output_type=_WRITELEVEL1RESP,
@@ -835,7 +943,7 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='UpdateQc1Status',
     full_name='dfs.msc.level1.Level1Srv.UpdateQc1Status',
-    index=3,
+    index=4,
     containing_service=None,
     input_type=_UPDATEQC1STATUSREQ,
     output_type=_UPDATEQC1STATUSRESP,
@@ -844,7 +952,7 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='UpdateProcStatus',
     full_name='dfs.msc.level1.Level1Srv.UpdateProcStatus',
-    index=4,
+    index=5,
     containing_service=None,
     input_type=_UPDATEPROCSTATUSREQ,
     output_type=_UPDATEPROCSTATUSRESP,
diff --git a/csst_dfs_proto/msc/level1/level1_pb2_grpc.py b/csst_dfs_proto/msc/level1/level1_pb2_grpc.py
index e76e2ee1e08c73d583ea4dcef6c833456d073e4b..0eb225f053706c20c1983d6a46a6f9652ddd580e 100644
--- a/csst_dfs_proto/msc/level1/level1_pb2_grpc.py
+++ b/csst_dfs_proto/msc/level1/level1_pb2_grpc.py
@@ -5,110 +5,220 @@ from . import level1_pb2 as msc_dot_level1_dot_level1__pb2
 
 
 class Level1SrvStub(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def __init__(self, channel):
-    """Constructor.
-
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.Find = channel.unary_unary(
-        '/dfs.msc.level1.Level1Srv/Find',
-        request_serializer=msc_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
-        response_deserializer=msc_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
-        )
-    self.Get = channel.unary_unary(
-        '/dfs.msc.level1.Level1Srv/Get',
-        request_serializer=msc_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
-        response_deserializer=msc_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
-        )
-    self.Write = channel.stream_unary(
-        '/dfs.msc.level1.Level1Srv/Write',
-        request_serializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
-        response_deserializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
-        )
-    self.UpdateQc1Status = channel.unary_unary(
-        '/dfs.msc.level1.Level1Srv/UpdateQc1Status',
-        request_serializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
-        response_deserializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
-        )
-    self.UpdateProcStatus = channel.unary_unary(
-        '/dfs.msc.level1.Level1Srv/UpdateProcStatus',
-        request_serializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
-        response_deserializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
-        )
+    """Missing associated documentation comment in .proto file"""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.Find = channel.unary_unary(
+                '/dfs.msc.level1.Level1Srv/Find',
+                request_serializer=msc_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
+                response_deserializer=msc_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
+                )
+        self.FindByBrickIds = channel.unary_unary(
+                '/dfs.msc.level1.Level1Srv/FindByBrickIds',
+                request_serializer=msc_dot_level1_dot_level1__pb2.FindByBrickIdsReq.SerializeToString,
+                response_deserializer=msc_dot_level1_dot_level1__pb2.FindByBrickIdsResp.FromString,
+                )
+        self.Get = channel.unary_unary(
+                '/dfs.msc.level1.Level1Srv/Get',
+                request_serializer=msc_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
+                response_deserializer=msc_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
+                )
+        self.Write = channel.stream_unary(
+                '/dfs.msc.level1.Level1Srv/Write',
+                request_serializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
+                response_deserializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
+                )
+        self.UpdateQc1Status = channel.unary_unary(
+                '/dfs.msc.level1.Level1Srv/UpdateQc1Status',
+                request_serializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
+                response_deserializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
+                )
+        self.UpdateProcStatus = channel.unary_unary(
+                '/dfs.msc.level1.Level1Srv/UpdateProcStatus',
+                request_serializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
+                response_deserializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
+                )
 
 
 class Level1SrvServicer(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def Find(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def Get(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def Write(self, request_iterator, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def UpdateQc1Status(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def UpdateProcStatus(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    """Missing associated documentation comment in .proto file"""
+
+    def Find(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def FindByBrickIds(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Get(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Write(self, request_iterator, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateQc1Status(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateProcStatus(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_Level1SrvServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'Find': grpc.unary_unary_rpc_method_handler(
-          servicer.Find,
-          request_deserializer=msc_dot_level1_dot_level1__pb2.FindLevel1Req.FromString,
-          response_serializer=msc_dot_level1_dot_level1__pb2.FindLevel1Resp.SerializeToString,
-      ),
-      'Get': grpc.unary_unary_rpc_method_handler(
-          servicer.Get,
-          request_deserializer=msc_dot_level1_dot_level1__pb2.GetLevel1Req.FromString,
-          response_serializer=msc_dot_level1_dot_level1__pb2.GetLevel1Resp.SerializeToString,
-      ),
-      'Write': grpc.stream_unary_rpc_method_handler(
-          servicer.Write,
-          request_deserializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Req.FromString,
-          response_serializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Resp.SerializeToString,
-      ),
-      'UpdateQc1Status': grpc.unary_unary_rpc_method_handler(
-          servicer.UpdateQc1Status,
-          request_deserializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.FromString,
-          response_serializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.SerializeToString,
-      ),
-      'UpdateProcStatus': grpc.unary_unary_rpc_method_handler(
-          servicer.UpdateProcStatus,
-          request_deserializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusReq.FromString,
-          response_serializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusResp.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'dfs.msc.level1.Level1Srv', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'Find': grpc.unary_unary_rpc_method_handler(
+                    servicer.Find,
+                    request_deserializer=msc_dot_level1_dot_level1__pb2.FindLevel1Req.FromString,
+                    response_serializer=msc_dot_level1_dot_level1__pb2.FindLevel1Resp.SerializeToString,
+            ),
+            'FindByBrickIds': grpc.unary_unary_rpc_method_handler(
+                    servicer.FindByBrickIds,
+                    request_deserializer=msc_dot_level1_dot_level1__pb2.FindByBrickIdsReq.FromString,
+                    response_serializer=msc_dot_level1_dot_level1__pb2.FindByBrickIdsResp.SerializeToString,
+            ),
+            'Get': grpc.unary_unary_rpc_method_handler(
+                    servicer.Get,
+                    request_deserializer=msc_dot_level1_dot_level1__pb2.GetLevel1Req.FromString,
+                    response_serializer=msc_dot_level1_dot_level1__pb2.GetLevel1Resp.SerializeToString,
+            ),
+            'Write': grpc.stream_unary_rpc_method_handler(
+                    servicer.Write,
+                    request_deserializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Req.FromString,
+                    response_serializer=msc_dot_level1_dot_level1__pb2.WriteLevel1Resp.SerializeToString,
+            ),
+            'UpdateQc1Status': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateQc1Status,
+                    request_deserializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.FromString,
+                    response_serializer=msc_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.SerializeToString,
+            ),
+            'UpdateProcStatus': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateProcStatus,
+                    request_deserializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusReq.FromString,
+                    response_serializer=msc_dot_level1_dot_level1__pb2.UpdateProcStatusResp.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dfs.msc.level1.Level1Srv', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Level1Srv(object):
+    """Missing associated documentation comment in .proto file"""
+
+    @staticmethod
+    def Find(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.msc.level1.Level1Srv/Find',
+            msc_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
+            msc_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def FindByBrickIds(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.msc.level1.Level1Srv/FindByBrickIds',
+            msc_dot_level1_dot_level1__pb2.FindByBrickIdsReq.SerializeToString,
+            msc_dot_level1_dot_level1__pb2.FindByBrickIdsResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Get(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.msc.level1.Level1Srv/Get',
+            msc_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
+            msc_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Write(request_iterator,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.stream_unary(request_iterator, target, '/dfs.msc.level1.Level1Srv/Write',
+            msc_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
+            msc_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateQc1Status(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.msc.level1.Level1Srv/UpdateQc1Status',
+            msc_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
+            msc_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateProcStatus(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.msc.level1.Level1Srv/UpdateProcStatus',
+            msc_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
+            msc_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/csst_dfs_proto/sls/level1/level1_pb2.py b/csst_dfs_proto/sls/level1/level1_pb2.py
index 21f88feb232da8c36ea0309b9fe326f2d52cceb5..04f97558e4d77a716d4e7134deccdfb7832031f5 100644
--- a/csst_dfs_proto/sls/level1/level1_pb2.py
+++ b/csst_dfs_proto/sls/level1/level1_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: sls/level1/level1.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -20,8 +18,8 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   name='sls/level1/level1.proto',
   package='dfs.sls.level1',
   syntax='proto3',
-  serialized_options=_b('Z\037cnlab.net/csst/proto/sls/level1'),
-  serialized_pb=_b('\n\x17sls/level1/level1.proto\x12\x0e\x64\x66s.sls.level1\x1a\x12\x63ommon/error.proto\"\xd2\x02\n\x0cLevel1Record\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\x12\x12\n\nprc_params\x18\x04 \x01(\t\x12\x10\n\x08\x66ilename\x18\x05 \x01(\t\x12\x11\n\tfile_path\x18\x06 \x01(\t\x12\x12\n\nqc1_status\x18\x07 \x01(\x05\x12\x10\n\x08qc1_time\x18\x08 \x01(\t\x12\x12\n\nprc_status\x18\t \x01(\x05\x12\x10\n\x08prc_time\x18\n \x01(\t\x12\x13\n\x0b\x63reate_time\x18\x0b \x01(\t\x12\x13\n\x0bpipeline_id\x18\x0c \x01(\t\x12\x34\n\x04refs\x18\r \x03(\x0b\x32&.dfs.sls.level1.Level1Record.RefsEntry\x1a+\n\tRefsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"\xb8\x02\n\rFindLevel1Req\x12\x11\n\tlevel0_id\x18\x01 \x01(\t\x12\x11\n\tdata_type\x18\x02 \x01(\t\x12\x19\n\x11\x63reate_time_start\x18\x03 \x01(\t\x12\x17\n\x0f\x63reate_time_end\x18\x04 \x01(\t\x12\x12\n\nqc1_status\x18\x05 \x01(\x05\x12\x12\n\nprc_status\x18\x06 \x01(\x05\x12\x10\n\x08\x66ilename\x18\x07 \x01(\t\x12\r\n\x05limit\x18\x08 \x01(\x05\x12L\n\x10other_conditions\x18\t \x03(\x0b\x32\x32.dfs.sls.level1.FindLevel1Req.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x0e\x46indLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12-\n\x07records\x18\x04 \x03(\x0b\x32\x1c.dfs.sls.level1.Level1Record\"@\n\x0cGetLevel1Req\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\"=\n\rGetLevel1Resp\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.sls.level1.Level1Record\"L\n\x0eWriteLevel1Req\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.sls.level1.Level1Record\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"n\n\x0fWriteLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12,\n\x06record\x18\x03 \x01(\x0b\x32\x1c.dfs.sls.level1.Level1Record\"0\n\x12UpdateQc1StatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"D\n\x13UpdateQc1StatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\"1\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\xa7\x03\n\tLevel1Srv\x12G\n\x04\x46ind\x12\x1d.dfs.sls.level1.FindLevel1Req\x1a\x1e.dfs.sls.level1.FindLevel1Resp\"\x00\x12\x44\n\x03Get\x12\x1c.dfs.sls.level1.GetLevel1Req\x1a\x1d.dfs.sls.level1.GetLevel1Resp\"\x00\x12L\n\x05Write\x12\x1e.dfs.sls.level1.WriteLevel1Req\x1a\x1f.dfs.sls.level1.WriteLevel1Resp\"\x00(\x01\x12\\\n\x0fUpdateQc1Status\x12\".dfs.sls.level1.UpdateQc1StatusReq\x1a#.dfs.sls.level1.UpdateQc1StatusResp\"\x00\x12_\n\x10UpdateProcStatus\x12#.dfs.sls.level1.UpdateProcStatusReq\x1a$.dfs.sls.level1.UpdateProcStatusResp\"\x00\x42!Z\x1f\x63nlab.net/csst/proto/sls/level1b\x06proto3')
+  serialized_options=b'Z\037cnlab.net/csst/proto/sls/level1',
+  serialized_pb=b'\n\x17sls/level1/level1.proto\x12\x0e\x64\x66s.sls.level1\x1a\x12\x63ommon/error.proto\"\xe2\x02\n\x0cLevel1Record\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\x12\x12\n\nprc_params\x18\x04 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x05 \x01(\t\x12\x10\n\x08\x66ilename\x18\x06 \x01(\t\x12\x11\n\tfile_path\x18\x07 \x01(\t\x12\x12\n\nqc1_status\x18\x08 \x01(\x05\x12\x10\n\x08qc1_time\x18\t \x01(\t\x12\x12\n\nprc_status\x18\n \x01(\x05\x12\x10\n\x08prc_time\x18\x0b \x01(\t\x12\x13\n\x0b\x63reate_time\x18\x0c \x01(\t\x12\x13\n\x0bpipeline_id\x18\r \x01(\t\x12\x34\n\x04refs\x18\x0e \x03(\x0b\x32&.dfs.sls.level1.Level1Record.RefsEntry\x1a+\n\tRefsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"\xb8\x02\n\rFindLevel1Req\x12\x11\n\tlevel0_id\x18\x01 \x01(\t\x12\x11\n\tdata_type\x18\x02 \x01(\t\x12\x19\n\x11\x63reate_time_start\x18\x03 \x01(\t\x12\x17\n\x0f\x63reate_time_end\x18\x04 \x01(\t\x12\x12\n\nqc1_status\x18\x05 \x01(\x05\x12\x12\n\nprc_status\x18\x06 \x01(\x05\x12\x10\n\x08\x66ilename\x18\x07 \x01(\t\x12\r\n\x05limit\x18\x08 \x01(\x05\x12L\n\x10other_conditions\x18\t \x03(\x0b\x32\x32.dfs.sls.level1.FindLevel1Req.OtherConditionsEntry\x1a\x36\n\x14OtherConditionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x0e\x46indLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\ntotalCount\x18\x02 \x01(\x05\x12\x1c\n\x05\x65rror\x18\x03 \x01(\x0b\x32\r.common.Error\x12-\n\x07records\x18\x04 \x03(\x0b\x32\x1c.dfs.sls.level1.Level1Record\"&\n\x11\x46indByBrickIdsReq\x12\x11\n\tbrick_ids\x18\x01 \x03(\x05\"r\n\x12\x46indByBrickIdsResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12-\n\x07records\x18\x03 \x03(\x0b\x32\x1c.dfs.sls.level1.Level1Record\"@\n\x0cGetLevel1Req\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x11\n\tlevel0_id\x18\x02 \x01(\t\x12\x11\n\tdata_type\x18\x03 \x01(\t\"=\n\rGetLevel1Resp\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.sls.level1.Level1Record\"L\n\x0eWriteLevel1Req\x12,\n\x06record\x18\x01 \x01(\x0b\x32\x1c.dfs.sls.level1.Level1Record\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"n\n\x0fWriteLevel1Resp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\x12,\n\x06record\x18\x03 \x01(\x0b\x32\x1c.dfs.sls.level1.Level1Record\"0\n\x12UpdateQc1StatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"D\n\x13UpdateQc1StatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error\"1\n\x13UpdateProcStatusReq\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\"E\n\x14UpdateProcStatusResp\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1c\n\x05\x65rror\x18\x02 \x01(\x0b\x32\r.common.Error2\x82\x04\n\tLevel1Srv\x12G\n\x04\x46ind\x12\x1d.dfs.sls.level1.FindLevel1Req\x1a\x1e.dfs.sls.level1.FindLevel1Resp\"\x00\x12Y\n\x0e\x46indByBrickIds\x12!.dfs.sls.level1.FindByBrickIdsReq\x1a\".dfs.sls.level1.FindByBrickIdsResp\"\x00\x12\x44\n\x03Get\x12\x1c.dfs.sls.level1.GetLevel1Req\x1a\x1d.dfs.sls.level1.GetLevel1Resp\"\x00\x12L\n\x05Write\x12\x1e.dfs.sls.level1.WriteLevel1Req\x1a\x1f.dfs.sls.level1.WriteLevel1Resp\"\x00(\x01\x12\\\n\x0fUpdateQc1Status\x12\".dfs.sls.level1.UpdateQc1StatusReq\x1a#.dfs.sls.level1.UpdateQc1StatusResp\"\x00\x12_\n\x10UpdateProcStatus\x12#.dfs.sls.level1.UpdateProcStatusReq\x1a$.dfs.sls.level1.UpdateProcStatusResp\"\x00\x42!Z\x1f\x63nlab.net/csst/proto/sls/level1b\x06proto3'
   ,
   dependencies=[common_dot_error__pb2.DESCRIPTOR,])
 
@@ -38,7 +36,7 @@ _LEVEL1RECORD_REFSENTRY = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='key', full_name='dfs.sls.level1.Level1Record.RefsEntry.key', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -55,14 +53,14 @@ _LEVEL1RECORD_REFSENTRY = _descriptor.Descriptor(
   nested_types=[],
   enum_types=[
   ],
-  serialized_options=_b('8\001'),
+  serialized_options=b'8\001',
   is_extendable=False,
   syntax='proto3',
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=359,
-  serialized_end=402,
+  serialized_start=375,
+  serialized_end=418,
 )
 
 _LEVEL1RECORD = _descriptor.Descriptor(
@@ -82,83 +80,90 @@ _LEVEL1RECORD = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='level0_id', full_name='dfs.sls.level1.Level1Record.level0_id', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='data_type', full_name='dfs.sls.level1.Level1Record.data_type', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='prc_params', full_name='dfs.sls.level1.Level1Record.prc_params', index=3,
       number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='filename', full_name='dfs.sls.level1.Level1Record.filename', index=4,
+      name='filter', full_name='dfs.sls.level1.Level1Record.filter', index=4,
       number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='file_path', full_name='dfs.sls.level1.Level1Record.file_path', index=5,
+      name='filename', full_name='dfs.sls.level1.Level1Record.filename', index=5,
       number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='qc1_status', full_name='dfs.sls.level1.Level1Record.qc1_status', index=6,
-      number=7, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
+      name='file_path', full_name='dfs.sls.level1.Level1Record.file_path', index=6,
+      number=7, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='qc1_time', full_name='dfs.sls.level1.Level1Record.qc1_time', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      name='qc1_status', full_name='dfs.sls.level1.Level1Record.qc1_status', index=7,
+      number=8, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='prc_status', full_name='dfs.sls.level1.Level1Record.prc_status', index=8,
-      number=9, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
+      name='qc1_time', full_name='dfs.sls.level1.Level1Record.qc1_time', index=8,
+      number=9, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='prc_time', full_name='dfs.sls.level1.Level1Record.prc_time', index=9,
-      number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      name='prc_status', full_name='dfs.sls.level1.Level1Record.prc_status', index=9,
+      number=10, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='create_time', full_name='dfs.sls.level1.Level1Record.create_time', index=10,
+      name='prc_time', full_name='dfs.sls.level1.Level1Record.prc_time', index=10,
       number=11, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='pipeline_id', full_name='dfs.sls.level1.Level1Record.pipeline_id', index=11,
+      name='create_time', full_name='dfs.sls.level1.Level1Record.create_time', index=11,
       number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
-      name='refs', full_name='dfs.sls.level1.Level1Record.refs', index=12,
-      number=13, type=11, cpp_type=10, label=3,
+      name='pipeline_id', full_name='dfs.sls.level1.Level1Record.pipeline_id', index=12,
+      number=13, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='refs', full_name='dfs.sls.level1.Level1Record.refs', index=13,
+      number=14, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -176,7 +181,7 @@ _LEVEL1RECORD = _descriptor.Descriptor(
   oneofs=[
   ],
   serialized_start=64,
-  serialized_end=402,
+  serialized_end=418,
 )
 
 
@@ -190,14 +195,14 @@ _FINDLEVEL1REQ_OTHERCONDITIONSENTRY = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='key', full_name='dfs.sls.level1.FindLevel1Req.OtherConditionsEntry.key', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='value', full_name='dfs.sls.level1.FindLevel1Req.OtherConditionsEntry.value', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -207,14 +212,14 @@ _FINDLEVEL1REQ_OTHERCONDITIONSENTRY = _descriptor.Descriptor(
   nested_types=[],
   enum_types=[
   ],
-  serialized_options=_b('8\001'),
+  serialized_options=b'8\001',
   is_extendable=False,
   syntax='proto3',
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=663,
-  serialized_end=717,
+  serialized_start=679,
+  serialized_end=733,
 )
 
 _FINDLEVEL1REQ = _descriptor.Descriptor(
@@ -227,28 +232,28 @@ _FINDLEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='level0_id', full_name='dfs.sls.level1.FindLevel1Req.level0_id', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='data_type', full_name='dfs.sls.level1.FindLevel1Req.data_type', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='create_time_start', full_name='dfs.sls.level1.FindLevel1Req.create_time_start', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='create_time_end', full_name='dfs.sls.level1.FindLevel1Req.create_time_end', index=3,
       number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -269,7 +274,7 @@ _FINDLEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='filename', full_name='dfs.sls.level1.FindLevel1Req.filename', index=6,
       number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -299,8 +304,8 @@ _FINDLEVEL1REQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=405,
-  serialized_end=717,
+  serialized_start=421,
+  serialized_end=733,
 )
 
 
@@ -351,8 +356,84 @@ _FINDLEVEL1RESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=720,
-  serialized_end=850,
+  serialized_start=736,
+  serialized_end=866,
+)
+
+
+_FINDBYBRICKIDSREQ = _descriptor.Descriptor(
+  name='FindByBrickIdsReq',
+  full_name='dfs.sls.level1.FindByBrickIdsReq',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='brick_ids', full_name='dfs.sls.level1.FindByBrickIdsReq.brick_ids', index=0,
+      number=1, type=5, cpp_type=1, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=868,
+  serialized_end=906,
+)
+
+
+_FINDBYBRICKIDSRESP = _descriptor.Descriptor(
+  name='FindByBrickIdsResp',
+  full_name='dfs.sls.level1.FindByBrickIdsResp',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='success', full_name='dfs.sls.level1.FindByBrickIdsResp.success', index=0,
+      number=1, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='error', full_name='dfs.sls.level1.FindByBrickIdsResp.error', index=1,
+      number=2, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='records', full_name='dfs.sls.level1.FindByBrickIdsResp.records', index=2,
+      number=3, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=908,
+  serialized_end=1022,
 )
 
 
@@ -373,14 +454,14 @@ _GETLEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='level0_id', full_name='dfs.sls.level1.GetLevel1Req.level0_id', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
     _descriptor.FieldDescriptor(
       name='data_type', full_name='dfs.sls.level1.GetLevel1Req.data_type', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -396,8 +477,8 @@ _GETLEVEL1REQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=852,
-  serialized_end=916,
+  serialized_start=1024,
+  serialized_end=1088,
 )
 
 
@@ -427,8 +508,8 @@ _GETLEVEL1RESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=918,
-  serialized_end=979,
+  serialized_start=1090,
+  serialized_end=1151,
 )
 
 
@@ -449,7 +530,7 @@ _WRITELEVEL1REQ = _descriptor.Descriptor(
     _descriptor.FieldDescriptor(
       name='data', full_name='dfs.sls.level1.WriteLevel1Req.data', index=1,
       number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
+      has_default_value=False, default_value=b"",
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       serialized_options=None, file=DESCRIPTOR),
@@ -465,8 +546,8 @@ _WRITELEVEL1REQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=981,
-  serialized_end=1057,
+  serialized_start=1153,
+  serialized_end=1229,
 )
 
 
@@ -510,8 +591,8 @@ _WRITELEVEL1RESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1059,
-  serialized_end=1169,
+  serialized_start=1231,
+  serialized_end=1341,
 )
 
 
@@ -548,8 +629,8 @@ _UPDATEQC1STATUSREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1171,
-  serialized_end=1219,
+  serialized_start=1343,
+  serialized_end=1391,
 )
 
 
@@ -586,8 +667,8 @@ _UPDATEQC1STATUSRESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1221,
-  serialized_end=1289,
+  serialized_start=1393,
+  serialized_end=1461,
 )
 
 
@@ -624,8 +705,8 @@ _UPDATEPROCSTATUSREQ = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1291,
-  serialized_end=1340,
+  serialized_start=1463,
+  serialized_end=1512,
 )
 
 
@@ -662,8 +743,8 @@ _UPDATEPROCSTATUSRESP = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=1342,
-  serialized_end=1411,
+  serialized_start=1514,
+  serialized_end=1583,
 )
 
 _LEVEL1RECORD_REFSENTRY.containing_type = _LEVEL1RECORD
@@ -672,6 +753,8 @@ _FINDLEVEL1REQ_OTHERCONDITIONSENTRY.containing_type = _FINDLEVEL1REQ
 _FINDLEVEL1REQ.fields_by_name['other_conditions'].message_type = _FINDLEVEL1REQ_OTHERCONDITIONSENTRY
 _FINDLEVEL1RESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
 _FINDLEVEL1RESP.fields_by_name['records'].message_type = _LEVEL1RECORD
+_FINDBYBRICKIDSRESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
+_FINDBYBRICKIDSRESP.fields_by_name['records'].message_type = _LEVEL1RECORD
 _GETLEVEL1RESP.fields_by_name['record'].message_type = _LEVEL1RECORD
 _WRITELEVEL1REQ.fields_by_name['record'].message_type = _LEVEL1RECORD
 _WRITELEVEL1RESP.fields_by_name['error'].message_type = common_dot_error__pb2._ERROR
@@ -681,6 +764,8 @@ _UPDATEPROCSTATUSRESP.fields_by_name['error'].message_type = common_dot_error__p
 DESCRIPTOR.message_types_by_name['Level1Record'] = _LEVEL1RECORD
 DESCRIPTOR.message_types_by_name['FindLevel1Req'] = _FINDLEVEL1REQ
 DESCRIPTOR.message_types_by_name['FindLevel1Resp'] = _FINDLEVEL1RESP
+DESCRIPTOR.message_types_by_name['FindByBrickIdsReq'] = _FINDBYBRICKIDSREQ
+DESCRIPTOR.message_types_by_name['FindByBrickIdsResp'] = _FINDBYBRICKIDSRESP
 DESCRIPTOR.message_types_by_name['GetLevel1Req'] = _GETLEVEL1REQ
 DESCRIPTOR.message_types_by_name['GetLevel1Resp'] = _GETLEVEL1RESP
 DESCRIPTOR.message_types_by_name['WriteLevel1Req'] = _WRITELEVEL1REQ
@@ -728,6 +813,20 @@ FindLevel1Resp = _reflection.GeneratedProtocolMessageType('FindLevel1Resp', (_me
   })
 _sym_db.RegisterMessage(FindLevel1Resp)
 
+FindByBrickIdsReq = _reflection.GeneratedProtocolMessageType('FindByBrickIdsReq', (_message.Message,), {
+  'DESCRIPTOR' : _FINDBYBRICKIDSREQ,
+  '__module__' : 'sls.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.sls.level1.FindByBrickIdsReq)
+  })
+_sym_db.RegisterMessage(FindByBrickIdsReq)
+
+FindByBrickIdsResp = _reflection.GeneratedProtocolMessageType('FindByBrickIdsResp', (_message.Message,), {
+  'DESCRIPTOR' : _FINDBYBRICKIDSRESP,
+  '__module__' : 'sls.level1.level1_pb2'
+  # @@protoc_insertion_point(class_scope:dfs.sls.level1.FindByBrickIdsResp)
+  })
+_sym_db.RegisterMessage(FindByBrickIdsResp)
+
 GetLevel1Req = _reflection.GeneratedProtocolMessageType('GetLevel1Req', (_message.Message,), {
   'DESCRIPTOR' : _GETLEVEL1REQ,
   '__module__' : 'sls.level1.level1_pb2'
@@ -795,8 +894,8 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
-  serialized_start=1414,
-  serialized_end=1837,
+  serialized_start=1586,
+  serialized_end=2100,
   methods=[
   _descriptor.MethodDescriptor(
     name='Find',
@@ -807,10 +906,19 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
     output_type=_FINDLEVEL1RESP,
     serialized_options=None,
   ),
+  _descriptor.MethodDescriptor(
+    name='FindByBrickIds',
+    full_name='dfs.sls.level1.Level1Srv.FindByBrickIds',
+    index=1,
+    containing_service=None,
+    input_type=_FINDBYBRICKIDSREQ,
+    output_type=_FINDBYBRICKIDSRESP,
+    serialized_options=None,
+  ),
   _descriptor.MethodDescriptor(
     name='Get',
     full_name='dfs.sls.level1.Level1Srv.Get',
-    index=1,
+    index=2,
     containing_service=None,
     input_type=_GETLEVEL1REQ,
     output_type=_GETLEVEL1RESP,
@@ -819,7 +927,7 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='Write',
     full_name='dfs.sls.level1.Level1Srv.Write',
-    index=2,
+    index=3,
     containing_service=None,
     input_type=_WRITELEVEL1REQ,
     output_type=_WRITELEVEL1RESP,
@@ -828,7 +936,7 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='UpdateQc1Status',
     full_name='dfs.sls.level1.Level1Srv.UpdateQc1Status',
-    index=3,
+    index=4,
     containing_service=None,
     input_type=_UPDATEQC1STATUSREQ,
     output_type=_UPDATEQC1STATUSRESP,
@@ -837,7 +945,7 @@ _LEVEL1SRV = _descriptor.ServiceDescriptor(
   _descriptor.MethodDescriptor(
     name='UpdateProcStatus',
     full_name='dfs.sls.level1.Level1Srv.UpdateProcStatus',
-    index=4,
+    index=5,
     containing_service=None,
     input_type=_UPDATEPROCSTATUSREQ,
     output_type=_UPDATEPROCSTATUSRESP,
diff --git a/csst_dfs_proto/sls/level1/level1_pb2_grpc.py b/csst_dfs_proto/sls/level1/level1_pb2_grpc.py
index 3940dd4a06acdbd8b8f6452ef5a832f6f08f424e..2265c9c8b1040daaaac299f1e108555245e20833 100644
--- a/csst_dfs_proto/sls/level1/level1_pb2_grpc.py
+++ b/csst_dfs_proto/sls/level1/level1_pb2_grpc.py
@@ -5,110 +5,220 @@ from . import level1_pb2 as sls_dot_level1_dot_level1__pb2
 
 
 class Level1SrvStub(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def __init__(self, channel):
-    """Constructor.
-
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.Find = channel.unary_unary(
-        '/dfs.sls.level1.Level1Srv/Find',
-        request_serializer=sls_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
-        response_deserializer=sls_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
-        )
-    self.Get = channel.unary_unary(
-        '/dfs.sls.level1.Level1Srv/Get',
-        request_serializer=sls_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
-        response_deserializer=sls_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
-        )
-    self.Write = channel.stream_unary(
-        '/dfs.sls.level1.Level1Srv/Write',
-        request_serializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
-        response_deserializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
-        )
-    self.UpdateQc1Status = channel.unary_unary(
-        '/dfs.sls.level1.Level1Srv/UpdateQc1Status',
-        request_serializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
-        response_deserializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
-        )
-    self.UpdateProcStatus = channel.unary_unary(
-        '/dfs.sls.level1.Level1Srv/UpdateProcStatus',
-        request_serializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
-        response_deserializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
-        )
+    """Missing associated documentation comment in .proto file"""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.Find = channel.unary_unary(
+                '/dfs.sls.level1.Level1Srv/Find',
+                request_serializer=sls_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
+                response_deserializer=sls_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
+                )
+        self.FindByBrickIds = channel.unary_unary(
+                '/dfs.sls.level1.Level1Srv/FindByBrickIds',
+                request_serializer=sls_dot_level1_dot_level1__pb2.FindByBrickIdsReq.SerializeToString,
+                response_deserializer=sls_dot_level1_dot_level1__pb2.FindByBrickIdsResp.FromString,
+                )
+        self.Get = channel.unary_unary(
+                '/dfs.sls.level1.Level1Srv/Get',
+                request_serializer=sls_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
+                response_deserializer=sls_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
+                )
+        self.Write = channel.stream_unary(
+                '/dfs.sls.level1.Level1Srv/Write',
+                request_serializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
+                response_deserializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
+                )
+        self.UpdateQc1Status = channel.unary_unary(
+                '/dfs.sls.level1.Level1Srv/UpdateQc1Status',
+                request_serializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
+                response_deserializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
+                )
+        self.UpdateProcStatus = channel.unary_unary(
+                '/dfs.sls.level1.Level1Srv/UpdateProcStatus',
+                request_serializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
+                response_deserializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
+                )
 
 
 class Level1SrvServicer(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def Find(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def Get(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def Write(self, request_iterator, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def UpdateQc1Status(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def UpdateProcStatus(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    """Missing associated documentation comment in .proto file"""
+
+    def Find(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def FindByBrickIds(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Get(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Write(self, request_iterator, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateQc1Status(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateProcStatus(self, request, context):
+        """Missing associated documentation comment in .proto file"""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_Level1SrvServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'Find': grpc.unary_unary_rpc_method_handler(
-          servicer.Find,
-          request_deserializer=sls_dot_level1_dot_level1__pb2.FindLevel1Req.FromString,
-          response_serializer=sls_dot_level1_dot_level1__pb2.FindLevel1Resp.SerializeToString,
-      ),
-      'Get': grpc.unary_unary_rpc_method_handler(
-          servicer.Get,
-          request_deserializer=sls_dot_level1_dot_level1__pb2.GetLevel1Req.FromString,
-          response_serializer=sls_dot_level1_dot_level1__pb2.GetLevel1Resp.SerializeToString,
-      ),
-      'Write': grpc.stream_unary_rpc_method_handler(
-          servicer.Write,
-          request_deserializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Req.FromString,
-          response_serializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Resp.SerializeToString,
-      ),
-      'UpdateQc1Status': grpc.unary_unary_rpc_method_handler(
-          servicer.UpdateQc1Status,
-          request_deserializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.FromString,
-          response_serializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.SerializeToString,
-      ),
-      'UpdateProcStatus': grpc.unary_unary_rpc_method_handler(
-          servicer.UpdateProcStatus,
-          request_deserializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusReq.FromString,
-          response_serializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusResp.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'dfs.sls.level1.Level1Srv', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'Find': grpc.unary_unary_rpc_method_handler(
+                    servicer.Find,
+                    request_deserializer=sls_dot_level1_dot_level1__pb2.FindLevel1Req.FromString,
+                    response_serializer=sls_dot_level1_dot_level1__pb2.FindLevel1Resp.SerializeToString,
+            ),
+            'FindByBrickIds': grpc.unary_unary_rpc_method_handler(
+                    servicer.FindByBrickIds,
+                    request_deserializer=sls_dot_level1_dot_level1__pb2.FindByBrickIdsReq.FromString,
+                    response_serializer=sls_dot_level1_dot_level1__pb2.FindByBrickIdsResp.SerializeToString,
+            ),
+            'Get': grpc.unary_unary_rpc_method_handler(
+                    servicer.Get,
+                    request_deserializer=sls_dot_level1_dot_level1__pb2.GetLevel1Req.FromString,
+                    response_serializer=sls_dot_level1_dot_level1__pb2.GetLevel1Resp.SerializeToString,
+            ),
+            'Write': grpc.stream_unary_rpc_method_handler(
+                    servicer.Write,
+                    request_deserializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Req.FromString,
+                    response_serializer=sls_dot_level1_dot_level1__pb2.WriteLevel1Resp.SerializeToString,
+            ),
+            'UpdateQc1Status': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateQc1Status,
+                    request_deserializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.FromString,
+                    response_serializer=sls_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.SerializeToString,
+            ),
+            'UpdateProcStatus': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateProcStatus,
+                    request_deserializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusReq.FromString,
+                    response_serializer=sls_dot_level1_dot_level1__pb2.UpdateProcStatusResp.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dfs.sls.level1.Level1Srv', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Level1Srv(object):
+    """Missing associated documentation comment in .proto file"""
+
+    @staticmethod
+    def Find(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.sls.level1.Level1Srv/Find',
+            sls_dot_level1_dot_level1__pb2.FindLevel1Req.SerializeToString,
+            sls_dot_level1_dot_level1__pb2.FindLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def FindByBrickIds(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.sls.level1.Level1Srv/FindByBrickIds',
+            sls_dot_level1_dot_level1__pb2.FindByBrickIdsReq.SerializeToString,
+            sls_dot_level1_dot_level1__pb2.FindByBrickIdsResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Get(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.sls.level1.Level1Srv/Get',
+            sls_dot_level1_dot_level1__pb2.GetLevel1Req.SerializeToString,
+            sls_dot_level1_dot_level1__pb2.GetLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Write(request_iterator,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.stream_unary(request_iterator, target, '/dfs.sls.level1.Level1Srv/Write',
+            sls_dot_level1_dot_level1__pb2.WriteLevel1Req.SerializeToString,
+            sls_dot_level1_dot_level1__pb2.WriteLevel1Resp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateQc1Status(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.sls.level1.Level1Srv/UpdateQc1Status',
+            sls_dot_level1_dot_level1__pb2.UpdateQc1StatusReq.SerializeToString,
+            sls_dot_level1_dot_level1__pb2.UpdateQc1StatusResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateProcStatus(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dfs.sls.level1.Level1Srv/UpdateProcStatus',
+            sls_dot_level1_dot_level1__pb2.UpdateProcStatusReq.SerializeToString,
+            sls_dot_level1_dot_level1__pb2.UpdateProcStatusResp.FromString,
+            options, channel_credentials,
+            call_credentials, compression, wait_for_ready, timeout, metadata)